blob: 5d084411353867ad900ccd4edac16fa5a746135b (
plain)
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
|
<?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();
});
|