diff options
| -rw-r--r-- | src/GroupDefinition.php | 6 | ||||
| -rw-r--r-- | src/RouteDefinition.php | 11 | ||||
| -rw-r--r-- | tests/Unit/GroupDefinitionTest.php | 12 | ||||
| -rw-r--r-- | tests/Unit/RouteDefinitionTest.php | 11 |
4 files changed, 39 insertions, 1 deletions
diff --git a/src/GroupDefinition.php b/src/GroupDefinition.php index 41e359d..1ffddc7 100644 --- a/src/GroupDefinition.php +++ b/src/GroupDefinition.php @@ -18,7 +18,11 @@ class GroupDefinition public function make(HttpMethod $method, string $path, callable $handler): RouteDefinition { - + return $this->group->getRouter()->make( + $method, + $this->group->getFullPrefix() . '/'. ltrim($path, '/'), + $handler + )->inGroup($this->group); } private function getGroup(): Group diff --git a/src/RouteDefinition.php b/src/RouteDefinition.php index fb10380..1ca9201 100644 --- a/src/RouteDefinition.php +++ b/src/RouteDefinition.php @@ -9,11 +9,22 @@ class RouteDefinition public function __construct( private Router $router, private Route $route, + private ?Group $group = null, ) { } + public function inGroup(Group $group): static + { + $this->group = $group; + return $this; + } + public function name(string $value): static { + if (($groupName = $this->group?->getFullName()) !== null) { + $value = $groupName . $value; + } + $this->router->addNamedRoute($value, $this->route); return $this; diff --git a/tests/Unit/GroupDefinitionTest.php b/tests/Unit/GroupDefinitionTest.php index 59a8d3d..b8e8063 100644 --- a/tests/Unit/GroupDefinitionTest.php +++ b/tests/Unit/GroupDefinitionTest.php @@ -2,8 +2,10 @@ declare(strict_types=1); +use Lightscale\Router\Enums\HttpMethod; use Lightscale\Router\Group; use Lightscale\Router\GroupDefinition; +use Lightscale\Router\PathSegmentMatch; use Lightscale\Router\Router; $make = fn () => new GroupDefinition(new Group(new Router(), null)); @@ -21,3 +23,13 @@ it('creates group with name') ->expect(fn () => $make()->name('name')) ->toBeInstanceOf(Group::class) ->getName()->toBe('name'); + +it('can make a route', function () { + $router = new Router; + $group = (new Group($router, null))->prefix('/test'); + $groupDef = new GroupDefinition($group); + $groupDef->make(HttpMethod::Get, '/hello/world', fn () => null); + + expect($router->findSegment('/test/hello/world')) + ->toBeInstanceOf(PathSegmentMatch::class); +}); diff --git a/tests/Unit/RouteDefinitionTest.php b/tests/Unit/RouteDefinitionTest.php index f605293..e7ab935 100644 --- a/tests/Unit/RouteDefinitionTest.php +++ b/tests/Unit/RouteDefinitionTest.php @@ -3,6 +3,7 @@ declare(strict_types=1); use Lightscale\Router\Enums\HttpMethod; +use Lightscale\Router\Group; use Lightscale\Router\Route; use Lightscale\Router\RouteDefinition; use Lightscale\Router\Router; @@ -21,3 +22,13 @@ it('adds route to named routes', function () { expect($definition->name('testing'))->toBe($definition); expect($router->getNamedRoute('testing'))->toBe($route); }); + +it('adds route to named routes in a group', function () { + $router = new Router(); + $route = new Route(HttpMethod::Get, fn () => null); + (new RouteDefinition($router, $route)) + ->inGroup((new Group($router, null))->name('test.')) + ->name('testing'); + + expect($router->getNamedRoute('test.testing'))->toBe($route); +}); |
