diff --git a/core/modules/views/src/Routing/ViewPageController.php b/core/modules/views/src/Routing/ViewPageController.php index 2df32d8..89b1a5b 100644 --- a/core/modules/views/src/Routing/ViewPageController.php +++ b/core/modules/views/src/Routing/ViewPageController.php @@ -2,16 +2,17 @@ namespace Drupal\views\Routing; +use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\views\Plugin\views\display\Page; +use Drupal\Core\Entity\EntityManagerInterface; use Drupal\views\ViewExecutableFactory; use Symfony\Component\DependencyInjection\ContainerInterface; -use Drupal\Core\Entity\EntityManagerInterface; /** * Defines a page controller to execute and render a view. */ -class ViewPageController { +class ViewPageController implements ContainerInjectionInterface { /** * The entity manager. @@ -36,12 +37,12 @@ class ViewPageController { * The view executable factory */ public function __construct(EntityManagerInterface $entity_manager, ViewExecutableFactory $view_executable_factory) { - $this->entityManager = $entity_manager; - $this->viewExecutableFactory = $view_executable_factory; + $this->entityManager = \Drupal::service('entity.manager'); + $this->viewExecutableFactory = \Drupal::service('views.executable'); } /** - * {@inheritdoc} + * @return static */ public static function create(ContainerInterface $container) { return new static( diff --git a/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php b/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php index 971c1c4..13686f6 100644 --- a/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php +++ b/core/modules/views/tests/src/Unit/Routing/ViewPageControllerTest.php @@ -2,6 +2,7 @@ namespace Drupal\Tests\views\Unit\Routing; +use Symfony\Component\DependencyInjection\ContainerBuilder; use Drupal\Core\Routing\RouteMatch; use Drupal\Tests\UnitTestCase; use Drupal\views\Routing\ViewPageController; @@ -36,7 +37,45 @@ class ViewPageControllerTest extends UnitTestCase { ]; protected function setUp() { - $this->pageController = new ViewPageController(); + $entity = $this->getMock('Drupal\views\ViewEntityInterface'); + $entity_storage = $this->getMock('\Drupal\Core\Entity\EntityStorageInterface'); + $entity_storage->expects($this->any()) + ->method('load') + ->will($this->returnValue($entity)); + + $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); + $entity_manager->expects($this->any()) + ->method('getStorage') + ->with($this->equalTo('view')) + ->will($this->returnValue($entity_storage)); + + + $view = $this->getMockBuilder('Drupal\views\ViewExecutable') + ->disableOriginalConstructor() + ->getMock(); + $view->expects($this->any()) + ->method('setDisplay') + ->will($this->returnValue(FALSE)); + $view->expects($this->any()) + ->method('initDisplay') + ->will($this->returnValue(FALSE)); + $view->expects($this->any()) + ->method('getTitle') + ->will($this->returnValue('View title')); + + $view_executable_factory = $this->getMockBuilder('Drupal\views\ViewExecutableFactory') + ->disableOriginalConstructor() + ->getMock(); + $view_executable_factory->expects($this->any()) + ->method('get') + ->with($entity) + ->will($this->returnValue($view)); + + $container = new ContainerBuilder(); + $container->set('entity.manager', $entity_manager); + $container->set('views.executable', $view_executable_factory); + \Drupal::setContainer($container); + $this->pageController = ViewPageController::create($container); } /** @@ -175,6 +214,15 @@ public function testHandleWithArgumentsOnOverriddenRouteWithUpcasting() { $this->assertEquals($build, $result); } + public function testGetTitle() { + $request = new Request(); + $request->attributes->set('view_id', 'test_page_view'); + $request->attributes->set('display_id', 'page_1'); + $route_match = RouteMatch::createFromRequest($request); + $title = $this->pageController->getTitle($route_match->getParameter('view_id'), $route_match->getParameter('display_id'), $route_match); + $this->assertEquals($title, 'View title'); + } + } // @todo https://www.drupal.org/node/2571679 replace