aboutsummaryrefslogtreecommitdiff
path: root/tests/RouteLoaderTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/RouteLoaderTest.php')
-rw-r--r--tests/RouteLoaderTest.php57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/RouteLoaderTest.php b/tests/RouteLoaderTest.php
new file mode 100644
index 0000000..c20f58b
--- /dev/null
+++ b/tests/RouteLoaderTest.php
@@ -0,0 +1,57 @@
+<?php
+
+declare(strict_types=1);
+
+namespace BrettParson\MiniRoute\Tests;
+
+use BrettParson\MiniRoute\Routing\RouteLoader;
+use BrettParson\MiniRoute\Tests\Fixtures\ClassLevelController;
+use BrettParson\MiniRoute\Tests\Fixtures\FakeController;
+use BrettParson\MiniRoute\Tests\Fixtures\FakeMiddleware;
+use PHPUnit\Framework\TestCase;
+
+final class RouteLoaderTest extends TestCase
+{
+ public function testLoadsRouteAttributesFromControllerMethods(): void
+ {
+ $routes = (new RouteLoader())->load(FakeController::class);
+
+ $indexed = [];
+
+ foreach ($routes as $route) {
+ $indexed[$route->method . ' ' . $route->path] = $route;
+ }
+
+ $this->assertCount(3, $routes);
+
+ $this->assertSame('GET', $indexed['GET /entries']->method);
+ $this->assertSame('index', $indexed['GET /entries']->controllerMethod);
+ $this->assertSame([], $indexed['GET /entries']->middleware);
+
+ $this->assertSame('show', $indexed['GET /entries/{slug}']->controllerMethod);
+ }
+
+ public function testMethodMiddlewareIsAttached(): void
+ {
+ $routes = (new RouteLoader())->load(FakeController::class);
+
+ $post = null;
+
+ foreach ($routes as $route) {
+ if ($route->method === 'POST') {
+ $post = $route;
+ }
+ }
+
+ $this->assertNotNull($post);
+ $this->assertSame([FakeMiddleware::class], $post->middleware);
+ }
+
+ public function testClassLevelMiddlewareIsInheritedByMethods(): void
+ {
+ $routes = (new RouteLoader())->load(ClassLevelController::class);
+
+ $this->assertCount(1, $routes);
+ $this->assertSame([FakeMiddleware::class], $routes[0]->middleware);
+ }
+}