function NavigationTopBarTest::testTopBarVisibility

Same name in other branches
  1. 10 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 79

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");
    $this->verifyDynamicPageCache($this->node
        ->toUrl(), 'MISS');
    $this->verifyDynamicPageCache($this->node
        ->toUrl(), 'HIT');
    // Top Bar is not visible if the feature flag module is disabled.
    $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"]');
    \Drupal::service('module_installer')->install([
        'navigation_top_bar',
    ]);
    // 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 once the feature flag module is enabled.
    $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--thin-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');
    // 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));
    }
    // 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.