diff options
| author | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:32 +0100 |
|---|---|---|
| committer | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:32 +0100 |
| commit | 5fe7c87967ff29c4a8f03a9186918d8359f4887e (patch) | |
| tree | dfdd4fdc7a4e96266305f82f5846750ab2efabc9 /tests/Unit/RouterTest.php | |
| parent | 01eac9658c3bc486d2d42a18557fdb82a536348e (diff) | |
big update
Diffstat (limited to 'tests/Unit/RouterTest.php')
| -rw-r--r-- | tests/Unit/RouterTest.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/Unit/RouterTest.php b/tests/Unit/RouterTest.php new file mode 100644 index 0000000..5d08441 --- /dev/null +++ b/tests/Unit/RouterTest.php @@ -0,0 +1,90 @@ +<?php + +declare(strict_types=1); + +use Lightscale\Router\Enums\PathSegmentType; +use Lightscale\Router\PathSegment; +use Lightscale\Router\Router; + +it('initializes') + ->expect(fn () => new Router()) + ->toBeInstanceOf(Router::class); + +it('has root') + ->expect(fn () => (new Router())->root()) + ->toBeInstanceOf(PathSegment::class) + ->getType()->toBe(PathSegmentType::Root); + +it('finds root segment with :dataset path', function (string $path) { + $router = new Router(); + expect($router->findSegment($path))->segment->toBe($router->root()); +})->with(['', '/']); + +it('finds segment one level', function () { + $router = new Router(); + $c1 = $router->root()->child($p1 = 'test1'); + $c2 = $router->root()->child($p2 = 'test2'); + + expect($router->findSegment("/{$p1}"))->segment->toBe($c1); + expect($router->findSegment("/{$p2}"))->segment->toBe($c2); +}); + +it('finds segment one level parameter', function () { + $router = new Router(); + $c1 = $router->root()->child('test2', PathSegmentType::Parameter); + + expect($router->findSegment('/anything')) + ->segment->toBe($c1) + ->parameters->{'test2'}->toBe('anything'); +}); + +it('finds segment one falls back to parameter', function () { + $router = new Router(); + $c1 = $router->root()->child($p1 = 'test1'); + $c2 = $router->root()->child('test2', PathSegmentType::Parameter); + + expect($router->findSegment("/{$p1}"))->segment->toBe($c1); + expect($router->findSegment('/anything')) + ->segment->toBe($c2) + ->parameters->{'test2'}->toBe('anything'); +}); + +it('finds segments in complex routes', function () { + $router = new Router(); + + $r = $router->root(); + + $s1 = $r->child('level1-1')->child('level2-1'); + $s2 = $r->child('level1-1')->child('level2-2'); + $s3 = $r->child('level1-2')->child('level2-3'); + $s4 = $r->child('level1-1')->child('level2-2')->child('level3-1'); + $s5 = $r->child('level1-1'); + $s6 = $r->child('level1-3')->child('level2-4', PathSegmentType::Parameter); + $s7 = $s6->child('level3-2'); + $s8 = $s6->child('level3-3'); + + expect($router->findSegment('/level1-1')?->segment)->toBe($s5); + expect($router->findSegment('/level1-2/level2-3')?->segment)->toBe($s3); + expect($router->findSegment('/level1-1/level2-2/level3-1')?->segment)->toBe($s4); + expect($router->findSegment('/level1-1/level2-1')?->segment)->toBe($s1); + expect($router->findSegment('/level1-1/level2-2')?->segment)->toBe($s2); + expect($router->findSegment('/level1-3/param1')) + ->segment->toBe($s6) + ->parameters->{'level2-4'}->toBe('param1'); + expect($router->findSegment('/level1-3/param2/level3-2')) + ->segment->toBe($s7) + ->parameters->{'level2-4'}->toBe('param2'); + expect($router->findSegment('/level1-3/param3/level3-3')) + ->segment->toBe($s8) + ->parameters->{'level2-4'}->toBe('param3'); +}); + +it('return null when segment not found', function () { + $router = new Router(); + $r = $router->root(); + $r->child('level1-1')->child('level2-1'); + $r->child('level1-1')->child('level2-2'); + $r->child('level1-2')->child('level2-3'); + + expect($router->findSegment('/testing/testing'))->toBeNull(); +}); |
