function DisabledDisplayTest::testDisabledDisplays

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php \Drupal\Tests\views\Functional\Plugin\DisabledDisplayTest::testDisabledDisplays()
  2. 8.9.x core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php \Drupal\Tests\views\Functional\Plugin\DisabledDisplayTest::testDisabledDisplays()
  3. 11.x core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php \Drupal\Tests\views\Functional\Plugin\DisabledDisplayTest::testDisabledDisplays()

Tests that views displays can be disabled.

This method only checks the page displays via a HTTP request, but should the .enabled property disappear from the schema both the load and save calls will start failing.

File

core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php, line 57

Class

DisabledDisplayTest
Tests the ability to disable and enable view displays.

Namespace

Drupal\Tests\views\Functional\Plugin

Code

public function testDisabledDisplays() : void {
  // The displays defined in this view.
  $display_ids = [
    'attachment_1',
    'block_1',
    'embed_1',
    'feed_1',
    'page_2',
  ];
  $this->drupalCreateContentType([
    'type' => 'page',
  ]);
  $this->drupalCreateNode();
  // Load the test view and initialize its displays.
  $view = $this->container
    ->get('entity_type.manager')
    ->getStorage('view')
    ->load('test_disabled_display');
  $view->getExecutable()
    ->setDisplay();
  // Enabled page display should return content.
  $this->drupalGet('test-disabled-display');
  $this->assertSession()
    ->elementTextEquals('xpath', '//h1[@class="page-title"]', 'test_disabled_display');
  // Disabled page view should 404.
  $this->drupalGet('test-disabled-display-2');
  $this->assertSession()
    ->statusCodeEquals(404);
  // Enable each disabled display and save the view.
  foreach ($display_ids as $display_id) {
    $view->getExecutable()->displayHandlers
      ->get($display_id)
      ->setOption('enabled', TRUE);
    $view->save();
    $enabled = $view->getExecutable()->displayHandlers
      ->get($display_id)
      ->isEnabled();
    $this->assertTrue($enabled, 'Display ' . $display_id . ' is now enabled');
  }
  \Drupal::service('router.builder')->rebuildIfNeeded();
  // Check that the originally disabled page_2 display is now enabled.
  $this->drupalGet('test-disabled-display-2');
  $this->assertSession()
    ->elementTextEquals('xpath', '//h1[@class="page-title"]', 'test_disabled_display');
  // Disable each disabled display and save the view.
  foreach ($display_ids as $display_id) {
    $view->getExecutable()->displayHandlers
      ->get($display_id)
      ->setOption('enabled', FALSE);
    $view->save();
    $enabled = $view->getExecutable()->displayHandlers
      ->get($display_id)
      ->isEnabled();
    $this->assertFalse($enabled, 'Display ' . $display_id . ' is now disabled');
  }
  \Drupal::service('router.builder')->rebuild();
  // Check that the page_1 display still works.
  $this->drupalGet('test-disabled-display');
  $this->assertSession()
    ->statusCodeEquals(200);
  // Check that the page_2 display is now disabled again.
  $this->drupalGet('test-disabled-display-2');
  $this->assertSession()
    ->statusCodeEquals(404);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.