HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.33
System: Linux li317-225.members.linode.com 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64
User: apache (48)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: //var/www/hobbyistgarage/vendor/inertiajs/inertia-laravel/tests/ServiceProviderTest.php
<?php

namespace Inertia\Tests;

use Closure;
use Inertia\Inertia;
use Inertia\Middleware;
use Illuminate\Http\Request;
use Illuminate\Support\MessageBag;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ViewErrorBag;
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Session;

class ServiceProviderTest extends TestCase
{
    public function test_blade_directive_is_registered()
    {
        $directives = Blade::getCustomDirectives();

        $this->assertArrayHasKey('inertia', $directives);
        $this->assertEquals('<div id="app" data-page="{{ json_encode($page) }}"></div>', $directives['inertia']());
    }

    public function test_request_macro_is_registered()
    {
        $request = Request::create('/user/123', 'GET');

        $this->assertFalse($request->inertia());

        $request->headers->add(['X-Inertia' => 'true']);

        $this->assertTrue($request->inertia());
    }

    public function test_route_macro_is_registered()
    {
        $route = Route::inertia('/', 'User/Edit', ['user' => ['name' => 'Jonathan']]);
        $routes = Route::getRoutes();

        $this->assertNotEmpty($routes->getRoutes());
        $this->assertEquals($route, $routes->getRoutes()[0]);
        $this->assertEquals(['GET', 'HEAD'], $route->methods);
        $this->assertEquals('/', $route->uri);
        $this->assertEquals(['uses' => '\Inertia\Controller@__invoke', 'controller' => '\Inertia\Controller'], $route->action);
        $this->assertEquals(['component' => 'User/Edit', 'props' => ['user' => ['name' => 'Jonathan']]], $route->defaults);
    }

    public function test_middleware_is_registered()
    {
        $kernel = App::make(Kernel::class);

        $this->assertTrue($kernel->hasMiddleware(Middleware::class));
    }

    public function test_validation_errors_are_registered()
    {
        $this->assertInstanceOf(Closure::class, Inertia::getShared('errors'));
    }

    public function test_validation_errors_can_be_empty()
    {
        $errors = Inertia::getShared('errors')();

        $this->assertIsObject($errors);
        $this->assertEmpty(get_object_vars($errors));
    }

    public function test_validation_errors_are_not_registered_when_already_registered()
    {
        Inertia::share('errors', 'This is a validation error');

        $this->assertSame('This is a validation error', Inertia::getShared('errors'));
    }

    public function test_validation_errors_are_returned_in_the_correct_format()
    {
        Session::put('errors', (new ViewErrorBag())->put('default', new MessageBag([
            'name' => 'The name field is required.',
            'email' => 'Not a valid email address.',
        ])));

        $errors = Inertia::getShared('errors')();

        $this->assertIsObject($errors);
        $this->assertSame('The name field is required.', $errors->name);
        $this->assertSame('Not a valid email address.', $errors->email);
    }

    public function test_validation_errors_with_named_error_bags_are_scoped()
    {
        Session::put('errors', (new ViewErrorBag())->put('example', new MessageBag([
            'name' => 'The name field is required.',
            'email' => 'Not a valid email address.',
        ])));

        $errors = Inertia::getShared('errors')();

        $this->assertIsObject($errors);
        $this->assertSame('The name field is required.', $errors->example->name);
        $this->assertSame('Not a valid email address.', $errors->example->email);
    }
}