diff options
| author | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:33 +0100 |
|---|---|---|
| committer | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:33 +0100 |
| commit | 3ccbdb7afd95972fbfdb797601acaedd467663a4 (patch) | |
| tree | 6e6a8e021f42e82cfb63c64f2c3759d8bcdcbaf3 | |
| parent | 7d76684ad6cd0182545489d7ed54ae9823d94ffa (diff) | |
testing of the full group routes
| -rw-r--r-- | src/Group.php | 2 | ||||
| -rw-r--r-- | src/RouteDefinition.php | 5 | ||||
| -rw-r--r-- | tests/Unit/GroupTest.php | 2 | ||||
| -rw-r--r-- | tests/Unit/RouteDefinitionTest.php | 9 | ||||
| -rw-r--r-- | tests/Unit/RouterTest.php | 36 |
5 files changed, 52 insertions, 2 deletions
diff --git a/src/Group.php b/src/Group.php index 9f08d25..aba0b82 100644 --- a/src/Group.php +++ b/src/Group.php @@ -58,7 +58,7 @@ class Group $prefixes = $this->getAncestorString(fn ($g) => $g->getPrefix()); $prefixes = array_map(fn (string $p) => trim($p, '/'), $prefixes); - return '/'.implode('/', $prefixes); + return count($prefixes) > 0 ? '/'.implode('/', $prefixes): ''; } public function name(string $value): static diff --git a/src/RouteDefinition.php b/src/RouteDefinition.php index 6890151..860c918 100644 --- a/src/RouteDefinition.php +++ b/src/RouteDefinition.php @@ -30,4 +30,9 @@ class RouteDefinition return $this; } + + public function getRoute(): Route + { + return $this->route; + } } diff --git a/tests/Unit/GroupTest.php b/tests/Unit/GroupTest.php index 5bb82bc..58d58d6 100644 --- a/tests/Unit/GroupTest.php +++ b/tests/Unit/GroupTest.php @@ -82,7 +82,7 @@ it('order all ancestors and self root first', function () use ($make) { it('gets the path with no prefix or parents') ->expect(fn () => $make()->getFullPrefix()) - ->toBe('/'); + ->toBe(''); it('gets the path without parents') ->expect(fn () => $make()->prefix('/t1/t2')->getFullPrefix()) diff --git a/tests/Unit/RouteDefinitionTest.php b/tests/Unit/RouteDefinitionTest.php index e7ab935..37a98b9 100644 --- a/tests/Unit/RouteDefinitionTest.php +++ b/tests/Unit/RouteDefinitionTest.php @@ -32,3 +32,12 @@ it('adds route to named routes in a group', function () { expect($router->getNamedRoute('test.testing'))->toBe($route); }); + +it('gets the route', function () { + $def = new RouteDefinition( + new Router(), + $route = new Route(HttpMethod::Get, fn () => null), + ); + + expect($def->getRoute())->toBe($route); +}); diff --git a/tests/Unit/RouterTest.php b/tests/Unit/RouterTest.php index 5b11caf..ef3134d 100644 --- a/tests/Unit/RouterTest.php +++ b/tests/Unit/RouterTest.php @@ -304,3 +304,39 @@ it('throws when generating route with non string parameter from name', function $router->route('test', ['test1' => 123]); })->throws(InvalidArgumentException::class); + +it('builds routes in groups', function () { + $router = new Router(); + + $router + ->prefix('/group1/') + ->name('group1.') + ->group(function ($group) use (&$r1, &$r2) { + $r1 = $group->get('/test1', fn () => null)->name('test1')->getRoute(); + + $group + ->prefix('/group2') + ->name('group2.') + ->group(function ($group) use (&$r2){ + $r2 = $group->get('test2', fn () => null)->name('test2')->getRoute(); + }); + }); + + $router + ->name('no-prefix.') + ->group(function ($group) use (&$r3) { + $r3 = $group->post('/test3', fn () => null)->name('test3')->getRoute(); + }); + + $r4 = $router->put('/test4', fn () => null)->name('test4')->getRoute(); + + expect($router->findRoute(HttpMethod::Get, '/group1/test1')->route)->toBe($r1); + expect($router->findRoute(HttpMethod::Get, '/group1/group2/test2')->route)->toBe($r2); + expect($router->findRoute(HttpMethod::Post, '/test3')->route)->toBe($r3); + expect($router->findRoute(HttpMethod::Put, '/test4')->route)->toBe($r4); + + expect($router->getNamedRoute('group1.test1'))->toBe($r1); + expect($router->getNamedRoute('group1.group2.test2'))->toBe($r2); + expect($router->getNamedRoute('no-prefix.test3'))->toBe($r3); + expect($router->getNamedRoute('test4'))->toBe($r4); +}); |
