function MiniPagerTest::testMiniPagerRender

Same name in other branches
  1. 9 core/modules/views/tests/src/Functional/Plugin/MiniPagerTest.php \Drupal\Tests\views\Functional\Plugin\MiniPagerTest::testMiniPagerRender()
  2. 10 core/modules/views/tests/src/Functional/Plugin/MiniPagerTest.php \Drupal\Tests\views\Functional\Plugin\MiniPagerTest::testMiniPagerRender()
  3. 11.x core/modules/views/tests/src/Functional/Plugin/MiniPagerTest.php \Drupal\Tests\views\Functional\Plugin\MiniPagerTest::testMiniPagerRender()

Tests the rendering of mini pagers.

File

core/modules/views/tests/src/Functional/Plugin/MiniPagerTest.php, line 55

Class

MiniPagerTest
Tests the mini pager plugin.

Namespace

Drupal\Tests\views\Functional\Plugin

Code

public function testMiniPagerRender() {
    $this->drupalGet('test_mini_pager');
    $this->assertText('›› test', 'The next link appears on the first page.');
    $this->assertText('Page 1', 'The current page info shows the first page.');
    $this->assertNoText('‹‹ test', 'The previous link does not appear on the first page.');
    $this->assertText($this->nodes[0]
        ->label());
    $this->assertText($this->nodes[1]
        ->label());
    $this->assertText($this->nodes[2]
        ->label());
    $this->drupalGet('test_mini_pager', [
        'query' => [
            'page' => 1,
        ],
    ]);
    $this->assertText('‹‹ test', 'The previous link appears.');
    $this->assertText('Page 2', 'The current page info shows the second page.');
    $this->assertText('›› test', 'The next link appears.');
    $this->assertText($this->nodes[3]
        ->label());
    $this->assertText($this->nodes[4]
        ->label());
    $this->assertText($this->nodes[5]
        ->label());
    $this->drupalGet('test_mini_pager', [
        'query' => [
            'page' => 6,
        ],
    ]);
    $this->assertNoText('›› test', 'The next link appears on the last page.');
    $this->assertText('Page 7', 'The current page info shows the last page.');
    $this->assertText('‹‹ test', 'The previous link does not appear on the last page.');
    $this->assertText($this->nodes[18]
        ->label());
    $this->assertText($this->nodes[19]
        ->label());
    // Test @total value in result summary
    $view = Views::getView('test_mini_pager');
    $view->setDisplay('page_4');
    $this->executeView($view);
    $this->assertIdentical($view->get_total_rows, TRUE, 'The query was set to calculate the total number of rows.');
    $this->assertEqual(count($this->nodes), $view->total_rows, 'The total row count is equal to the number of nodes.');
    $this->drupalGet('test_mini_pager_total', [
        'query' => [
            'page' => 1,
        ],
    ]);
    $this->assertText('of ' . count($this->nodes), 'The first page shows the total row count.');
    $this->drupalGet('test_mini_pager_total', [
        'query' => [
            'page' => 6,
        ],
    ]);
    $this->assertText('of ' . count($this->nodes), 'The last page shows the total row count.');
    // Test a mini pager with just one item per page.
    $this->drupalGet('test_mini_pager_one');
    $this->assertText('››');
    $this->assertText('Page 1');
    $this->assertText($this->nodes[0]
        ->label());
    $this->drupalGet('test_mini_pager_one', [
        'query' => [
            'page' => 1,
        ],
    ]);
    $this->assertText('‹‹');
    $this->assertText('Page 2');
    $this->assertText('››');
    $this->assertText($this->nodes[1]
        ->label());
    $this->drupalGet('test_mini_pager_one', [
        'query' => [
            'page' => 19,
        ],
    ]);
    $this->assertNoText('››');
    $this->assertText('Page 20');
    $this->assertText('‹‹');
    $this->assertText($this->nodes[19]
        ->label());
    $this->drupalGet('test_mini_pager_all');
    $this->assertNoText('‹‹ test', 'The previous link does not appear on the page.');
    $this->assertNoText('Page 1', 'The current page info shows the only page.');
    $this->assertNoText('test ››', 'The next link does not appear on the page.');
    $result = $this->xpath('//div[contains(@class, "views-row")]');
    $this->assertEqual(count($result), count($this->nodes), 'All rows appear on the page.');
    // Remove all items beside 1, so there should be no links shown.
    for ($i = 0; $i < 19; $i++) {
        $this->nodes[$i]
            ->delete();
    }
    $this->drupalGet('test_mini_pager');
    $this->assertNoText('‹‹ test', 'The previous link does not appear on the page.');
    $this->assertNoText('Page 1', 'The current page info shows the only page.');
    $this->assertNoText('‹‹ test', 'The previous link does not appear on the page.');
    $this->assertText($this->nodes[19]
        ->label());
    $view = Views::getView('test_mini_pager');
    $this->executeView($view);
    $this->assertIdentical($view->get_total_rows, NULL, 'The query was not forced to calculate the total number of results.');
    $this->assertIdentical($view->total_rows, 1, 'The pager calculated the total number of rows.');
    // Remove the last node as well and ensure that no "Page 1" is shown.
    $this->nodes[19]
        ->delete();
    $this->drupalGet('test_mini_pager');
    $this->assertNoText('‹‹ test', 'The previous link does not appear on the page.');
    $this->assertNoText('Page 1', 'The current page info shows the only page.');
    $this->assertNoText('‹‹ test', 'The previous link does not appear on the page.');
}

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