You are here

public function PaginationAJAXTest::testBasicPagination in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/FunctionalJavascript/PaginationAJAXTest.php \Drupal\Tests\views\FunctionalJavascript\PaginationAJAXTest::testBasicPagination()

Tests if pagination via AJAX works for the "Content" View.

File

core/modules/views/tests/src/FunctionalJavascript/PaginationAJAXTest.php, line 64

Class

PaginationAJAXTest
Tests the click sorting AJAX functionality of Views exposed forms.

Namespace

Drupal\Tests\views\FunctionalJavascript

Code

public function testBasicPagination() {

  // Visit the content page.
  $this
    ->drupalGet('test-content-ajax');
  $session_assert = $this
    ->assertSession();
  $page = $this
    ->getSession()
    ->getPage();
  $settings = $this
    ->getDrupalSettings();

  // Make sure that the view_path is set correctly.
  $expected_view_path = '/test-content-ajax';
  $this
    ->assertEquals($expected_view_path, current($settings['views']['ajaxViews'])['view_path']);

  // Set the number of items displayed per page to 5 using the exposed pager.
  $page
    ->selectFieldOption('edit-items-per-page', 5);
  $page
    ->pressButton('Filter');
  $session_assert
    ->assertWaitOnAjaxRequest();

  // Change 'Updated' sorting from descending to ascending.
  $page
    ->clickLink('Updated');
  $session_assert
    ->assertWaitOnAjaxRequest();

  // Use the pager by clicking on the links and test if we see the expected
  // number of rows on each page. For easy targeting the titles of the pager
  // links are used.

  /** @var \Behat\Mink\Element\NodeElement[] $rows */
  $rows = $page
    ->findAll('css', 'tbody tr');
  $this
    ->assertCount(5, $rows);
  $this
    ->assertStringContainsString('Node 1 content', $rows[0]
    ->getHtml());
  $this
    ->clickLink('Go to page 2');
  $session_assert
    ->assertWaitOnAjaxRequest();
  $rows = $page
    ->findAll('css', 'tbody tr');
  $this
    ->assertCount(5, $rows);
  $this
    ->assertStringContainsString('Node 6 content', $rows[0]
    ->getHtml());
  $link = $page
    ->findLink('Go to page 3');

  // Test that no unwanted parameters are added to the URL.
  $this
    ->assertEquals('?status=All&type=All&langcode=All&items_per_page=5&order=changed&sort=asc&title=&page=2', $link
    ->getAttribute('href'));
  $this
    ->assertNoDuplicateAssetsOnPage();
  $this
    ->clickLink('Go to page 3');
  $session_assert
    ->assertWaitOnAjaxRequest();
  $rows = $page
    ->findAll('css', 'tbody tr');
  $this
    ->assertCount(1, $rows);
  $this
    ->assertStringContainsString('Node 11 content', $rows[0]
    ->getHtml());

  // Navigate back to the first page.
  $this
    ->clickLink('Go to first page');
  $session_assert
    ->assertWaitOnAjaxRequest();
  $rows = $page
    ->findAll('css', 'tbody tr');
  $this
    ->assertCount(5, $rows);
  $this
    ->assertStringContainsString('Node 1 content', $rows[0]
    ->getHtml());

  // Navigate using the 'next' link.
  $this
    ->clickLink('Go to next page');
  $session_assert
    ->assertWaitOnAjaxRequest();
  $rows = $page
    ->findAll('css', 'tbody tr');
  $this
    ->assertCount(5, $rows);
  $this
    ->assertStringContainsString('Node 6 content', $rows[0]
    ->getHtml());

  // Navigate using the 'last' link.
  $this
    ->clickLink('Go to last page');
  $session_assert
    ->assertWaitOnAjaxRequest();
  $rows = $page
    ->findAll('css', 'tbody tr');
  $this
    ->assertCount(1, $rows);
  $this
    ->assertStringContainsString('Node 11 content', $rows[0]
    ->getHtml());

  // Make sure the AJAX calls don't change the view_path.
  $settings = $this
    ->getDrupalSettings();
  $this
    ->assertEquals($expected_view_path, current($settings['views']['ajaxViews'])['view_path']);
}