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;
14 * @coversDefaultClass \Drupal\views\Plugin\views\pager\PagerPluginBase
17 class PagerPluginBaseTest extends UnitTestCase {
20 * The mock pager plugin instance.
22 * @var \Drupal\views\Plugin\views\pager\PagerPluginBase|\PHPUnit_Framework_MockObject_MockObject
26 protected function setUp() {
27 $this->pager = $this->getMockBuilder('Drupal\views\Plugin\views\pager\PagerPluginBase')
28 ->disableOriginalConstructor()
29 ->getMockForAbstractClass();
31 $view = $this->getMockBuilder('Drupal\views\ViewExecutable')
32 ->disableOriginalConstructor()
34 $display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
35 ->disableOriginalConstructor()
39 'items_per_page' => 5,
43 $this->pager->init($view, $display, $options);
45 $this->pager->current_page = 1;
49 * Tests the getItemsPerPage() method.
51 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getItemsPerPage()
53 public function testGetItemsPerPage() {
54 $this->assertEquals(5, $this->pager->getItemsPerPage());
58 * Tests the setItemsPerPage() method.
60 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setItemsPerPage()
62 public function testSetItemsPerPage() {
63 $this->pager->setItemsPerPage(6);
64 $this->assertEquals(6, $this->pager->getItemsPerPage());
68 * Tests the getOffset() method.
70 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getOffset()
72 public function testGetOffset() {
73 $this->assertEquals(1, $this->pager->getOffset());
77 * Tests the setOffset() method.
79 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setOffset()
81 public function testSetOffset() {
82 $this->pager->setOffset(2);
83 $this->assertEquals(2, $this->pager->getOffset());
87 * Tests the getCurrentPage() method.
89 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getCurrentPage()
91 public function testGetCurrentPage() {
92 $this->assertEquals(1, $this->pager->getCurrentPage());
96 * Tests the setCurrentPage() method.
98 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setCurrentPage()
100 public function testSetCurrentPage() {
101 $this->pager->setCurrentPage(2);
102 $this->assertEquals(2, $this->pager->getCurrentPage());
104 // A non numeric number or number below 0 should return 0.
105 $this->pager->setCurrentPage('two');
106 $this->assertEquals(0, $this->pager->getCurrentPage());
108 $this->pager->setCurrentPage(-2);
109 $this->assertEquals(0, $this->pager->getCurrentPage());
113 * Tests the getTotalItems() method.
115 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getTotalItems()
117 public function testGetTotalItems() {
118 // Should return 0 by default.
119 $this->assertEquals(0, $this->pager->getTotalItems());
121 $this->pager->total_items = 10;
122 $this->assertEquals(10, $this->pager->getTotalItems());
126 * Tests the getPagerId() method.
128 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getPagerId()
130 public function testGetPagerId() {
131 // Should return 0 if 'id' is not set.
132 $this->assertEquals(0, $this->pager->getPagerId());
134 $this->pager->options['id'] = 1;
136 $this->assertEquals(1, $this->pager->getPagerId());
140 * Tests the usePager() method.
142 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::usePager()
144 public function testUsePager() {
145 $this->assertTrue($this->pager->usePager());
149 * Tests the useCountQuery() method.
151 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::useCountQuery()
153 public function testUseCountQuery() {
154 $this->assertTrue($this->pager->useCountQuery());
158 * Tests the usesExposed() method.
160 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::usedExposed()
162 public function testUsesExposed() {
163 $this->assertFalse($this->pager->usesExposed());
167 * Tests the hasMoreRecords() method.
169 * @dataProvider providerTestHasMoreRecords
171 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::hasMoreRecords()
173 public function testHasMoreRecords($items_per_page, $total_items, $current_page, $has_more_records) {
174 $this->pager->setItemsPerPage($items_per_page);
175 $this->pager->total_items = $total_items;
176 $this->pager->setCurrentPage($current_page);
177 $this->assertEquals($has_more_records, $this->pager->hasMoreRecords());
181 * Provides test data for the hasMoreRecord method test.
183 * @see self::testHasMoreRecords
185 public function providerTestHasMoreRecords() {
187 // No items per page, so there can't be more available records.
190 // The amount of total items equals the items per page, so there is no
191 // next page available.
193 // There is one more item, and we are at the first page.
195 // Now we are on the second page, which has just a single one left.
197 // Increase the total items, so we have some available on the third page.
203 * Tests the executeCountQuery method without a set offset.
205 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery()
207 public function testExecuteCountQueryWithoutOffset() {
208 $statement = $this->getMock('\Drupal\Tests\views\Unit\Plugin\pager\TestStatementInterface');
210 $statement->expects($this->once())
211 ->method('fetchField')
212 ->will($this->returnValue(3));
214 $query = $this->getMockBuilder('\Drupal\Core\Database\Query\Select')
215 ->disableOriginalConstructor()
218 $query->expects($this->once())
220 ->will($this->returnValue($statement));
222 $this->pager->setOffset(0);
223 $this->assertEquals(3, $this->pager->executeCountQuery($query));
227 * Tests the executeCountQuery method with a set offset.
229 * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery()
231 public function testExecuteCountQueryWithOffset() {
232 $statement = $this->getMock('\Drupal\Tests\views\Unit\Plugin\pager\TestStatementInterface');
234 $statement->expects($this->once())
235 ->method('fetchField')
236 ->will($this->returnValue(3));
238 $query = $this->getMockBuilder('\Drupal\Core\Database\Query\Select')
239 ->disableOriginalConstructor()
242 $query->expects($this->once())
244 ->will($this->returnValue($statement));
246 $this->pager->setOffset(2);
247 $this->assertEquals(1, $this->pager->executeCountQuery($query));
253 * As StatementInterface extends \Traversable, which though always needs
254 * an additional interface. The Statement class itself can't be mocked because
255 * of its __wakeup function.
257 interface TestStatementInterface extends StatementInterface, \Iterator {}