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

Commit 56f8afc

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 bcc2b22 commit 56f8afc

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
@@ -15,13 +15,15 @@
1515
use Psr\Http\Message\ServerRequestInterface;
1616
use Zend\Diactoros\Response as DiactorosResponse;
1717
use Zend\EventManager\EventManager;
18+
use Zend\EventManager\SharedEventManager;
1819
use Zend\Http\Request;
1920
use Zend\Http\Response;
2021
use Zend\Mvc\Application;
2122
use Zend\Mvc\MiddlewareListener;
2223
use Zend\Mvc\MvcEvent;
2324
use Zend\Router\RouteMatch;
2425
use Zend\ServiceManager\ServiceManager;
26+
use Zend\Stdlib\DispatchableInterface;
2527
use Zend\View\Model\ModelInterface;
2628

2729
class MiddlewareListenerTest extends TestCase
@@ -308,4 +310,49 @@ public function possibleMiddlewareNonPsr7ResponseReturnValues()
308310
['a response string'],
309311
];
310312
}
313+
314+
315+
public function testValidMiddlewareFiresDispatchableInterfaceEventListeners()
316+
{
317+
$middlewareName = uniqid('middleware', true);
318+
$routeMatch = new RouteMatch(['middleware' => $middlewareName]);
319+
$response = new DiactorosResponse();
320+
/* @var $application Application|\PHPUnit_Framework_MockObject_MockObject */
321+
$application = $this->createMock(Application::class);
322+
$sharedManager = new SharedEventManager();
323+
/* @var $sharedListener callable|\PHPUnit_Framework_MockObject_MockObject */
324+
$sharedListener = $this->getMockBuilder(\stdClass::class)->setMethods(['__invoke'])->getMock();
325+
$eventManager = new EventManager();
326+
$middleware = $this->getMockBuilder(\stdClass::class)->setMethods(['__invoke'])->getMock();
327+
$serviceManager = new ServiceManager([
328+
'factories' => [
329+
'EventManager' => function () use ($sharedManager) {
330+
return new EventManager($sharedManager);
331+
},
332+
],
333+
'services' => [
334+
$middlewareName => $middleware,
335+
],
336+
]);
337+
338+
$application->expects(self::any())->method('getRequest')->willReturn(new Request());
339+
$application->expects(self::any())->method('getEventManager')->willReturn($eventManager);
340+
$application->expects(self::any())->method('getServiceManager')->willReturn($serviceManager);
341+
$application->expects(self::any())->method('getResponse')->willReturn(new Response());
342+
$middleware->expects(self::once())->method('__invoke')->willReturn($response);
343+
344+
$event = new MvcEvent();
345+
346+
$event->setRequest(new Request());
347+
$event->setApplication($application);
348+
$event->setError(Application::ERROR_CONTROLLER_CANNOT_DISPATCH);
349+
$event->setRouteMatch($routeMatch);
350+
351+
$listener = new MiddlewareListener();
352+
353+
$sharedManager->attach(DispatchableInterface::class, MvcEvent::EVENT_DISPATCH, $sharedListener);
354+
$sharedListener->expects(self::once())->method('__invoke')->with($event);
355+
356+
$listener->onDispatch($event);
357+
}
311358
}

0 commit comments

Comments
 (0)