Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 3c3136a

Browse files
committed
A shared listener should be attached to middleware, so that the entire useless view layer can do its terrible view model magic
1 parent a6d23ff commit 3c3136a

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

test/MiddlewareListenerTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Zend\Diactoros\Response\HtmlResponse;
1919
use Zend\Diactoros\Response as DiactorosResponse;
2020
use Zend\EventManager\EventManager;
21+
use Zend\EventManager\SharedEventManager;
2122
use Zend\Http\Request;
2223
use Zend\Http\Response;
2324
use Zend\Mvc\Application;
@@ -27,6 +28,7 @@
2728
use Zend\Mvc\MvcEvent;
2829
use Zend\Router\RouteMatch;
2930
use Zend\ServiceManager\ServiceManager;
31+
use Zend\Stdlib\DispatchableInterface;
3032
use Zend\View\Model\ModelInterface;
3133

3234
class MiddlewareListenerTest extends TestCase
@@ -462,4 +464,49 @@ public function possibleMiddlewareNonPsr7ResponseReturnValues()
462464
['a response string'],
463465
];
464466
}
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+
}
465512
}

0 commit comments

Comments
 (0)