annotate core/modules/views/tests/src/Unit/ViewExecutableTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }