2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
20 use Psr\Http\Server\MiddlewareInterface;
21 use Psr\Http\Server\RequestHandlerInterface;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
38 $kernel =
new class implements RequestHandlerInterface {
39 public function handle(ServerRequestInterface $request): ResponseInterface
48 $this->assertSame(204, $response->getStatusCode());
56 $kernel =
new class implements RequestHandlerInterface {
57 public function handle(ServerRequestInterface $request): ResponseInterface
61 ->withHeader(
'X-SEQ-PRE-REQ-HANDLER', $request->getHeader(
'X-SEQ-PRE-REQ-HANDLER'));
65 $middleware1 =
new class implements MiddlewareInterface {
68 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
70 $request = $request->withAddedHeader(
'X-SEQ-PRE-REQ-HANDLER', $this->
id);
71 $response = $handler->handle($request);
73 return $response->withAddedHeader(
'X-SEQ-POST-REQ-HANDLER', $this->
id);
77 $middleware2 = clone $middleware1;
78 $middleware2->id =
'1';
82 $middleware4 = clone $middleware1;
83 $middleware4->id =
'3';
86 $dispatcher->lazy(MiddlewareFixture::class);
87 $dispatcher->add($middleware4);
91 $this->assertSame([
'3',
'2',
'1',
'0'], $response->getHeader(
'X-SEQ-PRE-REQ-HANDLER'));
92 $this->assertSame([
'0',
'1',
'2',
'3'], $response->getHeader(
'X-SEQ-POST-REQ-HANDLER'));
93 $this->assertSame(204, $response->getStatusCode());
101 $kernel =
new class implements RequestHandlerInterface {
102 public function handle(ServerRequestInterface $request): ResponseInterface
107 $middleware =
new class implements MiddlewareInterface {
108 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
119 $this->assertSame(404, $response->getStatusCode());
127 $this->expectException(\InvalidArgumentException::class);
128 $this->expectExceptionCode(1516821342);
130 $kernel =
new class implements RequestHandlerInterface {
131 public function handle(ServerRequestInterface $request): ResponseInterface
139 $dispatcher->lazy(\stdClass::class);
148 $kernel =
new class implements RequestHandlerInterface {
149 public function handle(ServerRequestInterface $request): ResponseInterface
154 $middleware =
new class implements MiddlewareInterface {
155 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
162 $dispatcher->add($middleware);
167 $this->assertSame(204, $response1->getStatusCode());
168 $this->assertSame(204, $response2->getStatusCode());
176 $kernel =
new class implements RequestHandlerInterface {
177 public function handle(ServerRequestInterface $request): ResponseInterface
185 $dispatcher->add(
new class($dispatcher) implements MiddlewareInterface {
188 public function __construct(RequestHandlerInterface $dispatcher)
190 $this->dispatcher = $dispatcher;
193 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
195 if ($request->hasHeader(
'X-NESTED')) {
196 return (
new Response)->withStatus(204)->withAddedHeader(
'X-TRACE',
'nested');
199 $response = $this->dispatcher->handle($request->withAddedHeader(
'X-NESTED',
'1'));
201 return $response->withAddedHeader(
'X-TRACE',
'outer');
207 $this->assertSame(204, $response->getStatusCode());
208 $this->assertSame([
'nested',
'outer'], $response->getHeader(
'X-TRACE'));