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

Commit 29d8e5b

Browse files
committed
Basic test coverage for the MiddlewareController
1 parent 8442764 commit 29d8e5b

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?php
2+
/**
3+
* Zend Framework (http://framework.zend.com/)
4+
*
5+
* @link http://github.com/zendframework/zf2 for the canonical source repository
6+
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7+
* @license http://framework.zend.com/license/new-bsd New BSD License
8+
*/
9+
10+
namespace ZendTest\Mvc\Controller;
11+
12+
use PHPUnit\Framework\TestCase;
13+
use Psr\Http\Message\ResponseInterface;
14+
use ReflectionProperty;
15+
use Zend\EventManager\EventManager;
16+
use Zend\EventManager\EventManagerAwareInterface;
17+
use Zend\EventManager\EventManagerInterface;
18+
use Zend\EventManager\ResponseCollection;
19+
use Zend\Http\Request;
20+
use Zend\Http\Response;
21+
use Zend\Mvc\Controller\AbstractController;
22+
use Zend\Mvc\Controller\MiddlewareController;
23+
use Zend\Mvc\InjectApplicationEventInterface;
24+
use Zend\Mvc\MvcEvent;
25+
use Zend\Stdlib\DispatchableInterface;
26+
use Zend\Stratigility\MiddlewarePipe;
27+
28+
/**
29+
* @covers \Zend\Mvc\Controller\MiddlewareController
30+
*/
31+
class MiddlewareControllerTest extends TestCase
32+
{
33+
/**
34+
* @var MiddlewarePipe|\PHPUnit_Framework_MockObject_MockObject
35+
*/
36+
private $pipe;
37+
38+
/**
39+
* @var ResponseInterface|\PHPUnit_Framework_MockObject_MockObject
40+
*/
41+
private $responsePrototype;
42+
43+
/**
44+
* @var EventManagerInterface
45+
*/
46+
private $eventManager;
47+
48+
/**
49+
* @var AbstractController|\PHPUnit_Framework_MockObject_MockObject
50+
*/
51+
private $controller;
52+
53+
/**
54+
* @var MvcEvent
55+
*/
56+
private $event;
57+
58+
/**
59+
* {@inheritDoc}
60+
*/
61+
protected function setUp()
62+
{
63+
$this->pipe = $this->createMock(MiddlewarePipe::class);
64+
$this->responsePrototype = $this->createMock(ResponseInterface::class);
65+
$this->eventManager = $this->createMock(EventManagerInterface::class);
66+
$this->event = new MvcEvent();
67+
$this->eventManager = new EventManager();
68+
69+
$this->controller = new MiddlewareController(
70+
$this->pipe,
71+
$this->responsePrototype,
72+
$this->eventManager,
73+
$this->event
74+
);
75+
}
76+
77+
public function testWillAssignCorrectEventManagerIdentifiers()
78+
{
79+
$identifiers = $this->eventManager->getIdentifiers();
80+
81+
self::assertContains(MiddlewareController::class, $identifiers);
82+
self::assertContains(AbstractController::class, $identifiers);
83+
self::assertContains(DispatchableInterface::class, $identifiers);
84+
}
85+
86+
public function testWillDispatchARequestAndResponseWithAGivenPipe()
87+
{
88+
$request = new Request();
89+
$response = new Response();
90+
$result = $this->createMock(ResponseInterface::class);
91+
$dispatchListener = $this->getMockBuilder(\stdClass::class)->setMethods(['__invoke'])->getMock();
92+
93+
$this->eventManager->attach(MvcEvent::EVENT_DISPATCH, $dispatchListener, 100);
94+
$this->eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function () {
95+
self::fail('No dispatch error expected');
96+
}, 100);
97+
98+
$dispatchListener
99+
->expects(self::once())
100+
->method('__invoke')
101+
->with(self::callback(function (MvcEvent $event) use ($request, $response) {
102+
self::assertSame($this->event, $event);
103+
self::assertSame(MvcEvent::EVENT_DISPATCH, $event->getName());
104+
self::assertSame($this->controller, $event->getTarget());
105+
self::assertSame($request, $event->getRequest());
106+
self::assertSame($response, $event->getResponse());
107+
108+
return true;
109+
}));
110+
111+
$this->pipe->expects(self::once())->method('process')->willReturn($result);
112+
113+
$controllerResult = $this->controller->dispatch($request, $response);
114+
115+
self::assertSame($result, $controllerResult);
116+
self::assertSame($result, $this->event->getResult());
117+
}
118+
}

0 commit comments

Comments
 (0)