function BookTest::testBookNavigationBlock

Same name in other branches
  1. 8.9.x core/modules/book/tests/src/Functional/BookTest.php \Drupal\Tests\book\Functional\BookTest::testBookNavigationBlock()
  2. 10 core/modules/book/tests/src/Functional/BookTest.php \Drupal\Tests\book\Functional\BookTest::testBookNavigationBlock()
  3. 11.x core/modules/book/tests/src/Functional/BookTest.php \Drupal\Tests\book\Functional\BookTest::testBookNavigationBlock()

Tests the functionality of the book navigation block.

File

core/modules/book/tests/src/Functional/BookTest.php, line 292

Class

BookTest
Create a book, add pages, and test book interface.

Namespace

Drupal\Tests\book\Functional

Code

public function testBookNavigationBlock() {
    $this->drupalLogin($this->adminUser);
    // Enable the block.
    $block = $this->drupalPlaceBlock('book_navigation');
    // Give anonymous users the permission 'node test view'.
    $edit = [];
    $edit[RoleInterface::ANONYMOUS_ID . '[node test view]'] = TRUE;
    $this->drupalGet('admin/people/permissions/' . RoleInterface::ANONYMOUS_ID);
    $this->submitForm($edit, 'Save permissions');
    $this->assertSession()
        ->pageTextContains('The changes have been saved.');
    // Test correct display of the block.
    $nodes = $this->createBook();
    $this->drupalGet('<front>');
    // Book navigation block.
    $this->assertSession()
        ->pageTextContains($block->label());
    // Link to book root.
    $this->assertSession()
        ->pageTextContains($this->book
        ->label());
    // No links to individual book pages.
    $this->assertSession()
        ->pageTextNotContains($nodes[0]->label());
    // Ensure that an unpublished node does not appear in the navigation for a
    // user without access. By unpublishing a parent page, child pages should
    // not appear in the navigation. The node_access_test module is disabled
    // since it interferes with this logic.
    
    /** @var \Drupal\Core\Extension\ModuleInstaller $installer */
    $installer = \Drupal::service('module_installer');
    $installer->uninstall([
        'node_access_test',
    ]);
    node_access_rebuild();
    $nodes[0]->setUnPublished();
    $nodes[0]->save();
    // Verify the user does not have access to the unpublished node.
    $this->assertFalse($nodes[0]->access('view', $this->webUser));
    // Verify the unpublished book page does not appear in the navigation.
    $this->drupalLogin($this->webUser);
    $this->drupalGet($nodes[0]->toUrl());
    $this->assertSession()
        ->statusCodeEquals(403);
    $this->drupalGet($this->book
        ->toUrl());
    $this->assertSession()
        ->responseNotContains($nodes[0]->getTitle());
    $this->assertSession()
        ->responseNotContains($nodes[1]->getTitle());
    $this->assertSession()
        ->responseNotContains($nodes[2]->getTitle());
}

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