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

Commit 0af1831

Browse files
committed
Verifying that the MiddlewareListener will relay anything the middleware produces, regardless of its shape/type, unless it is a PSR7-response
1 parent cb4d7ee commit 0af1831

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

test/MiddlewareListenerTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,4 +376,67 @@ public function testValidMiddlewareDispatchCancelsPreviousDispatchFailures()
376376
self::assertInstanceOf(Response::class, $event->getResult());
377377
self::assertEmpty($event->getError(), 'Previously set MVC errors are canceled by a successful dispatch');
378378
}
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+
}
379442
}

0 commit comments

Comments
 (0)