You are here

public function BookTest::testAdminBookNodeListing in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/book/tests/src/Functional/BookTest.php \Drupal\Tests\book\Functional\BookTest::testAdminBookNodeListing()

Tests the administrative listing of all book pages in a book.

File

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

Class

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

Namespace

Drupal\Tests\book\Functional

Code

public function testAdminBookNodeListing() {

  // Create a new book.
  $nodes = $this
    ->createBook();
  $this
    ->drupalLogin($this->adminUser);

  // Load the book page list and assert the created book title is displayed
  // and action links are shown on list items.
  $this
    ->drupalGet('admin/structure/book/' . $this->book
    ->id());
  $this
    ->assertSession()
    ->pageTextContains($this->book
    ->label());

  // Test that the view link is found from the list.
  $this
    ->assertSession()
    ->elementTextEquals('xpath', '//table//ul[@class="dropbutton"]/li/a', 'View');

  // Test that all the book pages are displayed on the book outline page.
  $this
    ->assertSession()
    ->elementsCount('xpath', '//table//ul[@class="dropbutton"]/li/a', count($nodes));

  // Unpublish a book in the hierarchy.
  $nodes[0]
    ->setUnPublished();
  $nodes[0]
    ->save();

  // Node should still appear on the outline for admins.
  $this
    ->drupalGet('admin/structure/book/' . $this->book
    ->id());
  $this
    ->assertSession()
    ->elementsCount('xpath', '//table//ul[@class="dropbutton"]/li/a', count($nodes));

  // Saving a book page not as the current version shouldn't effect the book.
  $old_title = $nodes[1]
    ->getTitle();
  $new_title = $this->randomGenerator
    ->name();
  $nodes[1]
    ->isDefaultRevision(FALSE);
  $nodes[1]
    ->setNewRevision(TRUE);
  $nodes[1]
    ->setTitle($new_title);
  $nodes[1]
    ->save();
  $this
    ->drupalGet('admin/structure/book/' . $this->book
    ->id());
  $this
    ->assertSession()
    ->elementsCount('xpath', '//table//ul[@class="dropbutton"]/li/a', count($nodes));
  $this
    ->assertSession()
    ->responseNotContains($new_title);
  $this
    ->assertSession()
    ->responseContains($old_title);
}