3 namespace Drupal\Tests\views\Functional\Plugin;
5 use Drupal\Tests\views\Functional\ViewTestBase;
8 * Tests the ability to disable and enable view displays.
11 * @see \Drupal\views\Plugin\views\display\Feed
13 class DisabledDisplayTest extends ViewTestBase {
16 * Views used by this test.
20 public static $testViews = ['test_disabled_display'];
27 public static $modules = ['block', 'node', 'views'];
29 protected function setUp($import_test_views = TRUE) {
30 parent::setUp($import_test_views);
32 $this->enableViewsTestModule();
34 $this->drupalPlaceBlock('page_title_block');
36 $admin_user = $this->drupalCreateUser(['administer site configuration']);
37 $this->drupalLogin($admin_user);
41 * Tests that views displays can be disabled.
43 * This method only checks the page displays via a HTTP request, but should
44 * the .enabled property disappear from the schema both the load and save
45 * calls will start failing.
47 public function testDisabledDisplays() {
48 // The displays defined in this view.
49 $display_ids = ['attachment_1', 'block_1', 'embed_1', 'feed_1', 'page_2'];
51 $this->drupalCreateContentType(['type' => 'page']);
52 $this->drupalCreateNode();
54 // Load the test view and initialize its displays.
55 $view = $this->container->get('entity.manager')->getStorage('view')->load('test_disabled_display');
56 $view->getExecutable()->setDisplay();
58 // Enabled page display should return content.
59 $this->drupalGet('test-disabled-display');
60 $result = $this->xpath('//h1[@class="page-title"]');
61 $this->assertEqual($result[0]->getText(), 'test_disabled_display', 'The enabled page_1 display is accessible.');
63 // Disabled page view should 404.
64 $this->drupalGet('test-disabled-display-2');
65 $this->assertResponse(404);
67 // Enable each disabled display and save the view.
68 foreach ($display_ids as $display_id) {
69 $view->getExecutable()->displayHandlers->get($display_id)->setOption('enabled', TRUE);
71 $enabled = $view->getExecutable()->displayHandlers->get($display_id)->isEnabled();
72 $this->assertTrue($enabled, 'Display ' . $display_id . ' is now enabled');
75 \Drupal::service('router.builder')->rebuildIfNeeded();
77 // Check that the originally disabled page_2 display is now enabled.
78 $this->drupalGet('test-disabled-display-2');
79 $result = $this->xpath('//h1[@class="page-title"]');
80 $this->assertEqual($result[0]->getText(), 'test_disabled_display', 'The enabled page_2 display is accessible.');
82 // Disable each disabled display and save the view.
83 foreach ($display_ids as $display_id) {
84 $view->getExecutable()->displayHandlers->get($display_id)->setOption('enabled', FALSE);
86 $enabled = $view->getExecutable()->displayHandlers->get($display_id)->isEnabled();
87 $this->assertFalse($enabled, 'Display ' . $display_id . ' is now disabled');
90 \Drupal::service('router.builder')->rebuild();
92 // Check that the page_1 display still works.
93 $this->drupalGet('test-disabled-display');
94 $this->assertResponse(200);
96 // Check that the page_2 display is now disabled again.
97 $this->drupalGet('test-disabled-display-2');
98 $this->assertResponse(404);