summaryrefslogtreecommitdiff
path: root/tests/Unit/RouterTest.php
diff options
context:
space:
mode:
authorSam Light <sam@lightscale.co.uk>2026-06-10 19:00:32 +0100
committerSam Light <sam@lightscale.co.uk>2026-06-10 19:00:32 +0100
commit8c0efd0d9317ad92bd55cd6afcd41bdbab827bf8 (patch)
treec654456753e90ab38b7bcb89ece3381ad7a40f4a /tests/Unit/RouterTest.php
parent5fe7c87967ff29c4a8f03a9186918d8359f4887e (diff)
Make basic routing work
Diffstat (limited to 'tests/Unit/RouterTest.php')
-rw-r--r--tests/Unit/RouterTest.php56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/Unit/RouterTest.php b/tests/Unit/RouterTest.php
index 5d08441..12e27a4 100644
--- a/tests/Unit/RouterTest.php
+++ b/tests/Unit/RouterTest.php
@@ -2,14 +2,32 @@
declare(strict_types=1);
+use Lightscale\Router\BasicStrategy;
+use Lightscale\Router\Contracts\Strategy;
+use Lightscale\Router\Enums\HttpMethod;
use Lightscale\Router\Enums\PathSegmentType;
use Lightscale\Router\PathSegment;
+use Lightscale\Router\Route;
+use Lightscale\Router\RouteCall;
use Lightscale\Router\Router;
+use Nyholm\Psr7\Factory\Psr17Factory;
it('initializes')
->expect(fn () => new Router())
->toBeInstanceOf(Router::class);
+it('initializes with basic strategy')
+ ->expect((new Router)->getStrategy())
+ ->toBeInstanceOf(BasicStrategy::class);
+
+it('can set strategy', function() {
+ $router = new Router;
+ $s = new BasicStrategy;
+ expect($router->getStrategy())->not->toBe($s);
+ $router->setStrategy($s);
+ expect($router->getStrategy())->toBe($s);
+});
+
it('has root')
->expect(fn () => (new Router())->root())
->toBeInstanceOf(PathSegment::class)
@@ -88,3 +106,41 @@ it('return null when segment not found', function () {
expect($router->findSegment('/testing/testing'))->toBeNull();
});
+
+it('calls strategy notFound with dispatch', function () {
+ $router = new Router();
+ $factory = new Psr17Factory;
+ $request = $factory->createServerRequest(HttpMethod::Get->value, '/testing/testing');
+ $response = $factory->createResponse();
+
+ $strat = Mockery::mock(Strategy::class);
+ $strat->shouldReceive('notFound')
+ ->with($request)
+ ->andReturn($response);
+
+ $router->setStrategy($strat);
+ $result = $router->dispatch($request);
+ expect($result)->toBe($response);
+});
+
+it('calls strategy runRoute with dispatch on match', function() {
+ $router = new Router();
+
+ $router->root()->child('testing')->addRoute(new Route(
+ HttpMethod::Get,
+ fn () => null,
+ ));
+
+ $factory = new Psr17Factory;
+ $request = $factory->createServerRequest(HttpMethod::Get->value, '/testing');
+ $response = $factory->createResponse();
+
+ $strat = Mockery::mock(Strategy::class);
+ $strat->shouldReceive('runRoute')
+ ->with(Mockery::type(RouteCall::class))
+ ->andReturn($response);
+
+ $router->setStrategy($strat);
+ $result = $router->dispatch($request);
+ expect($result)->toBe($response);
+});