3 namespace Drupal\Tests\views\Unit\Routing;
5 use Drupal\Core\Routing\RouteMatch;
6 use Drupal\Tests\UnitTestCase;
7 use Drupal\views\Routing\ViewPageController;
8 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
9 use Symfony\Component\HttpFoundation\ParameterBag;
10 use Symfony\Component\HttpFoundation\Request;
11 use Symfony\Component\Routing\Route;
14 * @coversDefaultClass \Drupal\views\Routing\ViewPageController
17 class ViewPageControllerTest extends UnitTestCase {
20 * The page controller of views.
22 * @var \Drupal\views\Routing\ViewPageController
24 public $pageController;
27 * A render array expected for every page controller render array result.
31 protected $defaultRenderArray = [
32 '#cache_properties' => ['#view_id', '#view_display_show_admin_links', '#view_display_plugin_id'],
33 '#view_id' => 'test_page_view',
34 '#view_display_plugin_id' => NULL,
35 '#view_display_show_admin_links' => NULL,
38 protected function setUp() {
39 $this->pageController = new ViewPageController();
43 * Tests the page controller.
45 public function testPageController() {
48 '#name' => 'test_page_view',
49 '#display_id' => 'default',
53 'keys' => ['view', 'test_page_view', 'display', 'default'],
55 ] + $this->defaultRenderArray;
57 $request = new Request();
58 $request->attributes->set('view_id', 'test_page_view');
59 $request->attributes->set('display_id', 'default');
61 '_view_display_plugin_class' => '\Drupal\views\Plugin\views\display\Page',
63 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/test', ['view_id' => 'test_page_view', 'display_id' => 'default'], [], $options));
64 $route_match = RouteMatch::createFromRequest($request);
66 $output = $this->pageController->handle($route_match->getParameter('view_id'), $route_match->getParameter('display_id'), $route_match);
67 $this->assertInternalType('array', $output);
68 $this->assertEquals($build, $output);
72 * Tests the page controller with arguments on a non overridden page view.
74 public function testHandleWithArgumentsWithoutOverridden() {
75 $request = new Request();
76 $request->attributes->set('view_id', 'test_page_view');
77 $request->attributes->set('display_id', 'page_1');
78 // Add the argument to the request.
79 $request->attributes->set('arg_0', 'test-argument');
81 '_view_argument_map' => ['arg_0' => 'arg_0'],
82 '_view_display_plugin_class' => '\Drupal\views\Plugin\views\display\Page',
84 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/test/{arg_0}', ['view_id' => 'test_page_view', 'display_id' => 'default'], [], $options));
85 $route_match = RouteMatch::createFromRequest($request);
87 $result = $this->pageController->handle($route_match->getParameter('view_id'), $route_match->getParameter('display_id'), $route_match);
91 '#name' => 'test_page_view',
92 '#display_id' => 'page_1',
94 '#arguments' => ['test-argument'],
96 'keys' => ['view', 'test_page_view', 'display', 'page_1', 'args', 'test-argument'],
98 ] + $this->defaultRenderArray;
100 $this->assertEquals($build, $result);
104 * Tests the page controller with arguments of a overridden page view.
106 * Note: This test does not care about upcasting for now.
108 public function testHandleWithArgumentsOnOverriddenRoute() {
109 $request = new Request();
110 $request->attributes->set('view_id', 'test_page_view');
111 $request->attributes->set('display_id', 'page_1');
112 // Add the argument to the request.
113 $request->attributes->set('parameter', 'test-argument');
115 '_view_argument_map' => [
116 'arg_0' => 'parameter',
118 '_view_display_plugin_class' => '\Drupal\views\Plugin\views\display\Page',
120 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/test/{parameter}', ['view_id' => 'test_page_view', 'display_id' => 'default'], [], $options));
121 $route_match = RouteMatch::createFromRequest($request);
123 $result = $this->pageController->handle($route_match->getParameter('view_id'), $route_match->getParameter('display_id'), $route_match);
127 '#name' => 'test_page_view',
128 '#display_id' => 'page_1',
130 '#arguments' => ['test-argument'],
132 'keys' => ['view', 'test_page_view', 'display', 'page_1', 'args', 'test-argument'],
134 ] + $this->defaultRenderArray;
136 $this->assertEquals($build, $result);
140 * Tests the page controller with arguments of a overridden page view.
142 * This test care about upcasted values and ensures that the raw variables
145 public function testHandleWithArgumentsOnOverriddenRouteWithUpcasting() {
146 $request = new Request();
147 $request->attributes->set('view_id', 'test_page_view');
148 $request->attributes->set('display_id', 'page_1');
149 // Add the argument to the request.
150 $request->attributes->set('test_entity', $this->getMock('Drupal\Core\Entity\EntityInterface'));
151 $raw_variables = new ParameterBag(['test_entity' => 'example_id']);
152 $request->attributes->set('_raw_variables', $raw_variables);
154 '_view_argument_map' => [
155 'arg_0' => 'test_entity',
157 '_view_display_plugin_class' => '\Drupal\views\Plugin\views\display\Page',
159 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/test/{test_entity}', ['view_id' => 'test_page_view', 'display_id' => 'default'], [], $options));
160 $route_match = RouteMatch::createFromRequest($request);
162 $result = $this->pageController->handle($route_match->getParameter('view_id'), $route_match->getParameter('display_id'), $route_match);
166 '#name' => 'test_page_view',
167 '#display_id' => 'page_1',
169 '#arguments' => ['example_id'],
171 'keys' => ['view', 'test_page_view', 'display', 'page_1', 'args', 'example_id'],
173 ] + $this->defaultRenderArray;
175 $this->assertEquals($build, $result);
180 // @todo https://www.drupal.org/node/2571679 replace
181 // views_add_contextual_links().
182 namespace Drupal\views\Routing;
184 if (!function_exists('views_add_contextual_links')) {
186 function views_add_contextual_links() {