Browse Source

add tests

Kevin Pfeifer 2 years ago
parent
commit
caa85acaed

+ 28 - 0
tests/TestCase/Http/MiddlewareQueueTest.php

@@ -16,10 +16,12 @@ declare(strict_types=1);
  */
 namespace Cake\Test\TestCase\Http;
 
+use Cake\Core\Container;
 use Cake\Http\MiddlewareQueue;
 use Cake\TestSuite\TestCase;
 use LogicException;
 use OutOfBoundsException;
+use RuntimeException;
 use TestApp\Middleware\DumbMiddleware;
 use TestApp\Middleware\SampleMiddleware;
 
@@ -390,4 +392,30 @@ class MiddlewareQueueTest extends TestCase
             $this->assertSame($cb, $queue->current()->getCallable());
         });
     }
+
+    /**
+     * Make sure middlewares provided via DI are the same object
+     */
+    public function testDIContainer(): void
+    {
+        $container = new Container();
+        $middleware = new SampleMiddleware();
+        $container->add(SampleMiddleware::class, $middleware);
+        $queue = new MiddlewareQueue([], $container);
+        $queue->add(SampleMiddleware::class);
+        $this->assertSame($middleware, $queue->current());
+    }
+
+    /**
+     * Make sure an exception is thrown for unknown middlewares
+     */
+    public function testDIContainerNotResolvable(): void
+    {
+        $container = new Container();
+        $queue = new MiddlewareQueue([], $container);
+        $this->expectException(RuntimeException::class);
+        $this->expectExceptionMessage('Middleware "UnresolvableMiddleware" was not found.');
+        $queue->add('UnresolvableMiddleware');
+        $queue->current();
+    }
 }

+ 14 - 0
tests/TestCase/Http/ServerTest.php

@@ -29,6 +29,7 @@ use Cake\TestSuite\TestCase;
 use InvalidArgumentException;
 use Laminas\Diactoros\Response as LaminasResponse;
 use Laminas\Diactoros\ServerRequest as LaminasServerRequest;
+use Psr\Http\Message\ResponseInterface;
 use TestApp\Http\MiddlewareApplication;
 
 require_once __DIR__ . '/server_mocks.php';
@@ -340,4 +341,17 @@ class ServerTest extends TestCase
 
         $server->setEventManager($events);
     }
+
+    /**
+     * Test server run works without an application implementing ContainerApplicationInterface
+     */
+    public function testAppWithoutContainerApplicationInterface(): void
+    {
+        /** @var \Cake\Core\HttpApplicationInterface|\PHPUnit\Framework\MockObject\MockObject $app */
+        $app = $this->createMock(HttpApplicationInterface::class);
+        $server = new Server($app);
+
+        $request = new ServerRequest();
+        $this->assertInstanceOf(ResponseInterface::class, $server->run($request));
+    }
 }

+ 38 - 0
tests/TestCase/Routing/Middleware/RoutingMiddlewareTest.php

@@ -28,6 +28,7 @@ use Cake\Routing\Route\Route;
 use Cake\Routing\RouteBuilder;
 use Cake\Routing\RouteCollection;
 use Cake\Routing\Router;
+use Cake\Routing\RoutingApplicationInterface;
 use Cake\TestSuite\TestCase;
 use Laminas\Diactoros\Response;
 use TestApp\Application;
@@ -576,6 +577,43 @@ class RoutingMiddlewareTest extends TestCase
     }
 
     /**
+     * Test middleware works without an application implementing ContainerApplicationInterface
+     */
+    public function testAppWithoutContainerApplicationInterface(): void
+    {
+        /** @var \Cake\Core\HttpApplicationInterface|\PHPUnit\Framework\MockObject\MockObject $app */
+        $app = $this->createMock(RoutingApplicationInterface::class);
+        $this->builder->scope('/', function (RouteBuilder $routes): void {
+            $routes->connect('/testpath', ['controller' => 'Articles', 'action' => 'index']);
+        });
+        $request = ServerRequestFactory::fromGlobals(['REQUEST_URI' => '/testpath']);
+        $handler = new TestRequestHandler(function ($request) {
+            return new Response('php://memory', 200);
+        });
+        $middleware = new RoutingMiddleware($app);
+        $response = $middleware->process($request, $handler);
+        $this->assertSame(200, $response->getStatusCode());
+    }
+
+    /**
+     * Test middleware works with an application implementing ContainerApplicationInterface
+     */
+    public function testAppWithContainerApplicationInterface(): void
+    {
+        $app = $this->app();
+        $this->builder->scope('/', function (RouteBuilder $routes): void {
+            $routes->connect('/testpath', ['controller' => 'Articles', 'action' => 'index']);
+        });
+        $request = ServerRequestFactory::fromGlobals(['REQUEST_URI' => '/testpath']);
+        $handler = new TestRequestHandler(function ($request) {
+            return new Response('php://memory', 200);
+        });
+        $middleware = new RoutingMiddleware($app);
+        $response = $middleware->process($request, $handler);
+        $this->assertSame(200, $response->getStatusCode());
+    }
+
+    /**
      * Create a stub application for testing.
      *
      * @param callable|null $handleCallback Callback for "handle" method.