1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
<?php
namespace Illuminate\Tests\Routing;
use Illuminate\Container\Container;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Routing\Exceptions\BackedEnumCaseNotFoundException;
use Illuminate\Routing\ImplicitRouteBinding;
use Illuminate\Routing\Route;
use PHPUnit\Framework\TestCase;
include_once 'Enums.php';
class ImplicitRouteBindingTest extends TestCase
{
public function test_it_can_resolve_the_implicit_backed_enum_route_bindings_for_the_given_route()
{
$action = ['uses' => function (CategoryBackedEnum $category) {
return $category->value;
}];
$route = new Route('GET', '/test', $action);
$route->parameters = ['category' => 'fruits'];
$route->prepareForSerialization();
$container = Container::getInstance();
ImplicitRouteBinding::resolveForRoute($container, $route);
$this->assertSame('fruits', $route->parameter('category')->value);
}
public function test_it_can_resolve_the_implicit_backed_enum_route_bindings_for_the_given_route_with_optional_parameter()
{
$action = ['uses' => function (?CategoryBackedEnum $category = null) {
return $category->value;
}];
$route = new Route('GET', '/test', $action);
$route->parameters = ['category' => 'fruits'];
$route->prepareForSerialization();
$container = Container::getInstance();
ImplicitRouteBinding::resolveForRoute($container, $route);
$this->assertSame('fruits', $route->parameter('category')->value);
}
public function test_it_handles_optional_implicit_backed_enum_route_bindings_for_the_given_route_with_optional_parameter()
{
$action = ['uses' => function (?CategoryBackedEnum $category = null) {
return $category->value;
}];
$route = new Route('GET', '/test', $action);
$route->parameters = ['category' => null];
$route->prepareForSerialization();
$container = Container::getInstance();
ImplicitRouteBinding::resolveForRoute($container, $route);
$this->assertNull($route->parameter('category'));
}
public function test_it_does_not_resolve_implicit_non_backed_enum_route_bindings_for_the_given_route()
{
$action = ['uses' => function (CategoryEnum $category) {
return $category->value;
}];
$route = new Route('GET', '/test', $action);
$route->parameters = ['category' => 'fruits'];
$route->prepareForSerialization();
$container = Container::getInstance();
ImplicitRouteBinding::resolveForRoute($container, $route);
$this->assertIsString($route->parameter('category'));
$this->assertSame('fruits', $route->parameter('category'));
}
public function test_implicit_backed_enum_internal_exception()
{
$action = ['uses' => function (CategoryBackedEnum $category) {
return $category->value;
}];
$route = new Route('GET', '/test', $action);
$route->parameters = ['category' => 'cars'];
$route->prepareForSerialization();
$container = Container::getInstance();
$this->expectException(BackedEnumCaseNotFoundException::class);
$this->expectExceptionMessage(sprintf(
'Case [%s] not found on Backed Enum [%s].',
'cars',
CategoryBackedEnum::class,
));
ImplicitRouteBinding::resolveForRoute($container, $route);
}
public function test_it_can_resolve_the_implicit_model_route_bindings_for_the_given_route()
{
$this->expectNotToPerformAssertions();
$action = ['uses' => function (ImplicitRouteBindingUser $user) {
return $user;
}];
$route = new Route('GET', '/test', $action);
$route->parameters = ['user' => new ImplicitRouteBindingUser];
$route->prepareForSerialization();
$container = Container::getInstance();
ImplicitRouteBinding::resolveForRoute($container, $route);
}
}
class ImplicitRouteBindingUser extends Model
{
//
}
|