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