5 * Contains \Drupal\Tests\views\Unit\Plugin\pager\PagerPluginBaseTest.
8 namespace Drupal\Tests\views\Unit\Plugin\pager;
10 use Drupal\Tests\UnitTestCase;
11 use Drupal\Core\Database\StatementInterface;
12 use Drupal\Core\Database\Query\Select;
15 * @coversDefaultClass \Drupal\views\Plugin\views\pager\PagerPluginBase
18 class PagerPluginBaseTest extends UnitTestCase {
21 * The mock pager plugin instance.
23 * @var \Drupal\views\Plugin\views\pager\PagerPluginBase|\PHPUnit_Framework_MockObject_MockObject
27 protected function setUp() {
28 $this->pager = $this->getMockBuilder('Drupal\views\Plugin\views\pager\PagerPluginBase')
29 ->disableOriginalConstructor()
30 ->getMockForAbstractClass();
32 $view = $this->getMockBuilder('Drupal\views\ViewExecutable')
33 ->disableOriginalConstructor()
35 $display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
36 ->disableOriginalConstructor()
40 'items_per_page' => 5,
44 $this->pager->init($view, $display, $options);
46 $this->pager->current_page = 1;
50 * Tests the getItemsPerPage() method.
52 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getItemsPerPage()
54 public function testGetItemsPerPage() {
55 $this->assertEquals(5, $this->pager->getItemsPerPage());
59 * Tests the setItemsPerPage() method.
61 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setItemsPerPage()
63 public function testSetItemsPerPage() {
64 $this->pager->setItemsPerPage(6);
65 $this->assertEquals(6, $this->pager->getItemsPerPage());
69 * Tests the getOffset() method.
71 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getOffset()
73 public function testGetOffset() {
74 $this->assertEquals(1, $this->pager->getOffset());
78 * Tests the setOffset() method.
80 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setOffset()
82 public function testSetOffset() {
83 $this->pager->setOffset(2);
84 $this->assertEquals(2, $this->pager->getOffset());
88 * Tests the getCurrentPage() method.
90 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getCurrentPage()
92 public function testGetCurrentPage() {
93 $this->assertEquals(1, $this->pager->getCurrentPage());
97 * Tests the setCurrentPage() method.
99 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setCurrentPage()
101 public function testSetCurrentPage() {
102 $this->pager->setCurrentPage(2);
103 $this->assertEquals(2, $this->pager->getCurrentPage());
105 // A non numeric number or number below 0 should return 0.
106 $this->pager->setCurrentPage('two');
107 $this->assertEquals(0, $this->pager->getCurrentPage());
109 $this->pager->setCurrentPage(-2);
110 $this->assertEquals(0, $this->pager->getCurrentPage());
114 * Tests the getTotalItems() method.
116 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getTotalItems()
118 public function testGetTotalItems() {
119 // Should return 0 by default.
120 $this->assertEquals(0, $this->pager->getTotalItems());
122 $this->pager->total_items = 10;
123 $this->assertEquals(10, $this->pager->getTotalItems());
127 * Tests the getPagerId() method.
129 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getPagerId()
131 public function testGetPagerId() {
132 // Should return 0 if 'id' is not set.
133 $this->assertEquals(0, $this->pager->getPagerId());
135 $this->pager->options['id'] = 1;
137 $this->assertEquals(1, $this->pager->getPagerId());
141 * Tests the usePager() method.
143 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::usePager()
145 public function testUsePager() {
146 $this->assertTrue($this->pager->usePager());
150 * Tests the useCountQuery() method.
152 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::useCountQuery()
154 public function testUseCountQuery() {
155 $this->assertTrue($this->pager->useCountQuery());
159 * Tests the usesExposed() method.
161 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::usedExposed()
163 public function testUsesExposed() {
164 $this->assertFalse($this->pager->usesExposed());
168 * Tests the hasMoreRecords() method.
170 * @dataProvider providerTestHasMoreRecords
172 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::hasMoreRecords()
174 public function testHasMoreRecords($items_per_page, $total_items, $current_page, $has_more_records) {
175 $this->pager->setItemsPerPage($items_per_page);
176 $this->pager->total_items = $total_items;
177 $this->pager->setCurrentPage($current_page);
178 $this->assertEquals($has_more_records, $this->pager->hasMoreRecords());
182 * Provides test data for the hasMoreRecord method test.
184 * @see self::testHasMoreRecords
186 public function providerTestHasMoreRecords() {
188 // No items per page, so there can't be more available records.
191 // The amount of total items equals the items per page, so there is no
192 // next page available.
194 // There is one more item, and we are at the first page.
196 // Now we are on the second page, which has just a single one left.
198 // Increase the total items, so we have some available on the third page.
204 * Tests the executeCountQuery method without a set offset.
206 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery()
208 public function testExecuteCountQueryWithoutOffset() {
209 $statement = $this->getMock('\Drupal\Tests\views\Unit\Plugin\pager\TestStatementInterface');
211 $statement->expects($this->once())
212 ->method('fetchField')
213 ->will($this->returnValue(3));
215 $query = $this->getMockBuilder('\Drupal\Core\Database\Query\Select')
216 ->disableOriginalConstructor()
219 $query->expects($this->once())
221 ->will($this->returnValue($statement));
223 $this->pager->setOffset(0);
224 $this->assertEquals(3, $this->pager->executeCountQuery($query));
228 * Tests the executeCountQuery method with a set offset.
230 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery()
232 public function testExecuteCountQueryWithOffset() {
233 $statement = $this->getMock('\Drupal\Tests\views\Unit\Plugin\pager\TestStatementInterface');
235 $statement->expects($this->once())
236 ->method('fetchField')
237 ->will($this->returnValue(3));
239 $query = $this->getMockBuilder('\Drupal\Core\Database\Query\Select')
240 ->disableOriginalConstructor()
243 $query->expects($this->once())
245 ->will($this->returnValue($statement));
247 $this->pager->setOffset(2);
248 $this->assertEquals(1, $this->pager->executeCountQuery($query));
252 * Tests the executeCountQuery method with an offset larger than result count.
254 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery()
256 public function testExecuteCountQueryWithOffsetLargerThanResult() {
257 $statement = $this->getMock(TestStatementInterface::class);
259 $statement->expects($this->once())
260 ->method('fetchField')
261 ->will($this->returnValue(2));
263 $query = $this->getMockBuilder(Select::class)
264 ->disableOriginalConstructor()
267 $query->expects($this->once())
269 ->will($this->returnValue($statement));
271 $this->pager->setOffset(3);
272 $this->assertEquals(0, $this->pager->executeCountQuery($query));
278 * As StatementInterface extends \Traversable, which though always needs
279 * an additional interface. The Statement class itself can't be mocked because
280 * of its __wakeup function.
282 interface TestStatementInterface extends StatementInterface, \Iterator {}