10
10
namespace ZendTest \Mvc ;
11
11
12
12
use Interop \Container \ContainerInterface ;
13
+ use Interop \Http \ServerMiddleware \DelegateInterface ;
14
+ use Interop \Http \ServerMiddleware \MiddlewareInterface ;
13
15
use PHPUnit \Framework \TestCase ;
14
16
use Psr \Http \Message \ResponseInterface ;
15
17
use Psr \Http \Message \ServerRequestInterface ;
18
+ use Zend \Diactoros \Response \HtmlResponse ;
16
19
use Zend \EventManager \EventManager ;
17
20
use Zend \Http \Request ;
18
21
use Zend \Http \Response ;
@@ -89,6 +92,38 @@ public function testSuccessfullyDispatchesMiddleware()
89
92
$ this ->assertEquals ('Test! ' , $ return ->getBody ());
90
93
}
91
94
95
+ public function testSuccessfullyDispatchesHttpInteropMiddleware ()
96
+ {
97
+ $ expectedOutput = uniqid ('expectedOutput ' , true );
98
+
99
+ $ event = $ this ->createMvcEvent ('path ' , new class ($ expectedOutput ) implements MiddlewareInterface {
100
+ private $ expectedOutput ;
101
+
102
+ public function __construct ($ expectedOutput )
103
+ {
104
+ $ this ->expectedOutput = $ expectedOutput ;
105
+ }
106
+
107
+ public function process (ServerRequestInterface $ request , DelegateInterface $ delegate )
108
+ {
109
+ return new HtmlResponse ($ this ->expectedOutput );
110
+ }
111
+ });
112
+ $ application = $ event ->getApplication ();
113
+
114
+ $ application ->getEventManager ()->attach (MvcEvent::EVENT_DISPATCH_ERROR , function ($ e ) {
115
+ $ this ->fail (sprintf ('dispatch.error triggered when it should not be: %s ' , var_export ($ e ->getError (), 1 )));
116
+ });
117
+
118
+ $ listener = new MiddlewareListener ();
119
+ $ return = $ listener ->onDispatch ($ event );
120
+ $ this ->assertInstanceOf (Response::class, $ return );
121
+
122
+ $ this ->assertInstanceOf (Response::class, $ return );
123
+ $ this ->assertSame (200 , $ return ->getStatusCode ());
124
+ $ this ->assertEquals ($ expectedOutput , $ return ->getBody ());
125
+ }
126
+
92
127
public function testMatchedRouteParamsAreInjectedToRequestAsAttributes ()
93
128
{
94
129
$ matchedRouteParam = uniqid ('matched param ' , true );
@@ -114,7 +149,7 @@ function (ServerRequestInterface $request, ResponseInterface $response) use (&$r
114
149
$ this ->assertSame ($ this ->routeMatch ->reveal (), $ routeAttribute );
115
150
}
116
151
117
- public function testSuccessfullyDispatchesPipeOfMiddleware ()
152
+ public function testSuccessfullyDispatchesPipeOfCallableAndHttpInteropStyleMiddlewares ()
118
153
{
119
154
$ response = new Response ();
120
155
$ routeMatch = $ this ->prophesize (RouteMatch::class);
@@ -135,11 +170,11 @@ public function testSuccessfullyDispatchesPipeOfMiddleware()
135
170
return $ next ($ request ->withAttribute ('firstMiddlewareAttribute ' , 'firstMiddlewareValue ' ), $ response );
136
171
});
137
172
$ serviceManager ->has ('secondMiddleware ' )->willReturn (true );
138
- $ serviceManager ->get ('secondMiddleware ' )->willReturn (function ( $ request , $ response ) {
139
- $ this -> assertInstanceOf (ServerRequestInterface::class, $ request);
140
- $ this -> assertInstanceOf (ResponseInterface::class, $ response );
141
- $ response -> getBody ()-> write ($ request ->getAttribute ('firstMiddlewareAttribute ' ));
142
- return $ response ;
173
+ $ serviceManager ->get ('secondMiddleware ' )->willReturn (new class implements MiddlewareInterface {
174
+ public function process (ServerRequestInterface $ request, DelegateInterface $ delegate )
175
+ {
176
+ return new HtmlResponse ($ request ->getAttribute ('firstMiddlewareAttribute ' ));
177
+ }
143
178
});
144
179
145
180
$ application = $ this ->prophesize (Application::class);
0 commit comments