DisplayPageWebTest.php

Same filename and directory in other branches
  1. 9 core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
  2. 8.9.x core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
  3. 10 core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php

Namespace

Drupal\Tests\views\Functional\Plugin

File

core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\views\Functional\Plugin;

use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
use Drupal\Tests\views\Functional\ViewTestBase;
use Drupal\views\Views;

/**
 * Tests the views page display plugin.
 *
 * @group views
 */
class DisplayPageWebTest extends ViewTestBase {
  use AssertPageCacheContextsAndTagsTrait;
  
  /**
   * Views used by this test.
   *
   * @var array
   */
  public static $testViews = [
    'test_page_display',
    'test_page_display_arguments',
    'test_page_display_menu',
    'test_page_display_path',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'block',
    'views_ui',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'starterkit_theme';
  
  /**
   * {@inheritdoc}
   */
  protected function setUp($import_test_views = TRUE, $modules = [
    'views_test_config',
  ]) : void {
    parent::setUp($import_test_views, $modules);
    $this->enableViewsTestModule();
    $this->drupalPlaceBlock('local_tasks_block');
  }
  
  /**
   * Tests arguments.
   */
  public function testArguments() : void {
    $xpath = '//span[@class="field-content"]';
    // Ensure that all the entries are returned.
    $this->drupalGet('test_route_without_arguments');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementsCount('xpath', $xpath, 5);
    $this->drupalGet('test_route_without_arguments/1');
    $this->assertSession()
      ->statusCodeEquals(404);
    // Ensure that just the filtered entry is returned.
    $this->drupalGet('test_route_with_argument/1');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertCacheContexts([
      'languages:language_interface',
      'route',
      'theme',
      'url',
    ]);
    $this->assertSession()
      ->elementsCount('xpath', $xpath, 1);
    $this->assertSession()
      ->elementTextEquals('xpath', $xpath, '1');
    // Ensure that just the filtered entry is returned.
    $this->drupalGet('test_route_with_suffix/1/suffix');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementsCount('xpath', $xpath, 1);
    $this->assertSession()
      ->elementTextEquals('xpath', $xpath, '1');
    // Ensure that no result is returned.
    $this->drupalGet('test_route_with_suffix_and_argument/1/suffix/2');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementNotExists('xpath', $xpath);
    // Ensure that just the filtered entry is returned.
    $this->drupalGet('test_route_with_suffix_and_argument/1/suffix/1');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementsCount('xpath', $xpath, 1);
    $this->assertSession()
      ->elementTextEquals('xpath', $xpath, '1');
    // Ensure that just the filtered entry is returned.
    $this->drupalGet('test_route_with_long_argument/1');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementsCount('xpath', $xpath, 1);
    $this->assertSession()
      ->elementTextEquals('xpath', $xpath, '1');
  }
  
  /**
   * Tests menu settings of page displays.
   */
  public function testPageDisplayMenu() : void {
    // Check local tasks.
    $this->drupalGet('test_page_display_menu');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementTextEquals('xpath', "//ul[contains(@class, 'tabs primary')]//a[contains(@class, 'is-active')]/child::text()", 'Test default tab');
    $this->assertSession()
      ->titleEquals('Test default page | Drupal');
    $this->drupalGet('test_page_display_menu/default');
    $this->assertSession()
      ->statusCodeEquals(404);
    $this->drupalGet('test_page_display_menu/local');
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->elementTextEquals('xpath', "//ul[contains(@class, 'tabs primary')]//a[contains(@class, 'is-active')]/child::text()", 'Test local tab');
    $this->assertSession()
      ->titleEquals('Test local page | Drupal');
    // Check an ordinary menu link.
    $admin_user = $this->drupalCreateUser([
      'administer menu',
    ]);
    $this->drupalLogin($admin_user);
    $this->drupalPlaceBlock('system_menu_block:tools');
    $this->drupalGet('<front>');
    $menu_link = $this->cssSelect('nav.block-menu ul.menu a');
    $this->assertEquals('Test menu link', $menu_link[0]->getText());
    $this->container
      ->get('module_installer')
      ->install([
      'menu_ui',
      'menu_link_content',
    ]);
    // Update the menu link.
    $this->drupalGet("admin/structure/menu/link/views_view:views.test_page_display_menu.page_3/edit");
    $this->submitForm([
      'title' => 'New title',
    ], 'Save');
    $this->drupalGet('<front>');
    $menu_link = $this->cssSelect('nav.block-menu ul.menu a');
    $this->assertEquals('New title', $menu_link[0]->getText());
  }
  
  /**
   * Tests the title is not displayed in the output.
   */
  public function testTitleOutput() : void {
    $this->drupalGet('test_page_display_200');
    $view = Views::getView('test_page_display');
    $xpath = $this->cssSelect('div.view:contains("' . $view->getTitle() . '")');
    $this->assertEmpty($xpath, 'The view title was not displayed in the view markup.');
  }
  
  /**
   * Tests the views page path functionality.
   */
  public function testPagePaths() : void {
    $this->drupalLogin($this->createUser([
      'administer views',
    ]));
    $this->assertPagePath('0');
    $this->assertPagePath('9999');
    $this->assertPagePath('☺');
  }
  
  /**
   * Tests the 'use_admin_theme' page display option.
   */
  public function testAdminTheme() : void {
    $account = $this->drupalCreateUser([
      'view the administration theme',
    ]);
    $this->drupalLogin($account);
    // Use distinct default and administrative themes for this test.
    /** @var \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler */
    $theme_handler = $this->container
      ->get('theme_handler');
    /** @var \Drupal\Core\Extension\ThemeInstallerInterface $theme_installer */
    $theme_installer = $this->container
      ->get('theme_installer');
    $theme_installer->install([
      'claro',
    ]);
    $this->container
      ->get('config.factory')
      ->getEditable('system.theme')
      ->set('admin', 'claro')
      ->set('default', 'stable')
      ->save();
    $theme_handler->refreshInfo();
    // Check that the page has been served with the default theme.
    $this->drupalGet('test_page_display_200');
    $this->assertSession()
      ->responseNotContains('core/themes/claro/css/base/elements.css');
    $view = $this->config('views.view.test_page_display');
    $view->set('display.page_3.display_options.use_admin_theme', TRUE)
      ->save();
    $this->container
      ->get('router.builder')
      ->rebuild();
    // Check that the page was served with the administrative theme.
    $this->drupalGet('test_page_display_200');
    $this->assertSession()
      ->responseContains('core/themes/claro/css/base/elements.css');
  }
  
  /**
   * Tests that we can successfully change a view page display path.
   *
   * @param string $path
   *   Path that will be set as the view page display path.
   *
   * @internal
   */
  public function assertPagePath(string $path) : void {
    $view = Views::getView('test_page_display_path');
    $view->initDisplay('page_1');
    $view->displayHandlers
      ->get('page_1')
      ->overrideOption('path', $path);
    $view->save();
    $this->container
      ->get('router.builder')
      ->rebuild();
    // Check if we successfully changed the path.
    $this->drupalGet($path);
    $this->assertSession()
      ->statusCodeEquals(200);
    // Check if we don't get any error on the view edit page.
    $this->drupalGet('admin/structure/views/view/test_page_display_path');
    $this->assertSession()
      ->statusCodeEquals(200);
  }

}

Classes

Title Deprecated Summary
DisplayPageWebTest Tests the views page display plugin.

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