function NavigationLinkBlockTest::testNavigationLinkBlockVisibility

Test block visibility based on the link access logic.

File

core/modules/navigation/tests/src/Functional/NavigationLinkBlockTest.php, line 114

Class

NavigationLinkBlockTest
Tests for \Drupal\navigation\Plugin\Block\NavigationLinkBlockTest.

Namespace

Drupal\Tests\navigation\Functional

Code

public function testNavigationLinkBlockVisibility() : void {
    // Add a link to an external URL.
    $external_label = 'External Link Block';
    $external_link_title = 'Link to example';
    $this->appendNavigationLinkBlock($external_label, $external_link_title, 'http://example.com', 'external');
    // Create an entity and create a link to it.
    $entity_type_manager = \Drupal::entityTypeManager();
    $entity_test_storage = $entity_type_manager->getStorage('entity_test');
    $entity_test_link = $entity_test_storage->create([
        'name' => 'test',
    ]);
    $entity_test_link->save();
    $entity_label = 'Entity Link BLock';
    $entity_link_title = 'Link to entity';
    $this->appendNavigationLinkBlock($entity_label, $entity_link_title, 'entity:entity_test/' . $entity_test_link->id(), 'entity');
    // Link to admin page.
    $admin_label = 'Admin Main Page';
    $admin_link_title = 'Navigation Settings';
    $this->appendNavigationLinkBlock($admin_label, $admin_link_title, 'internal:/admin/config/user-interface/navigation/settings', 'admin');
    // Link to generic internal page (Help Link).
    $help_label = 'Help Block';
    $help_link_title = 'Link to help';
    $this->appendNavigationLinkBlock($help_label, $help_link_title, 'internal:/admin/help', 'internal');
    // Admin user should be capable to access to all the links but the internal
    // one, since Help module is not enabled.
    $test_page_url = Url::fromRoute('test_page_test.test_page');
    $this->drupalLogin($this->adminUser);
    $this->drupalGet($test_page_url);
    $this->assertSession()
        ->pageTextContains($external_label);
    $this->assertSession()
        ->pageTextContains($external_link_title);
    $this->assertSession()
        ->pageTextContains($entity_label);
    $this->assertSession()
        ->pageTextContains($entity_link_title);
    $this->assertSession()
        ->pageTextContains($admin_label);
    $this->assertSession()
        ->pageTextContains($admin_link_title);
    $this->assertSession()
        ->pageTextNotContains($help_label);
    $this->assertSession()
        ->pageTextNotContains($help_link_title);
    // Normal user should not have access only to the external link.
    $this->drupalLogin($this->normalUser);
    $this->drupalGet($test_page_url);
    $this->assertSession()
        ->pageTextContains($external_label);
    $this->assertSession()
        ->pageTextContains($external_link_title);
    $this->assertSession()
        ->pageTextNotContains($entity_label);
    $this->assertSession()
        ->pageTextNotContains($entity_link_title);
    $this->assertSession()
        ->pageTextNotContains($admin_label);
    $this->assertSession()
        ->pageTextNotContains($admin_link_title);
    $this->assertSession()
        ->pageTextNotContains($help_label);
    $this->assertSession()
        ->pageTextNotContains($help_link_title);
    // Enable Help module and grant permissions to admin user.
    // Admin user should be capable to access to all the links
    \Drupal::service('module_installer')->install([
        'help',
    ]);
    $this->adminUser
        ->addRole($this->drupalCreateRole([
        'access help pages',
    ]))
        ->save();
    $this->drupalLogin($this->adminUser);
    $this->drupalGet($test_page_url);
    $this->assertSession()
        ->pageTextContains($external_label);
    $this->assertSession()
        ->pageTextContains($external_link_title);
    $this->assertSession()
        ->pageTextContains($entity_label);
    $this->assertSession()
        ->pageTextContains($entity_link_title);
    $this->assertSession()
        ->pageTextContains($admin_label);
    $this->assertSession()
        ->pageTextContains($admin_link_title);
    $this->assertSession()
        ->pageTextContains($help_label);
    $this->assertSession()
        ->pageTextContains($help_link_title);
    // Normal user should not have access only to the external link.
    $this->drupalLogin($this->normalUser);
    $this->drupalGet($test_page_url);
    $this->assertSession()
        ->pageTextContains($external_label);
    $this->assertSession()
        ->pageTextContains($external_link_title);
    $this->assertSession()
        ->pageTextNotContains($entity_label);
    $this->assertSession()
        ->pageTextNotContains($entity_link_title);
    $this->assertSession()
        ->pageTextNotContains($admin_label);
    $this->assertSession()
        ->pageTextNotContains($admin_link_title);
    $this->assertSession()
        ->pageTextNotContains($help_label);
    $this->assertSession()
        ->pageTextNotContains($help_link_title);
}

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