diff --git a/core/modules/views/tests/Drupal/views/Tests/Plugin/pager/PagerPluginBaseTest.php b/core/modules/views/tests/Drupal/views/Tests/Plugin/pager/PagerPluginBaseTest.php new file mode 100644 index 0000000..bdeb1b4 --- /dev/null +++ b/core/modules/views/tests/Drupal/views/Tests/Plugin/pager/PagerPluginBaseTest.php @@ -0,0 +1,266 @@ + 'PagerPluginBase test', + 'description' => 'Tests the \Drupal\views\Plugin\views\pager\PagerPluginBase class.', + 'group' => 'Views Handlers', + ); + } + + public function setUp() { + $this->pager = $this->getMockBuilder('Drupal\views\Plugin\views\pager\PagerPluginBase') + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $view = $this->getMockBuilder('Drupal\views\ViewExecutable') + ->disableOriginalConstructor() + ->getMock(); + $display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase') + ->disableOriginalConstructor() + ->getMock(); + + $options = array( + 'items_per_page' => 5, + 'offset' => 1, + ); + + $this->pager->init($view, $display, $options); + + $this->pager->current_page = 1; + } + + /** + * Tests the getItemsPerPage() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getItemsPerPage() + */ + public function testGetItemsPerPage() { + $this->assertEquals(5, $this->pager->getItemsPerPage()); + } + + /** + * Tests the setItemsPerPage() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setItemsPerPage() + */ + public function testSetItemsPerPage() { + $this->pager->setItemsPerPage(6); + $this->assertEquals(6, $this->pager->getItemsPerPage()); + } + + /** + * Tests the getOffset() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getOffset() + */ + public function testGetOffset() { + $this->assertEquals(1, $this->pager->getOffset()); + } + + /** + * Tests the setOffset() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setOffset() + */ + public function testSetOffset() { + $this->pager->setOffset(2); + $this->assertEquals(2, $this->pager->getOffset()); + } + + /** + * Tests the getCurrentPage() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getCurrentPage() + */ + public function testGetCurrentPage() { + $this->assertEquals(1, $this->pager->getCurrentPage()); + } + + /** + * Tests the setCurrentPage() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::setCurrentPage() + */ + public function testSetCurrentPage() { + $this->pager->setCurrentPage(2); + $this->assertEquals(2, $this->pager->getCurrentPage()); + + // A non numeric number or number below 0 should return 0. + $this->pager->setCurrentPage('two'); + $this->assertEquals(0, $this->pager->getCurrentPage()); + + $this->pager->setCurrentPage(-2); + $this->assertEquals(0, $this->pager->getCurrentPage()); + } + + /** + * Tests the getTotalItems() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getTotalItems() + */ + public function testGetTotalItems() { + // Should return 0 by default. + $this->assertEquals(0, $this->pager->getTotalItems()); + + $this->pager->total_items = 10; + $this->assertEquals(10, $this->pager->getTotalItems()); + } + + /** + * Tests the getPagerId() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::getPagerId() + */ + public function testGetPagerId() { + // Should return 0 if 'id' is not set. + $this->assertEquals(0, $this->pager->getPagerId()); + + $this->pager->options['id'] = 1; + + $this->assertEquals(1, $this->pager->getPagerId()); + } + + /** + * Tests the usePager() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::usePager() + */ + public function testUsePager() { + $this->assertTrue($this->pager->usePager()); + } + + /** + * Tests the useCountQuery() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::useCountQuery() + */ + public function testUseCountQuery() { + $this->assertTrue($this->pager->useCountQuery()); + } + + /** + * Tests the usesExposed() method. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::usedExposed() + */ + public function testUsesExposed() { + $this->assertFalse($this->pager->usesExposed()); + } + + /** + * Tests the hasMoreRecords() method. + * + * @dataProvider providerTestHasMoreRecords + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::hasMoreRecords() + */ + public function testHasMoreRecords($items_per_page, $total_items, $current_page, $has_more_records) { + $this->pager->setItemsPerPage($items_per_page); + $this->pager->total_items = $total_items; + $this->pager->setCurrentPage($current_page); + $this->assertEquals($has_more_records, $this->pager->hasMoreRecords()); + } + + /** + * Provides test data for the hasMoreRecord method test. + * + * @see self::testHasMoreRecords + */ + public function providerTestHasMoreRecords() { + return array( + // No items per page, so there can't be more available records. + array(0, 0, 0, FALSE), + array(0, 10, 0, FALSE), + // The amount of total items equals the items per page, so there is no + // next page available. + array(5, 5, 0, FALSE), + // There is one more item, and we are at the first page. + array(5, 6, 0, TRUE), + // Now we are on the second page, which has just a single one left. + array(5, 6, 1, FALSE), + // Increase the total items, so we have some available on the third page. + array(5, 12, 1, TRUE) + ); + } + + /** + * Tests the executeCountQuery method without a set offset. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery() + */ + public function testExecuteCountQueryWithoutOffset() { + $statement = $this->getMock('\Drupal\views\Tests\Plugin\pager\TestStatementInterface'); + + $statement->expects($this->once()) + ->method('fetchField') + ->will($this->returnValue(3)); + + $query = $this->getMockBuilder('\Drupal\Core\Database\Query\Select') + ->disableOriginalConstructor() + ->getMock(); + + $query->expects($this->once()) + ->method('execute') + ->will($this->returnValue($statement)); + + $this->pager->setOffset(0); + $this->assertEquals(3, $this->pager->executeCountQuery($query)); + } + + /** + * Tests the executeCountQuery method with a set offset. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery() + */ + public function testExecuteCountQueryWithOffset() { + $statement = $this->getMock('\Drupal\views\Tests\Plugin\pager\TestStatementInterface'); + + $statement->expects($this->once()) + ->method('fetchField') + ->will($this->returnValue(3)); + + $query = $this->getMockBuilder('\Drupal\Core\Database\Query\Select') + ->disableOriginalConstructor() + ->getMock(); + + $query->expects($this->once()) + ->method('execute') + ->will($this->returnValue($statement)); + + $this->pager->setOffset(2); + $this->assertEquals(1, $this->pager->executeCountQuery($query)); + } + +} + +// As StatementInterface extends \Transversable, which though always needs +// an additional interface. The Statement class itself can't be mocked because +// of its __wakeup function. +interface TestStatementInterface extends StatementInterface, \Iterator {} diff --git a/core/phpunit.xml.dist b/core/phpunit.xml.dist index f7c97fc..6ca7e89 100644 --- a/core/phpunit.xml.dist +++ b/core/phpunit.xml.dist @@ -1,6 +1,6 @@ - + ./tests/*