|
18 | 18 | use Zend\Diactoros\Response\HtmlResponse;
|
19 | 19 | use Zend\Diactoros\Response as DiactorosResponse;
|
20 | 20 | use Zend\EventManager\EventManager;
|
| 21 | +use Zend\EventManager\SharedEventManager; |
21 | 22 | use Zend\Http\Request;
|
22 | 23 | use Zend\Http\Response;
|
23 | 24 | use Zend\Mvc\Application;
|
|
27 | 28 | use Zend\Mvc\MvcEvent;
|
28 | 29 | use Zend\Router\RouteMatch;
|
29 | 30 | use Zend\ServiceManager\ServiceManager;
|
| 31 | +use Zend\Stdlib\DispatchableInterface; |
30 | 32 | use Zend\View\Model\ModelInterface;
|
31 | 33 |
|
32 | 34 | class MiddlewareListenerTest extends TestCase
|
@@ -462,4 +464,49 @@ public function possibleMiddlewareNonPsr7ResponseReturnValues()
|
462 | 464 | ['a response string'],
|
463 | 465 | ];
|
464 | 466 | }
|
| 467 | + |
| 468 | + |
| 469 | + public function testValidMiddlewareFiresDispatchableInterfaceEventListeners() |
| 470 | + { |
| 471 | + $middlewareName = uniqid('middleware', true); |
| 472 | + $routeMatch = new RouteMatch(['middleware' => $middlewareName]); |
| 473 | + $response = new DiactorosResponse(); |
| 474 | + /* @var $application Application|\PHPUnit_Framework_MockObject_MockObject */ |
| 475 | + $application = $this->createMock(Application::class); |
| 476 | + $sharedManager = new SharedEventManager(); |
| 477 | + /* @var $sharedListener callable|\PHPUnit_Framework_MockObject_MockObject */ |
| 478 | + $sharedListener = $this->getMockBuilder(\stdClass::class)->setMethods(['__invoke'])->getMock(); |
| 479 | + $eventManager = new EventManager(); |
| 480 | + $middleware = $this->getMockBuilder(\stdClass::class)->setMethods(['__invoke'])->getMock(); |
| 481 | + $serviceManager = new ServiceManager([ |
| 482 | + 'factories' => [ |
| 483 | + 'EventManager' => function () use ($sharedManager) { |
| 484 | + return new EventManager($sharedManager); |
| 485 | + }, |
| 486 | + ], |
| 487 | + 'services' => [ |
| 488 | + $middlewareName => $middleware, |
| 489 | + ], |
| 490 | + ]); |
| 491 | + |
| 492 | + $application->expects(self::any())->method('getRequest')->willReturn(new Request()); |
| 493 | + $application->expects(self::any())->method('getEventManager')->willReturn($eventManager); |
| 494 | + $application->expects(self::any())->method('getServiceManager')->willReturn($serviceManager); |
| 495 | + $application->expects(self::any())->method('getResponse')->willReturn(new Response()); |
| 496 | + $middleware->expects(self::once())->method('__invoke')->willReturn($response); |
| 497 | + |
| 498 | + $event = new MvcEvent(); |
| 499 | + |
| 500 | + $event->setRequest(new Request()); |
| 501 | + $event->setApplication($application); |
| 502 | + $event->setError(Application::ERROR_CONTROLLER_CANNOT_DISPATCH); |
| 503 | + $event->setRouteMatch($routeMatch); |
| 504 | + |
| 505 | + $listener = new MiddlewareListener(); |
| 506 | + |
| 507 | + $sharedManager->attach(DispatchableInterface::class, MvcEvent::EVENT_DISPATCH, $sharedListener); |
| 508 | + $sharedListener->expects(self::once())->method('__invoke')->with($event); |
| 509 | + |
| 510 | + $listener->onDispatch($event); |
| 511 | + } |
465 | 512 | }
|
0 commit comments