Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\views\Unit;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Plugin\PluginManagerInterface;
|
Chris@0
|
6 use Drupal\Core\DependencyInjection\ContainerBuilder;
|
Chris@0
|
7 use Drupal\Core\Extension\ModuleHandlerInterface;
|
Chris@0
|
8 use Drupal\Core\Url;
|
Chris@0
|
9 use Drupal\Tests\UnitTestCase;
|
Chris@0
|
10 use Drupal\views\Entity\View;
|
Chris@0
|
11 use Drupal\views\Plugin\views\cache\CachePluginBase;
|
Chris@0
|
12 use Drupal\views\Plugin\views\cache\None as NoneCache;
|
Chris@0
|
13 use Drupal\views\Plugin\views\pager\None as NonePager;
|
Chris@0
|
14 use Drupal\views\Plugin\views\query\QueryPluginBase;
|
Chris@0
|
15 use Drupal\views\ViewExecutable;
|
Chris@0
|
16 use Symfony\Component\Routing\Route;
|
Chris@0
|
17
|
Chris@0
|
18 /**
|
Chris@0
|
19 * @coversDefaultClass \Drupal\views\ViewExecutable
|
Chris@0
|
20 * @group views
|
Chris@0
|
21 */
|
Chris@0
|
22 class ViewExecutableTest extends UnitTestCase {
|
Chris@0
|
23
|
Chris@0
|
24 /**
|
Chris@0
|
25 * Indicates that a display is enabled.
|
Chris@0
|
26 */
|
Chris@0
|
27 const DISPLAY_ENABLED = TRUE;
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Indicates that a display is disabled.
|
Chris@0
|
31 */
|
Chris@0
|
32 const DISPLAY_DISABLED = FALSE;
|
Chris@0
|
33
|
Chris@0
|
34 /**
|
Chris@0
|
35 * A mocked display collection.
|
Chris@0
|
36 *
|
Chris@0
|
37 * @var \Drupal\views\DisplayPluginCollection|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
38 */
|
Chris@0
|
39 protected $displayHandlers;
|
Chris@0
|
40
|
Chris@0
|
41 /**
|
Chris@0
|
42 * The mocked view executable.
|
Chris@0
|
43 *
|
Chris@0
|
44 * @var \Drupal\views\ViewExecutableFactory|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
45 */
|
Chris@0
|
46 protected $viewExecutableFactory;
|
Chris@0
|
47
|
Chris@0
|
48 /**
|
Chris@0
|
49 * The tested view executable.
|
Chris@0
|
50 *
|
Chris@0
|
51 * @var \Drupal\views\ViewExecutable
|
Chris@0
|
52 */
|
Chris@0
|
53 protected $executable;
|
Chris@0
|
54
|
Chris@0
|
55 /**
|
Chris@0
|
56 * The mocked view entity.
|
Chris@0
|
57 *
|
Chris@0
|
58 * @var \Drupal\views\ViewEntityInterface|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
59 */
|
Chris@0
|
60 protected $view;
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * The mocked user.
|
Chris@0
|
64 *
|
Chris@0
|
65 * @var \Drupal\Core\Session\AccountInterface|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
66 */
|
Chris@0
|
67 protected $user;
|
Chris@0
|
68
|
Chris@0
|
69 /**
|
Chris@0
|
70 * The mocked views data.
|
Chris@0
|
71 *
|
Chris@0
|
72 * @var \Drupal\views\ViewsData|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
73 */
|
Chris@0
|
74 protected $viewsData;
|
Chris@0
|
75
|
Chris@0
|
76 /**
|
Chris@0
|
77 * The mocked display handler.
|
Chris@0
|
78 *
|
Chris@0
|
79 * @var \Drupal\views\Plugin\views\display\DisplayPluginInterface|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
80 */
|
Chris@0
|
81 protected $displayHandler;
|
Chris@0
|
82
|
Chris@0
|
83 /**
|
Chris@0
|
84 * The mocked route provider.
|
Chris@0
|
85 *
|
Chris@0
|
86 * @var \Drupal\Core\Routing\RouteProviderInterface|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
87 */
|
Chris@0
|
88 protected $routeProvider;
|
Chris@0
|
89
|
Chris@0
|
90 /**
|
Chris@0
|
91 * The mocked none cache plugin.
|
Chris@0
|
92 *
|
Chris@0
|
93 * @var \Drupal\views\Plugin\views\cache\None|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
94 */
|
Chris@0
|
95 protected $noneCache;
|
Chris@0
|
96
|
Chris@0
|
97 /**
|
Chris@0
|
98 * The mocked cache plugin that returns a successful result.
|
Chris@0
|
99 *
|
Chris@0
|
100 * @var \Drupal\views\Plugin\views\cache\None|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
101 */
|
Chris@0
|
102 protected $successCache;
|
Chris@0
|
103
|
Chris@0
|
104 /**
|
Chris@0
|
105 * {@inheritdoc}
|
Chris@0
|
106 */
|
Chris@0
|
107 protected function setUp() {
|
Chris@0
|
108 parent::setUp();
|
Chris@0
|
109
|
Chris@0
|
110 $this->view = $this->getMock('Drupal\views\ViewEntityInterface');
|
Chris@0
|
111 $this->user = $this->getMock('Drupal\Core\Session\AccountInterface');
|
Chris@0
|
112 $this->viewsData = $this->getMockBuilder('Drupal\views\ViewsData')
|
Chris@0
|
113 ->disableOriginalConstructor()
|
Chris@0
|
114 ->getMock();
|
Chris@0
|
115 $this->displayHandler = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayRouterInterface')
|
Chris@0
|
116 ->disableOriginalConstructor()
|
Chris@0
|
117 ->getMock();
|
Chris@0
|
118 $this->routeProvider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
|
Chris@0
|
119 $this->displayHandlers = $this->getMockBuilder('Drupal\views\DisplayPluginCollection')
|
Chris@0
|
120 ->disableOriginalConstructor()
|
Chris@0
|
121 ->getMock();
|
Chris@0
|
122
|
Chris@0
|
123 $this->executable = new ViewExecutable($this->view, $this->user, $this->viewsData, $this->routeProvider);
|
Chris@0
|
124 $this->executable->display_handler = $this->displayHandler;
|
Chris@0
|
125 $this->executable->displayHandlers = $this->displayHandlers;
|
Chris@0
|
126
|
Chris@0
|
127 $this->viewExecutableFactory = $this->getMockBuilder('Drupal\views\ViewExecutableFactory')
|
Chris@0
|
128 ->disableOriginalConstructor()
|
Chris@0
|
129 ->getMock();
|
Chris@0
|
130
|
Chris@0
|
131 $module_handler = $this->getMockBuilder(ModuleHandlerInterface::class)
|
Chris@0
|
132 ->getMock();
|
Chris@0
|
133
|
Chris@0
|
134 $this->noneCache = $this->getMockBuilder(NoneCache::class)
|
Chris@0
|
135 ->disableOriginalConstructor()
|
Chris@0
|
136 ->getMock();
|
Chris@0
|
137
|
Chris@0
|
138 $success_cache = $this->prophesize(CachePluginBase::class);
|
Chris@0
|
139 $success_cache->cacheGet('results')->willReturn(TRUE);
|
Chris@0
|
140 $this->successCache = $success_cache->reveal();
|
Chris@0
|
141
|
Chris@0
|
142 $cache_manager = $this->prophesize(PluginManagerInterface::class);
|
Chris@0
|
143 $cache_manager->createInstance('none')->willReturn($this->noneCache);
|
Chris@0
|
144
|
Chris@0
|
145 $translation = $this->getStringTranslationStub();
|
Chris@0
|
146 $container = new ContainerBuilder();
|
Chris@0
|
147 $container->set('string_translation', $translation);
|
Chris@0
|
148 $container->set('views.executable', $this->viewExecutableFactory);
|
Chris@0
|
149 $container->set('module_handler', $module_handler);
|
Chris@0
|
150 $container->set('plugin.manager.views.cache', $cache_manager->reveal());
|
Chris@0
|
151 \Drupal::setContainer($container);
|
Chris@0
|
152 }
|
Chris@0
|
153
|
Chris@0
|
154 /**
|
Chris@0
|
155 * @covers ::getUrl
|
Chris@0
|
156 */
|
Chris@0
|
157 public function testGetUrlWithOverriddenUrl() {
|
Chris@0
|
158 $url = Url::fromRoute('example');
|
Chris@0
|
159 $this->executable->override_url = $url;
|
Chris@0
|
160
|
Chris@0
|
161 $this->assertSame($url, $this->executable->getUrl());
|
Chris@0
|
162 }
|
Chris@0
|
163
|
Chris@0
|
164 /**
|
Chris@0
|
165 * @covers ::getUrl
|
Chris@0
|
166 */
|
Chris@0
|
167 public function testGetUrlWithPathNoPlaceholders() {
|
Chris@0
|
168 $this->displayHandler->expects($this->any())
|
Chris@0
|
169 ->method('getRoutedDisplay')
|
Chris@0
|
170 ->willReturn($this->displayHandler);
|
Chris@0
|
171 $this->displayHandlers->expects($this->any())
|
Chris@0
|
172 ->method('get')
|
Chris@0
|
173 ->willReturn($this->displayHandler);
|
Chris@0
|
174 $this->displayHandler->expects($this->any())
|
Chris@0
|
175 ->method('getUrlInfo')
|
Chris@0
|
176 ->willReturn(Url::fromRoute('views.test.page_1'));
|
Chris@0
|
177 $this->displayHandler->expects($this->any())
|
Chris@0
|
178 ->method('getPath')
|
Chris@0
|
179 ->willReturn('test-path');
|
Chris@0
|
180
|
Chris@0
|
181 $this->assertEquals(Url::fromRoute('views.test.page_1'), $this->executable->getUrl());
|
Chris@0
|
182 }
|
Chris@0
|
183
|
Chris@0
|
184 /**
|
Chris@0
|
185 * @covers ::getUrl
|
Chris@0
|
186 */
|
Chris@0
|
187 public function testGetUrlWithoutRouterDisplay() {
|
Chris@0
|
188 $this->displayHandler = $this->getMock('Drupal\views\Plugin\views\display\DisplayPluginInterface');
|
Chris@0
|
189 $this->displayHandlers->expects($this->any())
|
Chris@0
|
190 ->method('get')
|
Chris@0
|
191 ->willReturn($this->displayHandler);
|
Chris@0
|
192 $this->executable->display_handler = $this->displayHandler;
|
Chris@0
|
193
|
Chris@0
|
194 $this->setExpectedException(\InvalidArgumentException::class);
|
Chris@0
|
195 $this->executable->getUrl();
|
Chris@0
|
196 }
|
Chris@0
|
197
|
Chris@0
|
198 /**
|
Chris@0
|
199 * @covers ::getUrl
|
Chris@0
|
200 */
|
Chris@0
|
201 public function testGetUrlWithPlaceholdersAndArgs() {
|
Chris@0
|
202 $this->displayHandler->expects($this->any())
|
Chris@0
|
203 ->method('getRoutedDisplay')
|
Chris@0
|
204 ->willReturn($this->displayHandler);
|
Chris@0
|
205 $this->displayHandlers->expects($this->any())
|
Chris@0
|
206 ->method('get')
|
Chris@0
|
207 ->willReturn($this->displayHandler);
|
Chris@0
|
208 $this->displayHandler->expects($this->any())
|
Chris@0
|
209 ->method('getUrlInfo')
|
Chris@0
|
210 ->willReturn(Url::fromRoute('views.test.page_1'));
|
Chris@0
|
211 $this->displayHandler->expects($this->any())
|
Chris@0
|
212 ->method('getPath')
|
Chris@0
|
213 ->willReturn('test-path/%');
|
Chris@0
|
214
|
Chris@0
|
215 $route = new Route('/test-path/{arg_0}');
|
Chris@0
|
216 $this->routeProvider->expects($this->any())
|
Chris@0
|
217 ->method('getRouteByName')
|
Chris@0
|
218 ->with('views.test.page_1')
|
Chris@0
|
219 ->willReturn($route);
|
Chris@0
|
220
|
Chris@0
|
221 $this->assertEquals(Url::fromRoute('views.test.page_1', ['arg_0' => 'test']), $this->executable->getUrl(['test']));
|
Chris@0
|
222 }
|
Chris@0
|
223
|
Chris@0
|
224 /**
|
Chris@0
|
225 * @covers ::getUrl
|
Chris@0
|
226 */
|
Chris@0
|
227 public function testGetUrlWithPlaceholdersAndWithoutArgs() {
|
Chris@0
|
228 $this->displayHandler->expects($this->any())
|
Chris@0
|
229 ->method('getRoutedDisplay')
|
Chris@0
|
230 ->willReturn($this->displayHandler);
|
Chris@0
|
231 $this->displayHandlers->expects($this->any())
|
Chris@0
|
232 ->method('get')
|
Chris@0
|
233 ->willReturn($this->displayHandler);
|
Chris@0
|
234 $this->displayHandler->expects($this->any())
|
Chris@0
|
235 ->method('getUrlInfo')
|
Chris@0
|
236 ->willReturn(Url::fromRoute('views.test.page_1'));
|
Chris@0
|
237 $this->displayHandler->expects($this->any())
|
Chris@0
|
238 ->method('getPath')
|
Chris@0
|
239 ->willReturn('test-path/%/%');
|
Chris@0
|
240
|
Chris@0
|
241 $route = new Route('/test-path/{arg_0}/{arg_1}');
|
Chris@0
|
242 $this->routeProvider->expects($this->any())
|
Chris@0
|
243 ->method('getRouteByName')
|
Chris@0
|
244 ->with('views.test.page_1')
|
Chris@0
|
245 ->willReturn($route);
|
Chris@0
|
246
|
Chris@0
|
247 $this->assertEquals(Url::fromRoute('views.test.page_1', ['arg_0' => '*', 'arg_1' => '*']), $this->executable->getUrl());
|
Chris@0
|
248 }
|
Chris@0
|
249
|
Chris@0
|
250 /**
|
Chris@0
|
251 * @covers ::getUrl
|
Chris@0
|
252 */
|
Chris@0
|
253 public function testGetUrlWithPlaceholdersAndWithoutArgsAndExceptionValue() {
|
Chris@0
|
254 $this->displayHandler->expects($this->any())
|
Chris@0
|
255 ->method('getRoutedDisplay')
|
Chris@0
|
256 ->willReturn($this->displayHandler);
|
Chris@0
|
257 $this->displayHandlers->expects($this->any())
|
Chris@0
|
258 ->method('get')
|
Chris@0
|
259 ->willReturn($this->displayHandler);
|
Chris@0
|
260 $this->displayHandler->expects($this->any())
|
Chris@0
|
261 ->method('getUrlInfo')
|
Chris@0
|
262 ->willReturn(Url::fromRoute('views.test.page_1'));
|
Chris@0
|
263 $this->displayHandler->expects($this->any())
|
Chris@0
|
264 ->method('getPath')
|
Chris@0
|
265 ->willReturn('test-path/%/%');
|
Chris@0
|
266
|
Chris@0
|
267 $route = new Route('/test-path/{arg_0}/{arg_1}');
|
Chris@0
|
268 $this->routeProvider->expects($this->any())
|
Chris@0
|
269 ->method('getRouteByName')
|
Chris@0
|
270 ->with('views.test.page_1')
|
Chris@0
|
271 ->willReturn($route);
|
Chris@0
|
272
|
Chris@0
|
273 $argument_handler = $this->getMockBuilder('Drupal\views\Plugin\views\argument\ArgumentPluginBase')
|
Chris@0
|
274 ->disableOriginalConstructor()
|
Chris@0
|
275 ->getMock();
|
Chris@0
|
276 $argument_handler->options['exception']['value'] = 'exception_0';
|
Chris@0
|
277 $this->executable->argument['key_1'] = $argument_handler;
|
Chris@0
|
278 $argument_handler = $this->getMockBuilder('Drupal\views\Plugin\views\argument\ArgumentPluginBase')
|
Chris@0
|
279 ->disableOriginalConstructor()
|
Chris@0
|
280 ->getMock();
|
Chris@0
|
281 $argument_handler->options['exception']['value'] = 'exception_1';
|
Chris@0
|
282 $this->executable->argument['key_2'] = $argument_handler;
|
Chris@0
|
283
|
Chris@0
|
284 $this->assertEquals(Url::fromRoute('views.test.page_1', ['arg_0' => 'exception_0', 'arg_1' => 'exception_1']), $this->executable->getUrl());
|
Chris@0
|
285 }
|
Chris@0
|
286
|
Chris@0
|
287 /**
|
Chris@0
|
288 * @covers ::buildThemeFunctions
|
Chris@0
|
289 */
|
Chris@0
|
290 public function testBuildThemeFunctions() {
|
Chris@0
|
291 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
292 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
293 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
294
|
Chris@0
|
295 unset($view->display_handler);
|
Chris@0
|
296 $expected = [
|
Chris@0
|
297 'test_hook__test_view',
|
Chris@17
|
298 'test_hook',
|
Chris@0
|
299 ];
|
Chris@0
|
300 $this->assertEquals($expected, $view->buildThemeFunctions('test_hook'));
|
Chris@0
|
301
|
Chris@0
|
302 $view->display_handler = $display;
|
Chris@0
|
303 $expected = [
|
Chris@0
|
304 'test_hook__test_view__default',
|
Chris@0
|
305 'test_hook__default',
|
Chris@0
|
306 'test_hook__one',
|
Chris@0
|
307 'test_hook__two',
|
Chris@0
|
308 'test_hook__and_three',
|
Chris@0
|
309 'test_hook__test_view',
|
Chris@17
|
310 'test_hook',
|
Chris@0
|
311 ];
|
Chris@0
|
312 $this->assertEquals($expected, $view->buildThemeFunctions('test_hook'));
|
Chris@0
|
313
|
Chris@0
|
314 // Change the name of the display plugin and make sure that is in the array.
|
Chris@0
|
315 $view->display_handler->display['display_plugin'] = 'default2';
|
Chris@0
|
316
|
Chris@0
|
317 $expected = [
|
Chris@0
|
318 'test_hook__test_view__default',
|
Chris@0
|
319 'test_hook__default',
|
Chris@0
|
320 'test_hook__one',
|
Chris@0
|
321 'test_hook__two',
|
Chris@0
|
322 'test_hook__and_three',
|
Chris@0
|
323 'test_hook__test_view__default2',
|
Chris@0
|
324 'test_hook__default2',
|
Chris@0
|
325 'test_hook__test_view',
|
Chris@17
|
326 'test_hook',
|
Chris@0
|
327 ];
|
Chris@0
|
328 $this->assertEquals($expected, $view->buildThemeFunctions('test_hook'));
|
Chris@0
|
329 }
|
Chris@0
|
330
|
Chris@0
|
331 /**
|
Chris@0
|
332 * @covers ::generateHandlerId
|
Chris@0
|
333 */
|
Chris@0
|
334 public function testGenerateHandlerId() {
|
Chris@0
|
335 // Test the generateHandlerId() method.
|
Chris@0
|
336 $test_ids = ['test' => 'test', 'test_1' => 'test_1'];
|
Chris@0
|
337 $this->assertEquals(ViewExecutable::generateHandlerId('new', $test_ids), 'new');
|
Chris@0
|
338 $this->assertEquals(ViewExecutable::generateHandlerId('test', $test_ids), 'test_2');
|
Chris@0
|
339 }
|
Chris@0
|
340
|
Chris@0
|
341 /**
|
Chris@0
|
342 * @covers ::addHandler
|
Chris@0
|
343 */
|
Chris@0
|
344 public function testAddHandler() {
|
Chris@0
|
345 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
346 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
347 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
348
|
Chris@0
|
349 $views_data = [];
|
Chris@0
|
350 $views_data['test_field'] = [
|
Chris@0
|
351 'field' => ['id' => 'standard'],
|
Chris@0
|
352 'filter' => ['id' => 'standard'],
|
Chris@0
|
353 'argument' => ['id' => 'standard'],
|
Chris@0
|
354 'sort' => ['id' => 'standard'],
|
Chris@0
|
355 ];
|
Chris@0
|
356
|
Chris@0
|
357 $this->viewsData->expects($this->atLeastOnce())
|
Chris@0
|
358 ->method('get')
|
Chris@0
|
359 ->with('test_entity')
|
Chris@0
|
360 ->willReturn($views_data);
|
Chris@0
|
361
|
Chris@0
|
362 foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) {
|
Chris@0
|
363 $display->expects($this->atLeastOnce())
|
Chris@0
|
364 ->method('setOption')
|
Chris@0
|
365 ->with($this->callback(function ($argument) {
|
Chris@0
|
366 return $argument;
|
Chris@0
|
367 }), [
|
Chris@0
|
368 'test_field' => [
|
Chris@0
|
369 'id' => 'test_field',
|
Chris@0
|
370 'table' => 'test_entity',
|
Chris@0
|
371 'field' => 'test_field',
|
Chris@0
|
372 'plugin_id' => 'standard',
|
Chris@0
|
373 ],
|
Chris@0
|
374 ]);
|
Chris@0
|
375 }
|
Chris@0
|
376
|
Chris@0
|
377 foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) {
|
Chris@0
|
378 $view->addHandler('default', $handler_type, 'test_entity', 'test_field');
|
Chris@0
|
379 }
|
Chris@0
|
380 }
|
Chris@0
|
381
|
Chris@0
|
382 /**
|
Chris@0
|
383 * @covers ::addHandler
|
Chris@0
|
384 */
|
Chris@0
|
385 public function testAddHandlerWithEntityField() {
|
Chris@0
|
386 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
387 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
388 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
389
|
Chris@0
|
390 $views_data = [];
|
Chris@0
|
391 $views_data['table']['entity type'] = 'test_entity_type';
|
Chris@0
|
392 $views_data['test_field'] = [
|
Chris@0
|
393 'entity field' => 'test_field',
|
Chris@0
|
394 'field' => ['id' => 'standard'],
|
Chris@0
|
395 'filter' => ['id' => 'standard'],
|
Chris@0
|
396 'argument' => ['id' => 'standard'],
|
Chris@0
|
397 'sort' => ['id' => 'standard'],
|
Chris@0
|
398 ];
|
Chris@0
|
399
|
Chris@0
|
400 $this->viewsData->expects($this->atLeastOnce())
|
Chris@0
|
401 ->method('get')
|
Chris@0
|
402 ->with('test_entity')
|
Chris@0
|
403 ->willReturn($views_data);
|
Chris@0
|
404
|
Chris@0
|
405 foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) {
|
Chris@0
|
406 $display->expects($this->atLeastOnce())
|
Chris@0
|
407 ->method('setOption')
|
Chris@0
|
408 ->with($this->callback(function ($argument) {
|
Chris@0
|
409 return $argument;
|
Chris@0
|
410 }), [
|
Chris@0
|
411 'test_field' => [
|
Chris@0
|
412 'id' => 'test_field',
|
Chris@0
|
413 'table' => 'test_entity',
|
Chris@0
|
414 'field' => 'test_field',
|
Chris@0
|
415 'entity_type' => 'test_entity_type',
|
Chris@0
|
416 'entity_field' => 'test_field',
|
Chris@0
|
417 'plugin_id' => 'standard',
|
Chris@0
|
418 ],
|
Chris@0
|
419 ]);
|
Chris@0
|
420 }
|
Chris@0
|
421
|
Chris@0
|
422 foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) {
|
Chris@0
|
423 $view->addHandler('default', $handler_type, 'test_entity', 'test_field');
|
Chris@0
|
424 }
|
Chris@0
|
425 }
|
Chris@0
|
426
|
Chris@0
|
427 /**
|
Chris@0
|
428 * @covers ::attachDisplays
|
Chris@0
|
429 */
|
Chris@0
|
430 public function testAttachDisplays() {
|
Chris@0
|
431 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
432 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
433 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
434
|
Chris@0
|
435 $display->expects($this->atLeastOnce())
|
Chris@0
|
436 ->method('acceptAttachments')
|
Chris@0
|
437 ->willReturn(TRUE);
|
Chris@0
|
438 $display->expects($this->atLeastOnce())
|
Chris@0
|
439 ->method('getAttachedDisplays')
|
Chris@0
|
440 ->willReturn(['page_1']);
|
Chris@0
|
441
|
Chris@0
|
442 $cloned_view = $this->getMockBuilder('Drupal\views\ViewExecutable')
|
Chris@0
|
443 ->disableOriginalConstructor()
|
Chris@0
|
444 ->getMock();
|
Chris@0
|
445 $this->viewExecutableFactory->expects($this->atLeastOnce())
|
Chris@0
|
446 ->method('get')
|
Chris@0
|
447 ->willReturn($cloned_view);
|
Chris@0
|
448
|
Chris@0
|
449 $page_display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
|
Chris@0
|
450 ->disableOriginalConstructor()
|
Chris@0
|
451 ->getMock();
|
Chris@0
|
452
|
Chris@0
|
453 $page_display->expects($this->atLeastOnce())
|
Chris@0
|
454 ->method('isEnabled')
|
Chris@0
|
455 ->willReturn(TRUE);
|
Chris@0
|
456
|
Chris@0
|
457 $display_collection = $this->getMockBuilder('Drupal\views\DisplayPluginCollection')
|
Chris@0
|
458 ->disableOriginalConstructor()
|
Chris@0
|
459 ->getMock();
|
Chris@0
|
460
|
Chris@0
|
461 $display_collection->expects($this->atLeastOnce())
|
Chris@0
|
462 ->method('get')
|
Chris@0
|
463 ->with('page_1')
|
Chris@0
|
464 ->willReturn($page_display);
|
Chris@0
|
465 $view->displayHandlers = $display_collection;
|
Chris@0
|
466
|
Chris@0
|
467 // Setup the expectations.
|
Chris@0
|
468 $page_display->expects($this->once())
|
Chris@0
|
469 ->method('attachTo')
|
Chris@0
|
470 ->with($cloned_view, 'default', $view->element);
|
Chris@0
|
471
|
Chris@0
|
472 $view->attachDisplays();
|
Chris@0
|
473 }
|
Chris@0
|
474
|
Chris@0
|
475 /**
|
Chris@0
|
476 * Setups a view executable and default display.
|
Chris@0
|
477 *
|
Chris@0
|
478 * @return array
|
Chris@0
|
479 * Returns the view executable and default display.
|
Chris@0
|
480 */
|
Chris@0
|
481 protected function setupBaseViewAndDisplay() {
|
Chris@0
|
482 $config = [
|
Chris@0
|
483 'id' => 'test_view',
|
Chris@0
|
484 'tag' => 'OnE, TWO, and three',
|
Chris@0
|
485 'display' => [
|
Chris@0
|
486 'default' => [
|
Chris@0
|
487 'id' => 'default',
|
Chris@0
|
488 'display_plugin' => 'default',
|
Chris@0
|
489 'display_title' => 'Default',
|
Chris@0
|
490 ],
|
Chris@0
|
491 ],
|
Chris@0
|
492 ];
|
Chris@0
|
493
|
Chris@0
|
494 $storage = new View($config, 'view');
|
Chris@0
|
495 $view = new ViewExecutable($storage, $this->user, $this->viewsData, $this->routeProvider);
|
Chris@0
|
496 $display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
|
Chris@0
|
497 ->disableOriginalConstructor()
|
Chris@0
|
498 ->getMock();
|
Chris@0
|
499 $display->expects($this->any())
|
Chris@0
|
500 ->method('getPlugin')
|
Chris@0
|
501 ->with($this->equalTo('cache'))
|
Chris@0
|
502 ->willReturn($this->successCache);
|
Chris@0
|
503
|
Chris@0
|
504 $display->display = $config['display']['default'];
|
Chris@0
|
505
|
Chris@0
|
506 $view->current_display = 'default';
|
Chris@0
|
507 $view->display_handler = $display;
|
Chris@0
|
508 $view->displayHandlers = $this->displayHandlers;
|
Chris@0
|
509 $view->displayHandlers->expects($this->any())
|
Chris@0
|
510 ->method('get')
|
Chris@0
|
511 ->with('default')
|
Chris@0
|
512 ->willReturn($display);
|
Chris@0
|
513 $view->displayHandlers->expects($this->any())
|
Chris@0
|
514 ->method('has')
|
Chris@0
|
515 ->with('default')
|
Chris@0
|
516 ->willReturn(TRUE);
|
Chris@0
|
517
|
Chris@0
|
518 foreach (array_keys($view->getHandlerTypes()) as $type) {
|
Chris@0
|
519 $view->$type = [];
|
Chris@0
|
520 }
|
Chris@0
|
521
|
Chris@0
|
522 return [$view, $display];
|
Chris@0
|
523 }
|
Chris@0
|
524
|
Chris@0
|
525 /**
|
Chris@0
|
526 * @covers ::setItemsPerPage
|
Chris@0
|
527 * @covers ::getItemsPerPage
|
Chris@0
|
528 */
|
Chris@0
|
529 public function testSetItemsPerPageBeforePreRender() {
|
Chris@0
|
530 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
531 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
532 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
533
|
Chris@0
|
534 $view->setItemsPerPage(12);
|
Chris@0
|
535 $this->assertEquals(12, $view->getItemsPerPage());
|
Chris@0
|
536 $this->assertContains('items_per_page:12', $view->element['#cache']['keys']);
|
Chris@0
|
537 }
|
Chris@0
|
538
|
Chris@0
|
539 /**
|
Chris@0
|
540 * @covers ::setItemsPerPage
|
Chris@0
|
541 * @covers ::getItemsPerPage
|
Chris@0
|
542 */
|
Chris@0
|
543 public function testSetItemsPerPageDuringPreRender() {
|
Chris@0
|
544 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
545 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
546 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
547
|
Chris@0
|
548 $elements = &$view->element;
|
Chris@0
|
549 $elements['#cache'] += ['keys' => []];
|
Chris@0
|
550 $elements['#pre_rendered'] = TRUE;
|
Chris@0
|
551
|
Chris@0
|
552 $view->setItemsPerPage(12);
|
Chris@0
|
553 $this->assertEquals(12, $view->getItemsPerPage());
|
Chris@0
|
554 $this->assertNotContains('items_per_page:12', $view->element['#cache']['keys']);
|
Chris@0
|
555 }
|
Chris@0
|
556
|
Chris@0
|
557 /**
|
Chris@0
|
558 * @covers ::setOffset
|
Chris@0
|
559 * @covers ::getOffset
|
Chris@0
|
560 */
|
Chris@0
|
561 public function testSetOffsetBeforePreRender() {
|
Chris@0
|
562 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
563 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
564 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
565
|
Chris@0
|
566 $view->setOffset(12);
|
Chris@0
|
567 $this->assertEquals(12, $view->getOffset());
|
Chris@0
|
568 $this->assertContains('offset:12', $view->element['#cache']['keys']);
|
Chris@0
|
569 }
|
Chris@0
|
570
|
Chris@0
|
571 /**
|
Chris@0
|
572 * @covers ::setOffset
|
Chris@0
|
573 * @covers ::getOffset
|
Chris@0
|
574 */
|
Chris@0
|
575 public function testSetOffsetDuringPreRender() {
|
Chris@0
|
576 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
577 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
578 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
579
|
Chris@0
|
580 $elements = &$view->element;
|
Chris@0
|
581 $elements['#cache'] += ['keys' => []];
|
Chris@0
|
582 $elements['#pre_rendered'] = TRUE;
|
Chris@0
|
583
|
Chris@0
|
584 $view->setOffset(12);
|
Chris@0
|
585 $this->assertEquals(12, $view->getOffset());
|
Chris@0
|
586 $this->assertNotContains('offset:12', $view->element['#cache']['keys']);
|
Chris@0
|
587 }
|
Chris@0
|
588
|
Chris@0
|
589 /**
|
Chris@0
|
590 * @covers ::setCurrentPage
|
Chris@0
|
591 * @covers ::getCurrentPage
|
Chris@0
|
592 */
|
Chris@0
|
593 public function testSetCurrentPageBeforePreRender() {
|
Chris@0
|
594 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
595 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
596 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
597
|
Chris@0
|
598 $view->setCurrentPage(12);
|
Chris@0
|
599 $this->assertEquals(12, $view->getCurrentPage());
|
Chris@0
|
600 $this->assertContains('page:12', $view->element['#cache']['keys']);
|
Chris@0
|
601 }
|
Chris@0
|
602
|
Chris@0
|
603 /**
|
Chris@0
|
604 * @covers ::setCurrentPage
|
Chris@0
|
605 * @covers ::getCurrentPage
|
Chris@0
|
606 */
|
Chris@0
|
607 public function testSetCurrentPageDuringPreRender() {
|
Chris@0
|
608 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
609 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
610 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
611
|
Chris@0
|
612 $elements = &$view->element;
|
Chris@0
|
613 $elements['#cache'] += ['keys' => []];
|
Chris@0
|
614 $elements['#pre_rendered'] = TRUE;
|
Chris@0
|
615
|
Chris@0
|
616 $view->setCurrentPage(12);
|
Chris@0
|
617 $this->assertEquals(12, $view->getCurrentPage());
|
Chris@0
|
618 $this->assertNotContains('page:12', $view->element['#cache']['keys']);
|
Chris@0
|
619 }
|
Chris@0
|
620
|
Chris@0
|
621 /**
|
Chris@0
|
622 * @covers ::execute
|
Chris@0
|
623 */
|
Chris@0
|
624 public function testCacheIsIgnoredDuringPreview() {
|
Chris@0
|
625 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
626 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
627 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
628
|
Chris@0
|
629 // Pager needs to be set to avoid false test failures.
|
Chris@0
|
630 $view->pager = $this->getMockBuilder(NonePager::class)
|
Chris@0
|
631 ->disableOriginalConstructor()
|
Chris@0
|
632 ->getMock();
|
Chris@0
|
633
|
Chris@0
|
634 $query = $this->getMockBuilder(QueryPluginBase::class)
|
Chris@0
|
635 ->disableOriginalConstructor()
|
Chris@0
|
636 ->getMock();
|
Chris@0
|
637
|
Chris@0
|
638 $view->query = $query;
|
Chris@0
|
639 $view->built = TRUE;
|
Chris@0
|
640 $view->live_preview = TRUE;
|
Chris@0
|
641
|
Chris@0
|
642 $this->noneCache->expects($this->once())->method('cacheGet');
|
Chris@0
|
643 $query->expects($this->once())->method('execute');
|
Chris@0
|
644
|
Chris@0
|
645 $view->execute();
|
Chris@0
|
646 }
|
Chris@0
|
647
|
Chris@0
|
648 /**
|
Chris@0
|
649 * Tests the return values for the execute() method.
|
Chris@0
|
650 *
|
Chris@0
|
651 * @param bool $display_enabled
|
Chris@0
|
652 * Whether the display to test should be enabled.
|
Chris@0
|
653 * @param bool $expected_result
|
Chris@0
|
654 * The expected result when calling execute().
|
Chris@0
|
655 *
|
Chris@0
|
656 * @covers ::execute
|
Chris@0
|
657 * @dataProvider providerExecuteReturn
|
Chris@0
|
658 */
|
Chris@0
|
659 public function testExecuteReturn($display_enabled, $expected_result) {
|
Chris@0
|
660 /** @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject $view */
|
Chris@0
|
661 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit_Framework_MockObject_MockObject $display */
|
Chris@0
|
662 list($view, $display) = $this->setupBaseViewAndDisplay();
|
Chris@0
|
663
|
Chris@0
|
664 $display->expects($this->any())
|
Chris@0
|
665 ->method('isEnabled')
|
Chris@0
|
666 ->willReturn($display_enabled);
|
Chris@0
|
667
|
Chris@0
|
668 // Pager needs to be set to avoid false test failures.
|
Chris@0
|
669 $view->pager = $this->getMockBuilder(NonePager::class)
|
Chris@0
|
670 ->disableOriginalConstructor()
|
Chris@0
|
671 ->getMock();
|
Chris@0
|
672
|
Chris@0
|
673 $query = $this->getMockBuilder(QueryPluginBase::class)
|
Chris@0
|
674 ->disableOriginalConstructor()
|
Chris@0
|
675 ->getMock();
|
Chris@0
|
676
|
Chris@0
|
677 $view->query = $query;
|
Chris@0
|
678 $view->built = TRUE;
|
Chris@0
|
679
|
Chris@0
|
680 $this->assertEquals($expected_result, $view->execute());
|
Chris@0
|
681 }
|
Chris@0
|
682
|
Chris@0
|
683 /**
|
Chris@0
|
684 * Provider for testExecuteReturn().
|
Chris@0
|
685 *
|
Chris@0
|
686 * @return array[]
|
Chris@0
|
687 * An array of arrays containing the display state and expected value.
|
Chris@0
|
688 */
|
Chris@0
|
689 public function providerExecuteReturn() {
|
Chris@0
|
690 return [
|
Chris@0
|
691 'enabled' => [static::DISPLAY_ENABLED, TRUE],
|
Chris@0
|
692 'disabled' => [static::DISPLAY_DISABLED, FALSE],
|
Chris@0
|
693 ];
|
Chris@0
|
694 }
|
Chris@0
|
695
|
Chris@0
|
696 }
|