You are here

public function BookTestTrait::checkBookNode in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/book/tests/src/Functional/BookTestTrait.php \Drupal\Tests\book\Functional\BookTestTrait::checkBookNode()

Checks the outline of sub-pages; previous, up, and next.

Also checks the printer friendly version of the outline.

Parameters

\Drupal\Core\Entity\EntityInterface $node: Node to check.

$nodes: Nodes that should be in outline.

$previous: Previous link node.

$up: Up link node.

$next: Next link node.

array $breadcrumb: The nodes that should be displayed in the breadcrumb.

2 calls to BookTestTrait::checkBookNode()
BookContentModerationTest::testBookWithPendingRevisions in core/modules/book/tests/src/Functional/BookContentModerationTest.php
Tests that book drafts can not modify the book outline.
BookTest::testBook in core/modules/book/tests/src/Functional/BookTest.php
Tests book functionality through node interfaces.

File

core/modules/book/tests/src/Functional/BookTestTrait.php, line 90

Class

BookTestTrait
Provides common functionality for Book test classes.

Namespace

Drupal\Tests\book\Functional

Code

public function checkBookNode(EntityInterface $node, $nodes, $previous, $up, $next, array $breadcrumb) {

  // $number does not use drupal_static as it should not be reset
  // since it uniquely identifies each call to checkBookNode().
  static $number = 0;
  $this
    ->drupalGet('node/' . $node
    ->id());

  // Check outline structure.
  if ($nodes !== NULL) {
    $this
      ->assertPattern($this
      ->generateOutlinePattern($nodes));
  }
  else {
    $this
      ->pass(new FormattableMarkup('Node %number does not have outline.', [
      '%number' => $number,
    ]));
  }

  // Check previous, up, and next links.
  if ($previous) {

    /** @var \Drupal\Core\Url $url */
    $url = $previous
      ->toUrl();
    $url
      ->setOptions([
      'attributes' => [
        'rel' => [
          'prev',
        ],
        'title' => t('Go to previous page'),
      ],
    ]);
    $text = new FormattableMarkup('<b>‹</b> @label', [
      '@label' => $previous
        ->label(),
    ]);
    $this
      ->assertRaw(Link::fromTextAndUrl($text, $url)
      ->toString(), 'Previous page link found.');
  }
  if ($up) {

    /** @var \Drupal\Core\Url $url */
    $url = $up
      ->toUrl();
    $url
      ->setOptions([
      'attributes' => [
        'title' => t('Go to parent page'),
      ],
    ]);
    $this
      ->assertRaw(Link::fromTextAndUrl('Up', $url)
      ->toString(), 'Up page link found.');
  }
  if ($next) {

    /** @var \Drupal\Core\Url $url */
    $url = $next
      ->toUrl();
    $url
      ->setOptions([
      'attributes' => [
        'rel' => [
          'next',
        ],
        'title' => t('Go to next page'),
      ],
    ]);
    $text = new FormattableMarkup('@label <b>›</b>', [
      '@label' => $next
        ->label(),
    ]);
    $this
      ->assertRaw(Link::fromTextAndUrl($text, $url)
      ->toString(), 'Next page link found.');
  }

  // Compute the expected breadcrumb.
  $expected_breadcrumb = [];
  $expected_breadcrumb[] = Url::fromRoute('<front>')
    ->toString();
  foreach ($breadcrumb as $a_node) {
    $expected_breadcrumb[] = $a_node
      ->toUrl()
      ->toString();
  }

  // Fetch links in the current breadcrumb.
  $links = $this
    ->xpath('//nav[@class="breadcrumb"]/ol/li/a');
  $got_breadcrumb = [];
  foreach ($links as $link) {
    $got_breadcrumb[] = $link
      ->getAttribute('href');
  }

  // Compare expected and got breadcrumbs.
  $this
    ->assertIdentical($expected_breadcrumb, $got_breadcrumb, 'The breadcrumb is correctly displayed on the page.');

  // Check printer friendly version.
  $this
    ->drupalGet('book/export/html/' . $node
    ->id());
  $this
    ->assertText($node
    ->label(), 'Printer friendly title found.');
  $this
    ->assertRaw($node->body->processed, 'Printer friendly body found.');
  $number++;
}