summaryrefslogtreecommitdiff
path: root/tests/Unit/GroupTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Unit/GroupTest.php')
-rw-r--r--tests/Unit/GroupTest.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/tests/Unit/GroupTest.php b/tests/Unit/GroupTest.php
new file mode 100644
index 0000000..3b17f19
--- /dev/null
+++ b/tests/Unit/GroupTest.php
@@ -0,0 +1,81 @@
+<?php
+
+declare(strict_types=1);
+
+use Lightscale\Router\Group;
+use Lightscale\Router\GroupDefinition;
+use Lightscale\Router\Router;
+use Lightscale\Router\Test\Utils\TestCallable;
+
+$make = fn(?Group $parent = null, ...$args) => new Group(new Router, $parent, ...$args);
+
+it('initializes with null defaults')
+ ->expect(fn() => $make())
+ ->toBeInstanceOf(Group::class)
+ ->getName()->toBeNull()
+ ->getPrefix()->toBeNull();
+
+it('initializes with values')
+ ->expect(new Group(new Router, null, '/test-path', 'test-name'))
+ ->toBeInstanceOf(Group::class)
+ ->getName()->toBe('test-name')
+ ->getPrefix()->toBe('/test-path');
+
+it('can set/get prefix')
+ ->expect(fn() => $make()->prefix('/test'))
+ ->toBeInstanceOf(Group::class)
+ ->getPrefix()->toBe('/test');
+
+it('can set/get name')
+ ->expect(fn() => $make()->name('test'))
+ ->toBeInstanceOf(Group::class)
+ ->getName()->toBe('test');
+
+it('calls group call back with definition', function () use ($make) {
+ $cb = TestCallable::make(fn() => null);
+ $make()->group($cb);
+
+ $cb->assertCalled();
+ $call = $cb->getLastCall();
+
+ expect($call?->args)->{0}->toBeInstanceOf(GroupDefinition::class);
+});
+
+it('can have a parent')
+ ->expect(fn () => $make($make())->getParent())
+ ->toBeInstanceOf(Group::class);
+
+it('can have a null parent')
+ ->expect(fn () => $make(null)->getParent())
+ ->toBeNull();
+
+it('can get all ancestors')
+ ->expect(fn () => $make($make($make()))->getAncestors())
+ ->toBeArray()
+ ->toContainOnlyInstancesOf(Group::class)
+ ->toHaveCount(2);
+
+it('order all ancestors root first', function () use($make) {
+ $g3 = $make($g2 = $make($g1 = $make()));
+
+ expect($g3->getAncestors())
+ ->toHaveCount(2)
+ ->{0}->toBe($g1)
+ ->{1}->toBe($g2);
+});
+
+it('can get all ancestors and self')
+ ->expect(fn () => $make($make($make()))->getAncestorsAndSelf())
+ ->toBeArray()
+ ->toContainOnlyInstancesOf(Group::class)
+ ->toHaveCount(3);
+
+it('order all ancestors and self root first', function () use($make) {
+ $g3 = $make($g2 = $make($g1 = $make()));
+
+ expect($g3->getAncestorsAndSelf())
+ ->toHaveCount(3)
+ ->{0}->toBe($g1)
+ ->{1}->toBe($g2)
+ ->{2}->toBe($g3);
+});