@@ -376,4 +376,67 @@ public function testValidMiddlewareDispatchCancelsPreviousDispatchFailures()
376
376
self ::assertInstanceOf (Response::class, $ event ->getResult ());
377
377
self ::assertEmpty ($ event ->getError (), 'Previously set MVC errors are canceled by a successful dispatch ' );
378
378
}
379
+
380
+ /**
381
+ * @dataProvider possibleMiddlewareNonPsr7ResponseReturnValues
382
+ *
383
+ * @param mixed $middlewareResult
384
+ */
385
+ public function testMiddlewareDispatchWillRetrieveAnyCallableReturnValue ($ middlewareResult )
386
+ {
387
+ $ middlewareName = uniqid ('middleware ' , true );
388
+ $ routeMatch = new RouteMatch (['middleware ' => $ middlewareName ]);
389
+ /* @var $application Application|\PHPUnit_Framework_MockObject_MockObject */
390
+ $ application = $ this ->createMock (Application::class);
391
+ $ serviceManager = $ this ->createMock (ServiceManager::class);
392
+ $ eventManager = new EventManager ();
393
+ $ middleware = $ this ->getMockBuilder (\stdClass::class)->setMethods (['__invoke ' ])->getMock ();
394
+
395
+ $ application ->expects (self ::any ())->method ('getRequest ' )->willReturn (new Request ());
396
+ $ application ->expects (self ::any ())->method ('getEventManager ' )->willReturn ($ eventManager );
397
+ $ application ->expects (self ::any ())->method ('getServiceManager ' )->willReturn ($ serviceManager );
398
+ $ application ->expects (self ::any ())->method ('getResponse ' )->willReturn (new Response ());
399
+ $ middleware ->expects (self ::once ())->method ('__invoke ' )->willReturn ($ middlewareResult );
400
+
401
+ $ serviceManager ->expects (self ::any ())->method ('has ' )->with ($ middlewareName )->willReturn (true );
402
+ $ serviceManager ->expects (self ::any ())->method ('get ' )->with ($ middlewareName )->willReturn ($ middleware );
403
+
404
+ $ eventManager ->attach (MvcEvent::EVENT_DISPATCH_ERROR , function () {
405
+ self ::fail ('No dispatch error should have been raised ' );
406
+ });
407
+
408
+ $ event = new MvcEvent ();
409
+
410
+ $ event ->setRequest (new Request ());
411
+ $ event ->setApplication ($ application );
412
+ $ event ->setError (Application::ERROR_CONTROLLER_CANNOT_DISPATCH );
413
+ $ event ->setRouteMatch ($ routeMatch );
414
+
415
+ $ listener = new MiddlewareListener ();
416
+ $ result = $ listener ->onDispatch ($ event );
417
+
418
+ self ::assertSame ($ middlewareResult , $ result );
419
+ self ::assertSame ($ middlewareResult , $ event ->getResult ());
420
+ self ::assertEmpty ($ event ->getError (), 'No errors raised when the return type is unknown ' );
421
+ }
422
+
423
+ /**
424
+ * @return mixed[][]
425
+ */
426
+ public function possibleMiddlewareNonPsr7ResponseReturnValues ()
427
+ {
428
+ return [
429
+ [123 ],
430
+ [true ],
431
+ [false ],
432
+ [[]],
433
+ [new \stdClass ()],
434
+ [$ this ],
435
+ [$ this ->createMock (ModelInterface::class)],
436
+ [$ this ->createMock (Response::class)],
437
+ [['view model data ' => 'as an array ' ]],
438
+ [['foo ' => new \stdClass ()]],
439
+ ['a response string ' ],
440
+ ];
441
+ }
379
442
}
0 commit comments