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

Commit e78b531

Browse files
committed
The dispatch listener should not interfere when MvcEvent#getResult() already yields a non-null result
1 parent 533a489 commit e78b531

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

test/DispatchListenerTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
use Zend\Mvc\MvcEvent;
2020
use Zend\Router\RouteMatch;
2121
use Zend\ServiceManager\ServiceManager;
22+
use Zend\Stdlib\ResponseInterface;
23+
use Zend\View\Model\ModelInterface;
2224

2325
class DispatchListenerTest extends TestCase
2426
{
@@ -83,4 +85,49 @@ public function testUnlocatableControllerViaAbstractFactory()
8385
$this->assertArrayHasKey('error', $log);
8486
$this->assertSame('error-controller-not-found', $log['error']);
8587
}
88+
89+
/**
90+
* @dataProvider alreadySetMvcEventResultProvider
91+
*
92+
* @param mixed $alreadySetResult
93+
*/
94+
public function testWillNotDispatchWhenAnMvcEventResultIsAlreadySet($alreadySetResult)
95+
{
96+
$event = $this->createMvcEvent('path');
97+
98+
$event->setResult($alreadySetResult);
99+
100+
$listener = new DispatchListener(new ControllerManager(new ServiceManager(), ['abstract_factories' => [
101+
Controller\TestAsset\UnlocatableControllerLoaderAbstractFactory::class,
102+
]]));
103+
104+
$event->getApplication()->getEventManager()->attach(MvcEvent::EVENT_DISPATCH_ERROR, function () {
105+
self::fail('No dispatch failures should be raised - dispatch should be skipped');
106+
});
107+
108+
$listener->onDispatch($event);
109+
110+
self::assertSame($alreadySetResult, $event->getResult(), 'The event result was not replaced');
111+
}
112+
113+
/**
114+
* @return mixed[][]
115+
*/
116+
public function alreadySetMvcEventResultProvider()
117+
{
118+
return [
119+
[123],
120+
[true],
121+
[false],
122+
[[]],
123+
[new \stdClass()],
124+
[$this],
125+
[$this->createMock(ModelInterface::class)],
126+
[$this->createMock(ResponseInterface::class)],
127+
[$this->createMock(Response::class)],
128+
[['view model data' => 'as an array']],
129+
[['foo' => new \stdClass()]],
130+
['a response string'],
131+
];
132+
}
86133
}

0 commit comments

Comments
 (0)