prophet = new \Prophecy\Prophet(); } /** * generate an array with a set of page with : * - total items ; * - item per page ; * - current page number ; * - expected hasNextPage result. * * @return array */ public function generateHasNextPage() { return [ [10, 10, 1, false], [20, 10, 1, true], [12, 10, 1, true], [12, 10, 2, false], ]; } public function generateHasPage() { return [ [10, 10, -1, false], [12, 10, 1, true], [12, 10, 2, true], [12, 10, 3, false], ]; } /** * generate an array with a set of page with : * - total items ; * - item per page ; * - current page number ; * - expected hasPreviousPage result. * * @return array */ public function generateHasPreviousPage() { return [ [10, 10, 1, false], [20, 10, 1, false], [12, 10, 1, false], [12, 10, 2, true], ]; } /** * generate a set of pages with different maxItem, itemPerPage, and * expected page number. * * @return array */ public function generatePageNumber() { return [ [12, 10, 2], [20, 10, 2], [21, 10, 3], [19, 10, 2], [1, 10, 1], [0, 10, 1], [10, 10, 1], ]; } public function testGetPage() { $paginator = $this->generatePaginator(105, 10); $this->assertEquals(5, $paginator->getPage(5)->getNumber()); } /** * @param int $totalItems * @param int $itemPerPage * @param int $currentPage * @param bool $expectedHasNextPage * @dataProvider generateHasNextPage */ public function testHasNextPage( $totalItems, $itemPerPage, $currentPage, $expectedHasNextPage ) { $paginator = $this->generatePaginator($totalItems, $itemPerPage, $currentPage); $this->assertEquals($expectedHasNextPage, $paginator->hasNextPage()); } /** * test the HasPage function. * * @param int $totalItems * @param int $itemPerpage * @param int $pageNumber * @param bool $expectedHasPage * @dataProvider generateHasPage */ public function testHasPage( $totalItems, $itemPerpage, $pageNumber, $expectedHasPage ) { $paginator = $this->generatePaginator($totalItems, $itemPerpage); $this->assertEquals($expectedHasPage, $paginator->hasPage($pageNumber)); } /** * @param int $totalItems * @param int $itemPerPage * @param int $currentPage * @param mixed $expectedHasNextPage * @dataProvider generateHasPreviousPage */ public function testHasPreviousPage( $totalItems, $itemPerPage, $currentPage, $expectedHasNextPage ) { $paginator = $this->generatePaginator($totalItems, $itemPerPage, $currentPage); $this->assertEquals($expectedHasNextPage, $paginator->hasPreviousPage()); } /** * Test that the countPages method (and his alias `count`) return * valid results. * * @param int $totalItems * @param int $itemPerPage * @param int $expectedPageNumber * @dataProvider generatePageNumber */ public function testPageNumber($totalItems, $itemPerPage, $expectedPageNumber) { $paginator = $this->generatePaginator($totalItems, $itemPerPage); $this->assertEquals($expectedPageNumber, $paginator->countPages()); $this->assertEquals($expectedPageNumber, count($paginator)); } public function testPagesGenerator() { $paginator = $this->generatePaginator(105, 10); $generator = $paginator->getPagesGenerator(); $i = 1; foreach ($generator as $page) { $this->assertEquals( $i, $page->getNumber(), "assert that the current page number is {$i}" ); ++$i; } $this->assertEquals( 11, $page->getNumber(), 'assert that the last page number is 11' ); } public function testPagesWithoutResult() { $paginator = $this->generatePaginator(0, 10); $this->assertEquals(0, $paginator->getCurrentPageFirstItemNumber()); $this->assertEquals(10, $paginator->getItemsPerPage()); } /** * @param int $itemPerPage * @param string $route * @param mixed $totalItems * @param mixed $currentPageNumber * * @return Paginator */ protected function generatePaginator( $totalItems, $itemPerPage, $currentPageNumber = 1, $route = '', array $routeParameters = [] ) { $urlGenerator = $this->prophet->prophesize(); $urlGenerator->willImplement(UrlGeneratorInterface::class); return new Paginator( $totalItems, $itemPerPage, $currentPageNumber, $route, $routeParameters, $urlGenerator->reveal(), 'page', 'item_per_page' ); } }