diff --git a/framework/core/tests/integration/extenders/MiddlewareTest.php b/framework/core/tests/integration/extenders/MiddlewareTest.php new file mode 100644 index 000000000..c93cc3265 --- /dev/null +++ b/framework/core/tests/integration/extenders/MiddlewareTest.php @@ -0,0 +1,96 @@ +extend( + (new Extend\Middleware('forum'))->add(FirstTestMiddleware::class) + ); + } + + /** + * @test + */ + public function can_add_middleware() + { + $this->extend( + (new Extend\Middleware('forum'))->add(FirstTestMiddleware::class) + ); + + $response = $this->send($this->request('GET', '/')); + + $this->assertEquals(200, $response->getStatusCode()); + $this->assertArrayHasKey('X-First-Test-Middleware', $response->getHeaders()); + } + + /** + * @test + */ + public function can_replace_middleware() + { + $this->add_first_middleware(); + $this->extend( + (new Extend\Middleware('forum'))->replace(FirstTestMiddleware::class, SecondTestMiddleware::class) + ); + + $response = $this->send($this->request('GET', '/')); + + $this->assertEquals(200, $response->getStatusCode()); + $this->assertArrayNotHasKey('X-First-Test-Middleware', $response->getHeaders()); + $this->assertArrayHasKey('X-Second-Test-Middleware', $response->getHeaders()); + } + + /** + * @test + */ + public function can_remove_middleware() + { + $this->add_first_middleware(); + $this->extend( + (new Extend\Middleware('forum'))->remove(FirstTestMiddleware::class) + ); + + $response = $this->send($this->request('GET', '/')); + + $this->assertEquals(200, $response->getStatusCode()); + $this->assertArrayNotHasKey('X-First-Test-Middleware', $response->getHeaders()); + } +} + +class FirstTestMiddleware implements MiddlewareInterface +{ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + + return $response->withAddedHeader('X-First-Test-Middleware', 'This is a test!'); + } +} + +class SecondTestMiddleware implements MiddlewareInterface +{ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + + return $response->withAddedHeader('X-Second-Test-Middleware', 'This is another test!'); + } +}