function NavigationTopBarTest::testTopBarVisibility

Same name and namespace in other branches
  1. 10 core/modules/navigation/tests/src/Functional/NavigationTopBarTest.php \Drupal\Tests\navigation\Functional\NavigationTopBarTest::testTopBarVisibility()
  2. 11.x core/modules/navigation/tests/src/Functional/NavigationTopBarTest.php \Drupal\Tests\navigation\Functional\NavigationTopBarTest::testTopBarVisibility()

Tests the top bar visibility.

File

core/modules/navigation/tests/src/Functional/NavigationTopBarTest.php, line 85

Class

NavigationTopBarTest
Tests the top bar functionality.

Namespace

Drupal\Tests\navigation\Functional

Code

public function testTopBarVisibility() : void {
  // Test page does not include the Top Bar.
  $test_page_url = Url::fromRoute('test_page_test.test_page');
  $this->verifyDynamicPageCache($test_page_url, 'MISS');
  $this->verifyDynamicPageCache($test_page_url, 'HIT');
  $this->assertSession()
    ->elementNotExists('xpath', "//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/button");
  // Top Bar is visible on node pages.
  $this->verifyDynamicPageCache($this->node
    ->toUrl(), 'MISS');
  $this->verifyDynamicPageCache($this->node
    ->toUrl(), 'HIT');
  $this->assertSession()
    ->elementExists('xpath', "(//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/button)[1]");
  $this->assertSession()
    ->elementTextEquals('xpath', "//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/a[contains(@class, 'toolbar-button--icon--pencil')]", "Edit");
  $this->assertSession()
    ->elementAttributeContains('xpath', "(//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/button)[1]", 'class', 'toolbar-button--icon--dots');
  // Verify that the action link contains an extra attribute.
  $this->assertSession()
    ->elementTextEquals('xpath', "//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/a[contains(@class, 'toolbar-button--icon--database')]", "Test link");
  $this->assertSession()
    ->elementAttributeContains('xpath', "//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/a[contains(@class, 'toolbar-button--icon--database')]", 'data-dialog-type', 'modal');
  // Find all the dropdown links and check if the top bar is there as well.
  $toolbar_links = $this->mink
    ->getSession()
    ->getPage()
    ->find('xpath', '//*[@id="top-bar-page-actions"]/ul');
  foreach ($toolbar_links->findAll('css', 'li') as $toolbar_link) {
    $this->clickLink($toolbar_link->getText());
    $this->assertSession()
      ->elementExists('xpath', "(//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/button)[1]");
    $this->assertSession()
      ->elementAttributeContains('xpath', "(//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/button)[1]", 'class', 'toolbar-button--icon--dots');
    // Ensure that link to current page is not included in the dropdown.
    $url = $this->getSession()
      ->getCurrentUrl();
    $this->assertSession()
      ->linkByHrefNotExistsExact(parse_url($url, PHP_URL_PATH));
    // Ensure that the actions are displayed in the correct order.
    $this->assertActionsWeight($toolbar_links);
  }
  // Regular tabs are visible for user that cannot access to navigation.
  $this->drupalLogin($this->drupalCreateUser([
    'bypass node access',
  ]));
  $this->drupalGet($this->node
    ->toUrl());
  $this->assertSession()
    ->elementNotExists('xpath', "//div[contains(@class, 'top-bar__content')]/div[contains(@class, 'top-bar__actions')]/button");
  $this->assertSession()
    ->elementExists('xpath', '//div[@id="block-tabs"]');
}

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