From 5aa0b2b128f2c4952c691f0e87823909d234095c Mon Sep 17 00:00:00 2001 From: mazanax Date: Mon, 27 Feb 2017 00:09:55 +0300 Subject: [PATCH] Fixed incorrect logic when page count less then section size --- src/Paginator.php | 4 ++-- src/PaginatorTest.php | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Paginator.php b/src/Paginator.php index 68bd119..c6f3329 100644 --- a/src/Paginator.php +++ b/src/Paginator.php @@ -52,9 +52,9 @@ public function getPages(int $currentPage, int $itemsCount): array if ($currentPage >= $firstPage + $limit && $currentPage <= $lastPage - $limit) { $commonSection = range($currentPage - $partSize, $currentPage + $partSize); } elseif ($currentPage <= $firstPage + $limit) { - $commonSection = range($firstPage, $firstPage + $limit); + $commonSection = range($firstPage, min($firstPage + $limit, $lastPage)); } else { - $commonSection = range($lastPage - $limit, $lastPage); + $commonSection = range(max($firstPage, $lastPage - $limit), $lastPage); } $firstSection = array_diff($firstSection, $commonSection); diff --git a/src/PaginatorTest.php b/src/PaginatorTest.php index bdc3c58..5398210 100644 --- a/src/PaginatorTest.php +++ b/src/PaginatorTest.php @@ -13,9 +13,9 @@ public function testGetPagesWithoutSeparator() { $paginator1 = new Paginator(['on_page' => 5, 'section_size' => 3]); - static::assertEquals([1, 2, 3], $paginator1->getPages(1, 9)); - static::assertEquals([1, 2, 3], $paginator1->getPages(2, 9)); - static::assertEquals([1, 2, 3], $paginator1->getPages(3, 9)); + static::assertEquals([1, 2], $paginator1->getPages(1, 9)); + static::assertEquals([1, 2], $paginator1->getPages(2, 9)); + static::assertEquals([1, 2], $paginator1->getPages(3, 9)); static::assertEquals([1, 2, 3, 4], $paginator1->getPages(3, 16)); static::assertEquals([1, 2, 3, 4], $paginator1->getPages(1, 16)); @@ -24,6 +24,9 @@ public function testGetPagesWithoutSeparator() $paginator2 = new Paginator(['on_page' => 5, 'section_size' => 5]); + static::assertEquals([1], $paginator2->getPages(1, 4)); + static::assertEquals([1, 2], $paginator2->getPages(1, 6)); + static::assertEquals([1, 2], $paginator2->getPages(2, 6)); static::assertEquals([1, 2, 3, 4, 5, 20], $paginator2->getPages(1, 100)); static::assertEquals([1, 2, 3, 4, 5, 20], $paginator2->getPages(2, 100)); static::assertEquals([1, 2, 3, 4, 5, 20], $paginator2->getPages(3, 100)); @@ -51,9 +54,9 @@ public function testGetPagesWithSeparator() $separator = '...'; $paginator1 = new Paginator(['on_page' => 5, 'section_size' => 3, 'separator' => $separator]); - static::assertEquals([1, 2, 3], $paginator1->getPages(1, 9)); - static::assertEquals([1, 2, 3], $paginator1->getPages(2, 9)); - static::assertEquals([1, 2, 3], $paginator1->getPages(3, 9)); + static::assertEquals([1, 2], $paginator1->getPages(1, 9)); + static::assertEquals([1, 2], $paginator1->getPages(2, 9)); + static::assertEquals([1, 2], $paginator1->getPages(3, 9)); static::assertEquals([1, 2, 3, 4], $paginator1->getPages(3, 16)); static::assertEquals([1, 2, 3, $separator, 4], $paginator1->getPages(1, 16)); @@ -62,6 +65,9 @@ public function testGetPagesWithSeparator() $paginator2 = new Paginator(['on_page' => 5, 'section_size' => 5, 'separator' => $separator]); + static::assertEquals([1], $paginator2->getPages(1, 4)); + static::assertEquals([1, 2], $paginator2->getPages(1, 6)); + static::assertEquals([1, 2], $paginator2->getPages(2, 6)); static::assertEquals([1, 2, 3, 4, 5, $separator, 20], $paginator2->getPages(1, 100)); static::assertEquals([1, 2, 3, 4, 5, $separator, 20], $paginator2->getPages(2, 100)); static::assertEquals([1, 2, 3, 4, 5, $separator, 20], $paginator2->getPages(3, 100));