You are here

public function DisabledDisplayTest::testDisabledDisplays in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php \Drupal\Tests\views\Functional\Plugin\DisabledDisplayTest::testDisabledDisplays()
  2. 9 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 54

Class

DisabledDisplayTest
Tests the ability to disable and enable view displays.

Namespace

Drupal\Tests\views\Functional\Plugin

Code

public function testDisabledDisplays() {

  // 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');
  $result = $this
    ->xpath('//h1[@class="page-title"]');
  $this
    ->assertEquals('test_disabled_display', $result[0]
    ->getText(), 'The enabled page_1 display is accessible.');

  // 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');
  $result = $this
    ->xpath('//h1[@class="page-title"]');
  $this
    ->assertEquals('test_disabled_display', $result[0]
    ->getText(), 'The enabled page_2 display is accessible.');

  // 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);
}