public function testInvokeOnSuccess() { $server = new Server(); $request = $server->getRequest(); $server->setRequest($request->withAttribute('action', 'foo')); $model = new ViewModel(); $model->setModule(__NAMESPACE__); $event = new SystemEvent(); $event->setResult(SystemEvent::DISPATCH, $model); $event->setContext(new FakeController()); $listener = new InjectTemplateListener(); $listener->setServer($server); $listener($event); $this->assertSame('fake/foo', $model->getTemplate()); }
/** * Triggers the DispatchEvent. * * @param \Es\System\SystemEvent $event The system event * * @throws \RuntimeException If the ServerRequest not contain the * "controller" attribute */ public function onDispatch(SystemEvent $event) { $server = $this->getServer(); $request = $server->getRequest(); $controllerName = $request->getAttribute('controller'); if (!$controllerName) { throw new RuntimeException('Unable to dispatch the system event, the server request not ' . 'contains the "controller" attribute.'); } $actionName = $request->getAttribute('action', 'index'); $events = $this->getEvents(); $controllers = $this->getControllers(); $controller = $controllers->get($controllerName); $event->setContext($controller); $dispatchEvent = new DispatchEvent($controller, $controllerName, $actionName, $event->getParams()); $events->trigger($dispatchEvent); $result = $dispatchEvent->getResult(); $target = SystemEvent::DISPATCH; if ($result instanceof ResponseInterface) { $target = SystemEvent::FINISH; } $event->setResult($target, $result); }
public function testInvokeOnSuccess() { $modules = new Modules(); $module = $this->getMock(AbstractModule::CLASS); $modules->set(__NAMESPACE__, $module); $view = new View(); $listener = new InjectModuleListener(); $listener->setModules($modules); $listener->setView($view); $event = new SystemEvent(); $model = new ViewModel(); $controller = new FakeController(); $event->setContext($controller); $event->setResult(SystemEvent::DISPATCH, $model); $listener($event); $layout = $view->getLayout(); $this->assertSame(__NAMESPACE__, $layout->getModule()); $this->assertSame(__NAMESPACE__, $model->getModule()); }