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());
 }