|
8 | 8 | namespace ZendTest\Expressive; |
9 | 9 |
|
10 | 10 | use Fig\Http\Message\StatusCodeInterface as StatusCode; |
| 11 | +use Interop\Http\ServerMiddleware\DelegateInterface; |
| 12 | +use Interop\Http\ServerMiddleware\MiddlewareInterface; |
11 | 13 | use PHPUnit\Framework\TestCase; |
12 | 14 | use Prophecy\Argument; |
| 15 | +use Psr\Container\ContainerInterface; |
| 16 | +use Psr\Http\Message\ServerRequestInterface; |
13 | 17 | use Psr\Http\Message\ResponseInterface; |
14 | 18 | use Zend\Diactoros\Response; |
15 | 19 | use Zend\Diactoros\Response\EmitterInterface; |
@@ -76,4 +80,37 @@ public function testInjectedFinalHandlerCanEmitA404WhenNoMiddlewareMatches() |
76 | 80 | $this->assertInstanceOf(ResponseInterface::class, $this->response); |
77 | 81 | $this->assertEquals(StatusCode::STATUS_NOT_FOUND, $this->response->getStatusCode()); |
78 | 82 | } |
| 83 | + |
| 84 | + public function testCallableClassInteropMiddlewareNotRegisteredWithContainerCanBeComposedSuccessfully() |
| 85 | + { |
| 86 | + $response = new Response(); |
| 87 | + $routedMiddleware = $this->prophesize(MiddlewareInterface::class); |
| 88 | + $routedMiddleware |
| 89 | + ->process( |
| 90 | + Argument::type(ServerRequestInterface::class), |
| 91 | + Argument::type(DelegateInterface::class) |
| 92 | + ) |
| 93 | + ->willReturn($response); |
| 94 | + |
| 95 | + $container = $this->prophesize(ContainerInterface::class); |
| 96 | + $container->has('RoutedMiddleware')->willReturn(true); |
| 97 | + $container->get('RoutedMiddleware')->will([$routedMiddleware, 'reveal']); |
| 98 | + $container->has(TestAsset\CallableInteropMiddleware::class)->willReturn(false); |
| 99 | + |
| 100 | + $delegate = new NotFoundDelegate($response); |
| 101 | + $app = new Application(new FastRouteRouter(), $container->reveal(), $delegate, $this->getEmitter()); |
| 102 | + |
| 103 | + $app->pipe(TestAsset\CallableInteropMiddleware::class); |
| 104 | + $app->get('/', 'RoutedMiddleware'); |
| 105 | + |
| 106 | + $request = new ServerRequest([], [], 'https://example.com/foo', 'GET'); |
| 107 | + $app->run($request, new Response()); |
| 108 | + |
| 109 | + $this->assertInstanceOf(ResponseInterface::class, $this->response); |
| 110 | + $this->assertTrue($this->response->hasHeader('X-Callable-Interop-Middleware')); |
| 111 | + $this->assertEquals( |
| 112 | + TestAsset\CallableInteropMiddleware::class, |
| 113 | + $this->response->getHeaderLine('X-Callable-Interop-Middleware') |
| 114 | + ); |
| 115 | + } |
79 | 116 | } |
0 commit comments