diff --git a/src/DbPager.php b/src/DbPager.php index 34f7d20..2ccd6d0 100644 --- a/src/DbPager.php +++ b/src/DbPager.php @@ -23,6 +23,8 @@ public function __construct( /** @param array $values */ public function __invoke(string $queryId, array $values, Pager $pager, string|null $entity): PagesInterface { + // Clone the Pager attribute to avoid mutating the caller's instance in dynamicPager(). + $pager = clone $pager; if (is_string($pager->perPage)) { $values = $this->dynamicPager($pager, $values); } diff --git a/tests/DbPagerTest.php b/tests/DbPagerTest.php new file mode 100644 index 0000000..89aa50e --- /dev/null +++ b/tests/DbPagerTest.php @@ -0,0 +1,28 @@ + $perPage], $pager, null); + } + + $this->assertSame('perPage', $pager->perPage, 'Pager::$perPage must remain the original key string'); + $this->assertSame([2, 1, 3], $sqlQuery->perPageHistory, 'Each call must forward its own perPage to SqlQuery::getPages()'); + } +} diff --git a/tests/Fake/FakeEmptyPages.php b/tests/Fake/FakeEmptyPages.php new file mode 100644 index 0000000..c814381 --- /dev/null +++ b/tests/Fake/FakeEmptyPages.php @@ -0,0 +1,43 @@ + */ + private ArrayIterator $iter; + + public function __construct() + { + $this->iter = new ArrayIterator([]); + } + + public function offsetExists(mixed $offset): bool + { + return $this->iter->offsetExists($offset); + } + + public function offsetGet(mixed $offset): mixed + { + return $this->iter->offsetGet($offset); + } + + public function offsetSet(mixed $offset, mixed $value): void + { + $this->iter->offsetSet($offset, $value); + } + + public function offsetUnset(mixed $offset): void + { + $this->iter->offsetUnset($offset); + } + + public function count(): int + { + return $this->iter->count(); + } +} diff --git a/tests/Fake/FakeMediaQueryLogger.php b/tests/Fake/FakeMediaQueryLogger.php new file mode 100644 index 0000000..9f16935 --- /dev/null +++ b/tests/Fake/FakeMediaQueryLogger.php @@ -0,0 +1,26 @@ + $values + */ + public function log(string $queryId, array $values): void + { + } + + public function __toString(): string + { + return ''; + } +} diff --git a/tests/Fake/FakeSqlQuery.php b/tests/Fake/FakeSqlQuery.php new file mode 100644 index 0000000..1c54fc0 --- /dev/null +++ b/tests/Fake/FakeSqlQuery.php @@ -0,0 +1,62 @@ + */ + public array $perPageHistory = []; + + /** + * {@inheritDoc} + * + * @param array $values + */ + public function getRow(string $sqlId, array $values = [], FetchInterface|null $fetch = null): array|object|null + { + return null; + } + + /** + * {@inheritDoc} + * + * @param array $values + */ + public function getRowList(string $sqlId, array $values = [], FetchInterface|null $fetch = null): array + { + return []; + } + + /** + * {@inheritDoc} + * + * @param array $values + */ + public function exec(string $sqlId, array $values = [], FetchInterface|null $fetch = null): void + { + } + + /** + * {@inheritDoc} + * + * @param array $values + */ + public function getCount(string $sqlId, array $values): int + { + return 0; + } + + /** + * {@inheritDoc} + * + * @param array $values + */ + public function getPages(string $sqlId, array $values, int $perPage, string $queryTemplate = '/{?page}', string|null $entity = null): PagesInterface + { + $this->perPageHistory[] = $perPage; + + return new FakeEmptyPages(); + } +}