diff --git a/src/Pagination/src/Paginator.php b/src/Pagination/src/Paginator.php index ec9c68fb6..32c9d1dd2 100644 --- a/src/Pagination/src/Paginator.php +++ b/src/Pagination/src/Paginator.php @@ -11,12 +11,14 @@ final class Paginator implements PaginatorInterface, \Countable { private int $pageNumber = 1; private int $countPages = 1; + private int $count; public function __construct( private int $limit = 25, - private int $count = 0, - private readonly ?string $parameter = null + int $count = 0, + private readonly ?string $parameter = null, ) { + $this->setCount($count); } /** @@ -129,7 +131,7 @@ public function previousPage(): ?int private function setCount(int $count): self { $this->count = \max($count, 0); - $this->countPages = $this->count > 0 ? (int) \ceil($this->count / $this->limit) : 1; + $this->countPages = $this->count > 0 ? (int)\ceil($this->count / $this->limit) : 1; return $this; } diff --git a/src/Pagination/tests/PaginatorTest.php b/src/Pagination/tests/PaginatorTest.php index 14692dd58..e4bb7c8eb 100644 --- a/src/Pagination/tests/PaginatorTest.php +++ b/src/Pagination/tests/PaginatorTest.php @@ -12,20 +12,20 @@ class PaginatorTest extends TestCase { public function testInterfaces() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $this->assertInstanceOf(PaginatorInterface::class, $paginator); } public function testParameterTracking() { - $paginator = new Paginator(25, 0, 'request:page'); + $paginator = new Paginator(limit: 25, count: 0, parameter: 'request:page'); $this->assertSame('request:page', $paginator->getParameter()); } public function testLimit() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $this->assertSame(25, $paginator->getLimit()); $newPaginator = $paginator->withLimit(50); @@ -33,9 +33,17 @@ public function testLimit() $this->assertSame(50, $newPaginator->getLimit()); } + public function testLimitWithCounts() + { + $paginator = new Paginator(limit: 25, count: 100); + + $this->assertSame(100, $paginator->count()); + $this->assertSame(4, $paginator->countPages()); + } + public function testCountsAndPages() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $this->assertSame(0, $paginator->count()); $this->assertSame($paginator->count(), $paginator->count()); @@ -49,7 +57,7 @@ public function testCountsAndPages() public function testFirstPage() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(100); $this->assertSame(1, $paginator->getPage()); @@ -66,10 +74,9 @@ public function testFirstPage() $this->assertSame(25, $paginator->countDisplayed()); } - public function testSecondPage() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(110); $this->assertSame(110, $paginator->count()); @@ -91,7 +98,7 @@ public function testSecondPage() public function testLastPage() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(100); $this->assertSame(1, $paginator->getPage()); @@ -116,7 +123,7 @@ public function testLastPage() public function testNegativePage() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(100); $paginator = $paginator->withPage(-1); @@ -129,7 +136,7 @@ public function testNegativePage() public function testNegativeCount() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(-100); $paginator = $paginator->withPage(-10); @@ -146,7 +153,7 @@ public function testNegativeCount() public function testLastPageNumber() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(110); $this->assertSame(110, $paginator->count()); @@ -166,7 +173,7 @@ public function testLastPageNumber() public function testIsRequired() { - $paginator = new Paginator(25); + $paginator = new Paginator(limit: 25); $paginator = $paginator->withCount(24); $this->assertFalse($paginator->isRequired());