diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 945e77c..7ac1958 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,8 +12,6 @@ jobs:
strategy:
matrix:
php:
- - 7.4
- - 8.0
- 8.1
- 8.2
- 8.3
diff --git a/README.md b/README.md
index 6bc8c06..499bb9c 100644
--- a/README.md
+++ b/README.md
@@ -13,20 +13,21 @@ Rapid pagination without using OFFSET
## Requirements
-- PHP: ^7.4 || ^8.0
-- CakePHP: ^4.5
+- PHP: ^8.1
+- CakePHP: ^5.0
- [lampager/lampager][]: ^0.4
### Note
- For CakePHP 2.x, use [lampager/lampager-cakephp2][].
- For CakePHP 3.x, use [lampager/lampager-cakephp v1.x][].
-- For CakePHP 4.x, use lampager/lampager-cakephp v2.x (this version).
+- For CakePHP 4.x, use [lampager/lampager-cakephp v2.x][].
+- For CakePHP 5.x, use lampager/lampager-cakephp v3.x (this version).
## Installing
```bash
-composer require lampager/lampager-cakephp:^2.0
+composer require lampager/lampager-cakephp:^3.0
```
For SQLite users, see [SQLite](#sqlite) to configure.
@@ -64,8 +65,8 @@ are specific to Lampager such as `forward`, `seekable`, or `cursor`.
```php
$query = $this->Posts
->where(['Posts.type' => 'public'])
- ->orderDesc('created')
- ->orderDesc('id')
+ ->orderByDesc('created')
+ ->orderByDesc('id')
->limit(10);
$posts = $this->paginate($query, [
@@ -121,9 +122,10 @@ $latest = $this->lampager()
->seekable()
->cursor($cursor)
->limit(10)
- ->orderDesc('Posts.modified')
- ->orderDesc('Posts.created')
- ->orderDesc('Posts.id');
+ ->orderByDesc('Posts.modified')
+ ->orderByDesc('Posts.created')
+ ->orderByDesc('Posts.id')
+ ->paginate();
foreach ($latest as $post) {
/** @var \Cake\ORM\Entity $post */
@@ -144,9 +146,10 @@ $drafts = $this->lampager()
->seekable()
->cursor($cursor)
->limit(10)
- ->orderDesc($this->selectQuery()->newExpr('modified'))
- ->orderDesc($this->selectQuery()->newExpr('created'))
- ->orderDesc($this->selectQuery()->newExpr('id'));
+ ->orderByDesc($this->selectQuery()->newExpr('modified'))
+ ->orderByDesc($this->selectQuery()->newExpr('created'))
+ ->orderByDesc($this->selectQuery()->newExpr('id'))
+ ->paginate();
/** @var \Cake\ORM\Entity $sample */
$sample = $drafts->sample();
@@ -159,20 +162,16 @@ $count = $drafts->count();
See also: [lampager/lampager][].
-| Name | Type | Parent Class
Implemented Interface | Description |
-|:----------------------------------------------------|:------|:---------------------------------------|:------------------------------------------------------------------------------------|
-| Lampager\\Cake\\ORM\\`Query` | Class | Cake\\ORM\\`Query` | Fluent factory implementation for CakePHP |
-| Lampager\\Cake\\Model\\Behavior\\`LampagerBehavior` | Class | Cake\\ORM\\`Behavior` | CakePHP behavior which returns Lampager\\Cake\\ORM\\`Query` |
-| Lampager\\Cake\\Datasource\\`Paginator` | Class | Cake\\Datasource\\`Paginator` | CakePHP paginatior which delegates to Lampager\\Cake\\ORM\\`Query` |
-| Lampager\\Cake\\`Paginator` | Class | Lampager\\`Paginator` | Paginator implementation for CakePHP |
-| Lampager\\Cake\\`ArrayProcessor` | Class | Lampager\\`ArrayProcessor` | Processor implementation for CakePHP |
-| Lampager\\Cake\\`PaginationResult` | Class | Cake\\Datasource\\`ResultSetInterface` | PaginationResult implementation for CakePHP |
-| Lampager\\Cake\\Database\\`SqliteCompiler` | Class | Cake\\Database\\`SqliteCompiler` | Query compiler implementation for SQLite |
-| Lampager\\Cake\\Database\\Driver\\`Sqlite` | Class | Cake\\Database\\Driver\\`Sqlite` | Driver implementation which delegates to Lampager\\Cake\\Database\\`SqliteCompiler` |
-
-Note that `\Lampager\Cake\PaginationResult` does not extend
-`\Lampager\PaginationResult` as it conflicts with
-`\Cake\Datasource\ResultSetInterface`.
+| Name | Type | Parent Class
Implemented Interface | Description |
+|:----------------------------------------------------|:------|:-------------------------------------------------------------------------------|:------------------------------------------------------------------------------------|
+| Lampager\\Cake\\ORM\\`Query` | Class | Cake\\ORM\\`Query` | Fluent factory implementation for CakePHP |
+| Lampager\\Cake\\Model\\Behavior\\`LampagerBehavior` | Class | Cake\\ORM\\`Behavior` | CakePHP behavior which returns Lampager\\Cake\\ORM\\`Query` |
+| Lampager\\Cake\\Datasource\\`Paginator` | Class | Cake\\Datasource\\`Paginator` | CakePHP paginatior which delegates to Lampager\\Cake\\ORM\\`Query` |
+| Lampager\\Cake\\`Paginator` | Class | Lampager\\`Paginator` | Paginator implementation for CakePHP |
+| Lampager\\Cake\\`ArrayProcessor` | Class | Lampager\\`ArrayProcessor` | Processor implementation for CakePHP |
+| Lampager\\Cake\\`PaginationResult` | Class | Lampager\\`PaginationResult`
Cake\\Datasource\\Paging\\`PaginatedInterface` | PaginationResult implementation for CakePHP |
+| Lampager\\Cake\\Database\\`SqliteCompiler` | Class | Cake\\Database\\`SqliteCompiler` | Query compiler implementation for SQLite |
+| Lampager\\Cake\\Database\\Driver\\`Sqlite` | Class | Cake\\Database\\Driver\\`Sqlite` | Driver implementation which delegates to Lampager\\Cake\\Database\\`SqliteCompiler` |
## API
@@ -192,8 +191,8 @@ Create a new paginator instance. These methods are not intended to be directly
used in your code.
```php
-static Paginator::create(\Cake\ORM\Query $builder): static
-Paginator::__construct(\Cake\ORM\Query $builder)
+static Paginator::create(\Cake\ORM\Query\SelectQuery $builder): static
+Paginator::__construct(\Cake\ORM\Query\SelectQuery $builder)
```
### Paginator::transform()
@@ -201,7 +200,7 @@ Paginator::__construct(\Cake\ORM\Query $builder)
Transform a Lampager query into a CakePHP query.
```php
-Paginator::transform(\Lampager\Query $query): \Cake\ORM\Query
+Paginator::transform(\Lampager\Query $query): \Cake\ORM\Query\SelectQuery
```
### Paginator::build()
@@ -209,7 +208,7 @@ Paginator::transform(\Lampager\Query $query): \Cake\ORM\Query
Perform configure + transform.
```php
-Paginator::build(\Lampager\Contracts\Cursor|array $cursor = []): \Cake\ORM\Query
+Paginator::build(\Lampager\Contracts\Cursor|array $cursor = []): \Cake\ORM\Query\SelectQuery
```
### Paginator::paginate()
@@ -270,8 +269,7 @@ object(Lampager\Cake\PaginationResult)#1 (6) {
### PaginationResult::\_\_call()
`\Lampager\Cake\PaginationResult` implements
-`\Cake\Datasource\ResultSetInterface`. For how to make the best use of the
-`PaginationResult`, please refer to the Cookbook: [Working with Result Sets][].
+`\Cake\Datasource\Paging\PaginatedInterface`.
## Examples
@@ -303,8 +301,8 @@ class PostsController extends AppController
// Query expression can be passed to PaginatorComponent::paginate() as normal
$query = $this->Posts
->where(['Posts.type' => 'public'])
- ->orderDesc('created')
- ->orderDesc('id')
+ ->orderByDesc('created')
+ ->orderByDesc('id')
->limit(15);
/** @var \Lampager\Cake\PaginationResult<\Cake\ORM\Entity> $posts */
@@ -415,6 +413,6 @@ return [
[lampager/lampager]: https://github.com/lampager/lampager
[lampager/lampager-cakephp v1.x]: https://github.com/lampager/lampager-cakephp/tree/v1.x
+[lampager/lampager-cakephp v2.x]: https://github.com/lampager/lampager-cakephp/tree/v2.x
[lampager/lampager-cakephp2]: https://github.com/lampager/lampager-cakephp2
-[Pagination]: https://book.cakephp.org/4/en/controllers/pagination.html
-[Working with Result Sets]: https://book.cakephp.org/4/en/orm/retrieving-data-and-resultsets.html#working-with-result-sets
+[Pagination]: https://book.cakephp.org/5/en/controllers/pagination.html
diff --git a/composer.json b/composer.json
index 45d57c4..fd8ce9e 100644
--- a/composer.json
+++ b/composer.json
@@ -1,6 +1,6 @@
{
"name": "lampager/lampager-cakephp",
- "description": "Rapid pagination for CakePHP 4",
+ "description": "Rapid pagination for CakePHP 5",
"type": "cakephp-plugin",
"license": "MIT",
"authors": [
@@ -21,12 +21,12 @@
}
},
"require": {
- "php": "^7.4 || ^8.0",
- "cakephp/cakephp": "^4.5",
+ "php": "^8.1",
+ "cakephp/cakephp": "^5.0",
"lampager/lampager": "^0.4"
},
"require-dev": {
- "phpunit/phpunit": "^8.0 || ^9.0",
+ "phpunit/phpunit": "^10.1",
"nilportugues/sql-query-formatter": "^1.2"
},
"scripts": {
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 6a71c27..9034787 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,10 +1,16 @@
+
+
tests/TestCase/
@@ -12,13 +18,10 @@
-
+
-
- src/
-
diff --git a/src/ArrayProcessor.php b/src/ArrayProcessor.php
index efa33a5..ef66d7e 100644
--- a/src/ArrayProcessor.php
+++ b/src/ArrayProcessor.php
@@ -16,7 +16,9 @@ class ArrayProcessor extends BaseArrayProcessor
*/
protected function defaultFormat($rows, array $meta, LampagerQuery $query)
{
- return new PaginationResult($rows, $meta);
+ return new PaginationResult($rows, $meta + [
+ 'limit' => $query->limit(),
+ ]);
}
/**
diff --git a/src/Datasource/Paginator.php b/src/Datasource/Paginator.php
index 5127835..9258524 100644
--- a/src/Datasource/Paginator.php
+++ b/src/Datasource/Paginator.php
@@ -5,12 +5,13 @@
namespace Lampager\Cake\Datasource;
use Cake\Datasource\Paging\NumericPaginator as CakePaginator;
+use Cake\Datasource\Paging\PaginatedInterface;
use Cake\Datasource\QueryInterface;
-use Cake\Datasource\ResultSetInterface;
use Exception;
use Lampager\Cake\ORM\Query;
use Lampager\Cake\PaginationResult;
use Lampager\Exceptions\InvalidArgumentException;
+use function Cake\Core\triggerWarning;
class Paginator extends CakePaginator
{
@@ -19,13 +20,13 @@ class Paginator extends CakePaginator
* @throws InvalidArgumentException if the \Lampager\Cake\ORM\Query is given
* @return PaginationResult
*/
- public function paginate(object $object, array $params = [], array $settings = []): ResultSetInterface
+ public function paginate(mixed $target, array $params = [], array $settings = []): PaginatedInterface
{
$query = null;
- if ($object instanceof QueryInterface) {
- $query = $object;
- $object = $query->getRepository();
- if ($object === null) {
+ if ($target instanceof QueryInterface) {
+ $query = $target;
+ $target = $query->getRepository();
+ if ($target === null) {
throw new Exception('No repository set for query.');
}
}
@@ -34,25 +35,49 @@ public function paginate(object $object, array $params = [], array $settings = [
throw new InvalidArgumentException(Query::class . ' cannot be paginated by ' . __METHOD__ . '()');
}
- $alias = $object->getAlias();
+ $alias = $target->getAlias();
$defaults = $this->getDefaults($alias, $settings);
+
+ $validSettings = [
+ ...array_keys($this->_defaultConfig),
+ 'order',
+ 'forward',
+ 'backward',
+ 'exclusive',
+ 'inclusive',
+ 'seekable',
+ 'unseekable',
+ 'cursor',
+ ];
+ $extraSettings = array_diff_key($defaults, array_flip($validSettings));
+ if ($extraSettings) {
+ triggerWarning(
+ 'Passing query options as paginator settings is no longer supported.'
+ . ' Use a custom finder through the `finder` config or pass a Query instance to paginate().'
+ . ' Extra keys found are: `' . implode('`, `', array_keys($extraSettings)) . '`.'
+ );
+ }
+
$options = $this->mergeOptions($params, $defaults);
- $options = $this->validateSort($object, $options);
+ $options = $this->validateSort($target, $options);
$options = $this->checkLimit($options);
$options += ['cursor' => [], 'scope' => null];
- list($finder, $options) = $this->_extractFinder($options);
-
- if (empty($query)) {
- $query = Query::fromQuery($object->find($finder, $options));
- } else {
- $query = Query::fromQuery($query->applyOptions($options));
+ if ($query === null) {
+ $args = [];
+ $type = $options['finder'] ?? 'all';
+ if (is_array($type)) {
+ $args = (array)current($type);
+ $type = key($type);
+ }
+ $query = $target->find($type, ...$args);
}
+ $query = Query::fromQuery($query->applyOptions($options));
$query->fromArray($options);
$query->cursor($options['cursor']);
- return $query->all();
+ return $query->paginate();
}
}
diff --git a/src/Model/Behavior/LampagerBehavior.php b/src/Model/Behavior/LampagerBehavior.php
index 106c936..44dc941 100644
--- a/src/Model/Behavior/LampagerBehavior.php
+++ b/src/Model/Behavior/LampagerBehavior.php
@@ -5,16 +5,12 @@
namespace Lampager\Cake\Model\Behavior;
use Cake\ORM\Behavior;
-use Cake\ORM\Table;
use Lampager\Cake\ORM\Query;
class LampagerBehavior extends Behavior
{
public function lampager(): Query
{
- $query = new Query($this->table()->getConnection(), $this->table());
- $query->select();
-
- return $query;
+ return new Query($this->table());
}
}
diff --git a/src/ORM/Query.php b/src/ORM/Query.php
index 37fa2ed..a271573 100644
--- a/src/ORM/Query.php
+++ b/src/ORM/Query.php
@@ -4,15 +4,15 @@
namespace Lampager\Cake\ORM;
-use Cake\Database\Connection;
use Cake\Database\Expression\OrderByExpression;
use Cake\Database\Expression\OrderClauseExpression;
use Cake\Database\Expression\QueryExpression;
use Cake\Database\ExpressionInterface;
+use Cake\Datasource\Paging\PaginatedInterface;
use Cake\Datasource\ResultSetInterface;
-use Cake\ORM\Query as BaseQuery;
+use Cake\ORM\Query\SelectQuery;
+use Cake\ORM\ResultSet;
use Cake\ORM\Table;
-use Lampager\Cake\PaginationResult;
use Lampager\Cake\Paginator;
use Lampager\Contracts\Cursor;
use Lampager\Exceptions\Query\BadKeywordException;
@@ -28,7 +28,7 @@
* @method $this unseekable(bool $unseekable = true) Define that the query can detect only either "has_previous" or "has_next".
* @method $this fromArray(mixed[] $options) Define options from an associative array.
*/
-class Query extends BaseQuery
+class Query extends SelectQuery
{
/** @var Paginator */
protected $_paginator;
@@ -39,12 +39,11 @@ class Query extends BaseQuery
/**
* Construct query.
*
- * @param Connection $connection The connection object
- * @param Table $table The table this query is starting on
+ * @param Table $table The table this query is starting on
*/
- public function __construct(Connection $connection, Table $table)
+ public function __construct(Table $table)
{
- parent::__construct($connection, $table);
+ parent::__construct($table);
$this->_paginator = Paginator::create($this);
}
@@ -53,9 +52,9 @@ public function __construct(Connection $connection, Table $table)
* Create query based on the existing query. This factory copies the internal
* state of the given query to a new instance.
*/
- public static function fromQuery(BaseQuery $query)
+ public static function fromQuery(SelectQuery $query)
{
- $obj = new static($query->getConnection(), $query->getRepository());
+ $obj = new static($query->getRepository());
foreach (get_object_vars($query) as $k => $v) {
$obj->$k = $v;
@@ -79,12 +78,20 @@ public function cursor($cursor = [])
return $this;
}
+ /**
+ * Execute query and paginate them.
+ */
+ public function paginate(): PaginatedInterface
+ {
+ return $this->_paginator->paginate($this->_cursor);
+ }
+
/**
* {@inheritdoc}
*/
- public function order($fields, $overwrite = false)
+ public function orderBy(ExpressionInterface|\Closure|array|string $fields, bool $overwrite = false)
{
- parent::order($fields, $overwrite);
+ parent::orderBy($fields, $overwrite);
$this->_executeOrder($this->clause('order'));
return $this;
@@ -93,9 +100,9 @@ public function order($fields, $overwrite = false)
/**
* {@inheritdoc}
*/
- public function orderAsc($field, $overwrite = false)
+ public function orderByAsc(ExpressionInterface|\Closure|string $field, bool $overwrite = false)
{
- parent::orderAsc($field, $overwrite);
+ parent::orderByAsc($field, $overwrite);
$this->_executeOrder($this->clause('order'));
return $this;
@@ -104,9 +111,9 @@ public function orderAsc($field, $overwrite = false)
/**
* {@inheritdoc}
*/
- public function orderDesc($field, $overwrite = false)
+ public function orderByDesc(ExpressionInterface|\Closure|string $field, bool $overwrite = false)
{
- parent::orderDesc($field, $overwrite);
+ parent::orderByDesc($field, $overwrite);
$this->_executeOrder($this->clause('order'));
return $this;
@@ -125,11 +132,11 @@ public function limit($num)
/**
* {@inheritdoc}
- * @return PaginationResult
*/
public function all(): ResultSetInterface
{
- return $this->_paginator->paginate($this->_cursor);
+ $items = $this->paginate()->items();
+ return new ResultSet(is_array($items) ? $items : iterator_to_array($items));
}
/**
@@ -236,7 +243,7 @@ public function __call(string $method, array $arguments)
return $this;
}
- return parent::__call($method, $arguments);
+ throw new \BadMethodCallException('Method ' . __CLASS__ . '::' . $method . ' does not exist');
}
/**
@@ -252,9 +259,8 @@ public function __debugInfo(): array
'params' => [],
'defaultTypes' => $this->getDefaultTypes(),
'decorators' => count($this->_resultDecorators),
- 'executed' => (bool)$this->_iterator,
+ 'executed' => (bool)$this->_statement,
'hydrate' => $this->_hydrate,
- 'buffered' => $this->_useBufferedResults,
'formatters' => count($this->_formatters),
'mapReducers' => count($this->_mapReduce),
'contain' => $this->_eagerLoader ? $this->_eagerLoader->getContain() : [],
diff --git a/src/PaginationResult.php b/src/PaginationResult.php
index 4118b43..a3b4bf3 100644
--- a/src/PaginationResult.php
+++ b/src/PaginationResult.php
@@ -4,92 +4,72 @@
namespace Lampager\Cake;
-use Cake\Collection\CollectionTrait;
-use Cake\Datasource\ResultSetInterface;
-use Iterator;
-use IteratorAggregate;
+use Cake\Datasource\Paging\PaginatedInterface;
+use Countable;
+use JsonSerializable;
use Lampager\PaginationResult as LampagerPaginationResult;
-use Traversable;
/**
* Class PaginationResult
- *
- * This class intentionally does not extend \Lampager\PaginationResult
- * but has the same signature because \Cake\Datasource\ResultSetInterface
- * already implements \Iterator which conflicts with \IteratorAggregate.
- *
- * @property-read mixed $records
- * @property-read null|bool $hasPrevious
- * @property-read null|mixed $previousCursor
- * @property-read null|bool $hasNext
- * @property-read null|mixed $nextCursor
*/
-class PaginationResult implements ResultSetInterface
+class PaginationResult extends LampagerPaginationResult implements JsonSerializable, PaginatedInterface
{
- /** @var LampagerPaginationResult */
- protected $result;
+ protected ?iterable $iterator = null;
- /** @var Iterator */
- protected $iterator;
-
- use CollectionTrait;
+ protected int $limit;
/**
- * PaginationResult constructor.
- * Merge $meta entries into $this.
- *
- * @param mixed $rows
+ * {@inheritdoc}
*/
- public function __construct($rows, array $meta)
+ public function currentPage(): int
{
- $this->result = new LampagerPaginationResult($rows, $meta);
+ return 0;
}
/**
* {@inheritdoc}
*/
- public function current()
+ public function perPage(): int
{
- return $this->unwrap()->current();
+ return $this->limit;
}
/**
* {@inheritdoc}
*/
- public function key()
+ public function totalCount(): ?int
{
- return $this->unwrap()->key();
+ return null;
}
/**
* {@inheritdoc}
*/
- public function next()
+ public function pageCount(): ?int
{
- $this->unwrap()->next();
+ return null;
}
/**
* {@inheritdoc}
*/
- public function rewind()
+ public function hasPrevPage(): bool
{
- $this->unwrap()->rewind();
+ return (bool)$this->hasPrevious;
}
/**
* {@inheritdoc}
*/
- public function valid()
+ public function hasNextPage(): bool
{
- return $this->unwrap()->valid();
+ return (bool)$this->hasNext;
}
/**
* {@inheritdoc}
- * @return Iterator
*/
- public function unwrap(): Traversable
+ public function items(): iterable
{
if (!$this->iterator) {
$this->iterator = $this->getIterator();
@@ -101,68 +81,48 @@ public function unwrap(): Traversable
/**
* {@inheritdoc}
*/
- public function toArray(bool $preserveKeys = true): array
- {
- $array = (array)$this->result;
- $array['records'] = iterator_to_array($this->unwrap());
-
- return $array;
- }
-
- /**
- * {@inheritdoc}
- */
- public function jsonSerialize(): array
+ public function pagingParam(string $name): mixed
{
- return $this->toArray();
+ return $this->pagingParams()[$name] ?? null;
}
/**
* {@inheritdoc}
*/
- public function serialize()
+ public function pagingParams(): array
{
- return json_encode($this->jsonSerialize());
+ return [
+ 'count' => $this->count(),
+ 'totalCount' => $this->totalCount(),
+ 'perPage' => $this->perPage(),
+ 'pageCount' => $this->pageCount(),
+ 'currentPage' => $this->currentPage(),
+ 'hasPrevPage' => $this->hasPrevPage(),
+ 'hasNextPage' => $this->hasNextPage(),
+ ];
}
/**
* {@inheritdoc}
*/
- public function unserialize($serialized)
- {
- $obj = json_decode($serialized, true);
- $meta = $obj;
- unset($meta['records']);
-
- $this->result = new LampagerPaginationResult($obj['records'], $meta);
- }
-
- protected function getIterator(): Iterator
+ public function jsonSerialize(): array
{
- /** @var Iterator|IteratorAggregate */
- $iterator = $this->result->getIterator();
+ $items = $this->items();
+ $array = get_object_vars($this);
+ $array['records'] = is_array($items) ? $items : iterator_to_array($items);
+ unset($array['iterator']);
+ unset($array['limit']);
- if ($iterator instanceof IteratorAggregate) {
- $iterator = $iterator->getIterator();
- }
-
- return $iterator;
+ return $array;
}
/**
- * @param string $name The name of the parameter to fetch
+ * {@inheritdoc}
*/
- public function __get(string $name)
+ public function count(): int
{
- if (property_exists($this->result, $name)) {
- return $this->result->{$name};
- }
-
- $trace = debug_backtrace();
- trigger_error(
- 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'],
- E_USER_NOTICE
- );
+ $items = $this->items();
+ return $items instanceof Countable ? count($items) : iterator_count($items);
}
/**
diff --git a/src/Paginator.php b/src/Paginator.php
index d71a301..9fab457 100644
--- a/src/Paginator.php
+++ b/src/Paginator.php
@@ -4,7 +4,7 @@
namespace Lampager\Cake;
-use Cake\ORM\Query;
+use Cake\ORM\Query\SelectQuery;
use Cake\ORM\Table;
use Generator;
use Lampager\Concerns\HasProcessor;
@@ -22,7 +22,7 @@ class Paginator extends BasePaginator
{
use HasProcessor;
- /** @var Query $builder */
+ /** @var SelectQuery $builder */
public $builder;
/**
@@ -30,7 +30,7 @@ class Paginator extends BasePaginator
*
* @return static
*/
- public static function create(Query $builder)
+ public static function create(SelectQuery $builder)
{
return new static($builder);
}
@@ -38,7 +38,7 @@ public static function create(Query $builder)
/**
* Construct paginator.
*/
- public function __construct(Query $builder)
+ public function __construct(SelectQuery $builder)
{
$this->builder = $builder;
$this->processor = new ArrayProcessor();
@@ -47,7 +47,7 @@ public function __construct(Query $builder)
/**
* Build CakePHP Query instance from Lampager Query config.
*/
- public function transform(LampagerQuery $query): Query
+ public function transform(LampagerQuery $query): SelectQuery
{
return $this->compileSelectOrUnionAll($query->selectOrUnionAll());
}
@@ -57,7 +57,7 @@ public function transform(LampagerQuery $query): Query
*
* @param Cursor|int[]|string[] $cursor
*/
- public function build($cursor = []): Query
+ public function build($cursor = []): SelectQuery
{
return $this->transform($this->configure($cursor));
}
@@ -74,7 +74,7 @@ public function paginate($cursor = [])
return $this->process($query, $this->transform($query)->toArray());
}
- protected function compileSelectOrUnionAll(SelectOrUnionAll $selectOrUnionAll): Query
+ protected function compileSelectOrUnionAll(SelectOrUnionAll $selectOrUnionAll): SelectQuery
{
if ($selectOrUnionAll instanceof Select) {
return $this->compileSelect($selectOrUnionAll);
@@ -91,7 +91,7 @@ protected function compileSelectOrUnionAll(SelectOrUnionAll $selectOrUnionAll):
// @codeCoverageIgnoreEnd
}
- protected function compileSelect(Select $select): Query
+ protected function compileSelect(Select $select): SelectQuery
{
if ($this->builder->clause('group') || $this->builder->clause('union')) {
throw new InsufficientConstraintsException('group()/union() are not supported');
@@ -100,7 +100,7 @@ protected function compileSelect(Select $select): Query
/** @var Table $repository */
$repository = $this->builder->getRepository();
- /** @var Query $builder */
+ /** @var SelectQuery $builder */
$builder = $repository->selectQuery()
->where($this->builder->clause('where'))
->modifier($this->builder->clause('modifier'))
@@ -119,7 +119,7 @@ protected function compileSelect(Select $select): Query
/**
* @return $this
*/
- protected function compileWhere(Query $builder, Select $select)
+ protected function compileWhere(SelectQuery $builder, Select $select)
{
$conditions = [];
foreach ($select->where() as $group) {
@@ -145,7 +145,7 @@ protected function compileWhereGroup(ConditionGroup $group): Generator
/**
* @return $this
*/
- protected function compileOrderBy(Query $builder, Select $select)
+ protected function compileOrderBy(SelectQuery $builder, Select $select)
{
$alias = $builder->getRepository()->getAlias();
@@ -154,7 +154,7 @@ protected function compileOrderBy(Query $builder, Select $select)
if (strpos($column, '.') === false) {
$column = $alias . '.' . $column;
}
- $builder->order([$column => $order->order()], $i === 0);
+ $builder->orderBy([$column => $order->order()], $i === 0);
}
return $this;
}
@@ -162,7 +162,7 @@ protected function compileOrderBy(Query $builder, Select $select)
/**
* @return $this
*/
- protected function compileLimit(Query $builder, Select $select)
+ protected function compileLimit(SelectQuery $builder, Select $select)
{
$builder->limit($select->limit()->toInteger());
return $this;
diff --git a/tests/Fixture/PostsFixture.php b/tests/Fixture/PostsFixture.php
index 4a88b2f..88f4b02 100644
--- a/tests/Fixture/PostsFixture.php
+++ b/tests/Fixture/PostsFixture.php
@@ -8,7 +8,7 @@
class PostsFixture extends TestFixture
{
- public $records = [
+ public array $records = [
['id' => 1, 'modified' => '2017-01-01 10:00:00'],
['id' => 3, 'modified' => '2017-01-01 10:00:00'],
['id' => 5, 'modified' => '2017-01-01 10:00:00'],
diff --git a/tests/TestCase/Database/SqliteCompilerTest.php b/tests/TestCase/Database/SqliteCompilerTest.php
index f374d4d..3bb8aad 100644
--- a/tests/TestCase/Database/SqliteCompilerTest.php
+++ b/tests/TestCase/Database/SqliteCompilerTest.php
@@ -10,7 +10,7 @@
class SqliteCompilerTest extends TestCase
{
- public $fixtures = [
+ public array $fixtures = [
'plugin.Lampager\\Cake.Posts',
];
diff --git a/tests/TestCase/Datasource/PaginatorTest.php b/tests/TestCase/Datasource/PaginatorTest.php
index 2d3e9bd..f6e560b 100644
--- a/tests/TestCase/Datasource/PaginatorTest.php
+++ b/tests/TestCase/Datasource/PaginatorTest.php
@@ -7,7 +7,8 @@
use Cake\Controller\Controller;
use Cake\Database\Expression\OrderClauseExpression;
use Cake\Datasource\QueryInterface;
-use Cake\I18n\FrozenTime;
+use Cake\Http\ServerRequest;
+use Cake\I18n\DateTime;
use Cake\ORM\Entity;
use Cake\ORM\Table;
use Exception;
@@ -21,7 +22,7 @@
class PaginatorTest extends TestCase
{
- public $fixtures = [
+ public array $fixtures = [
'plugin.Lampager\\Cake.Posts',
];
@@ -31,11 +32,13 @@ class PaginatorTest extends TestCase
*/
public function testPaginateTable(callable $factory, PaginationResult $expected): void
{
- $controller = new Controller();
- $controller->Posts = null;
- $controller->paginate = [
- 'className' => Paginator::class,
- ];
+ $controller = new class(new ServerRequest()) extends Controller {
+ public $Posts = null;
+
+ public array $paginate = [
+ 'className' => Paginator::class,
+ ];
+ };
$posts = $controller->fetchTable('Posts');
@@ -49,14 +52,42 @@ public function testPaginateTable(callable $factory, PaginationResult $expected)
* @dataProvider valueProvider
* @dataProvider queryExpressionProvider
*/
- public function testPaginateCakeQuery(callable $factory, PaginationResult $expected): void
+ public function testPaginateTableFinder(callable $factory, PaginationResult $expected): void
{
- $controller = new Controller();
- $controller->Posts = null;
- $controller->paginate = [
- 'className' => Paginator::class,
+ $controller = new class(new ServerRequest()) extends Controller {
+ public $Posts = null;
+
+ public array $paginate = [
+ 'className' => Paginator::class,
+ ];
+ };
+
+ $posts = $controller->fetchTable('Posts');
+
+ /** @var mixed[] $options */
+ $options = $factory($posts) + [
+ 'finder' => [
+ 'all' => [],
+ ],
];
+ $this->assertJsonEquals($expected, $controller->paginate('Posts', $options));
+ }
+
+ /**
+ * @dataProvider valueProvider
+ * @dataProvider queryExpressionProvider
+ */
+ public function testPaginateCakeQuery(callable $factory, PaginationResult $expected): void
+ {
+ $controller = new class(new ServerRequest()) extends Controller {
+ public $Posts = null;
+
+ public array $paginate = [
+ 'className' => Paginator::class,
+ ];
+ };
+
$posts = $controller->fetchTable('Posts');
/** @var mixed[] $options */
@@ -65,6 +96,32 @@ public function testPaginateCakeQuery(callable $factory, PaginationResult $expec
$this->assertJsonEquals($expected, $controller->paginate($posts->find('all'), $options));
}
+ /**
+ * @dataProvider valueProvider
+ * @dataProvider queryExpressionProvider
+ */
+ public function testPaginateExtraSettings(callable $factory): void
+ {
+ $controller = new class(new ServerRequest()) extends Controller {
+ public $Posts = null;
+
+ public array $paginate = [
+ 'className' => Paginator::class,
+ ];
+ };
+
+ $posts = $controller->fetchTable('Posts');
+
+ /** @var mixed[] $options */
+ $options = $factory($posts) + [
+ 'extraOption' => true,
+ ];
+
+ $this->expectWarningMessageMatches('/Extra keys found are: `extraOption`\./', function () use ($controller, $options) {
+ $controller->paginate('Posts', $options);
+ });
+ }
+
/**
* @dataProvider valueProvider
* @dataProvider queryExpressionProvider
@@ -74,11 +131,13 @@ public function testPaginateLampagerCakeQuery(callable $factory): void
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Lampager\Cake\ORM\Query cannot be paginated by Lampager\Cake\Datasource\Paginator::paginate()');
- $controller = new Controller();
- $controller->Posts = null;
- $controller->paginate = [
- 'className' => Paginator::class,
- ];
+ $controller = new class(new ServerRequest()) extends Controller {
+ public $Posts = null;
+
+ public array $paginate = [
+ 'className' => Paginator::class,
+ ];
+ };
/** @var LampagerBehavior&Table $posts */
$posts = $controller->fetchTable('Posts');
@@ -95,11 +154,13 @@ public function testPaginateInvalidQuery(): void
$this->expectException(Exception::class);
$this->expectExceptionMessage('No repository set for query.');
- $controller = new Controller();
- $controller->Posts = null;
- $controller->paginate = [
- 'className' => Paginator::class,
- ];
+ $controller = new class(new ServerRequest()) extends Controller {
+ public $Posts = null;
+
+ public array $paginate = [
+ 'className' => Paginator::class,
+ ];
+ };
/** @var MockObject&QueryInterface $query */
$query = $this->getMockBuilder(QueryInterface::class)->getMock();
@@ -108,7 +169,7 @@ public function testPaginateInvalidQuery(): void
$controller->paginate($query);
}
- public function valueProvider(): Generator
+ public static function valueProvider(): Generator
{
yield 'Ascending forward start inclusive' => [
function () {
@@ -126,15 +187,15 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -143,7 +204,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 2,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -166,15 +227,15 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -183,7 +244,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -201,7 +262,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -209,27 +270,27 @@ function () {
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 1,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 4,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -248,7 +309,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -256,22 +317,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -295,22 +356,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -335,22 +396,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -370,7 +431,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -378,11 +439,11 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -391,7 +452,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -410,7 +471,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -418,7 +479,7 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -427,7 +488,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 1,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -449,15 +510,15 @@ function () {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -466,7 +527,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -489,15 +550,15 @@ function () {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -506,7 +567,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -524,7 +585,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -532,18 +593,18 @@ function () {
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -564,7 +625,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -572,14 +633,14 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 1,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -603,22 +664,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 2,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -643,22 +704,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -678,7 +739,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -686,27 +747,27 @@ function () {
[
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 4,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 1,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -725,7 +786,7 @@ function () {
],
'cursor' => [
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -733,15 +794,15 @@ function () {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -750,14 +811,14 @@ function () {
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 5,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
];
}
- public function queryExpressionProvider(): Generator
+ public static function queryExpressionProvider(): Generator
{
yield 'Ascending forward start inclusive with QueryExpression' => [
function () {
@@ -775,15 +836,15 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -792,7 +853,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -815,15 +876,15 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -832,7 +893,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -850,7 +911,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -858,27 +919,27 @@ function () {
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -897,7 +958,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -905,22 +966,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -944,22 +1005,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -984,22 +1045,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -1019,7 +1080,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -1027,11 +1088,11 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -1040,7 +1101,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1059,7 +1120,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -1067,7 +1128,7 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -1076,7 +1137,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1098,15 +1159,15 @@ function () {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -1115,7 +1176,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1138,15 +1199,15 @@ function () {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -1155,7 +1216,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1173,7 +1234,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -1181,18 +1242,18 @@ function () {
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -1213,7 +1274,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -1221,14 +1282,14 @@ function () {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -1252,22 +1313,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -1292,22 +1353,22 @@ function () {
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -1327,7 +1388,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -1335,27 +1396,27 @@ function () {
[
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1374,7 +1435,7 @@ function () {
],
'cursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
];
},
@@ -1382,15 +1443,15 @@ function () {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -1399,7 +1460,7 @@ function () {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
diff --git a/tests/TestCase/Model/ArrayProcessorTest.php b/tests/TestCase/Model/ArrayProcessorTest.php
index 15e5ec8..ce73769 100644
--- a/tests/TestCase/Model/ArrayProcessorTest.php
+++ b/tests/TestCase/Model/ArrayProcessorTest.php
@@ -4,7 +4,7 @@
namespace Lampager\Cake\Test\TestCase\Model;
-use Cake\I18n\FrozenTime;
+use Cake\I18n\DateTime;
use Cake\ORM\Entity;
use Cake\ORM\Table;
use Generator;
@@ -42,7 +42,7 @@ public function testProcess(array $options, ?array $cursor, array $rows, Paginat
$this->assertEquals($expected, $actual);
}
- public function processProvider(): Generator
+ public static function processProvider(): Generator
{
yield 'Option has prefix but entity does not have prefix' => [
[
@@ -56,55 +56,56 @@ public function processProvider(): Generator
],
[
'Posts.id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
], [
'hasPrevious' => true,
'previousCursor' => [
'Posts.id' => 1,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 4,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
+ 'limit' => 3,
]
),
];
@@ -121,55 +122,56 @@ public function processProvider(): Generator
],
[
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
], [
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
+ 'limit' => 3,
]
),
];
@@ -186,55 +188,56 @@ public function processProvider(): Generator
],
[
'id' => 3,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
], [
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'Posts.modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 4,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
+ 'limit' => 3,
]
),
];
diff --git a/tests/TestCase/Model/Behavior/LampagerBehaviorTest.php b/tests/TestCase/Model/Behavior/LampagerBehaviorTest.php
index 2b9bb7c..7147da2 100644
--- a/tests/TestCase/Model/Behavior/LampagerBehaviorTest.php
+++ b/tests/TestCase/Model/Behavior/LampagerBehaviorTest.php
@@ -4,7 +4,7 @@
namespace Lampager\Cake\Test\TestCase\Model\Behavior;
-use Cake\I18n\FrozenTime;
+use Cake\I18n\DateTime;
use Cake\ORM\Entity;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
@@ -16,7 +16,7 @@
class LampagerBehaviorTest extends TestCase
{
- public $fixtures = [
+ public array $fixtures = [
'plugin.Lampager\\Cake.Posts',
];
@@ -32,10 +32,10 @@ public function testLampager(callable $factory, PaginationResult $expected): voi
/** @var Query $query */
$query = $factory($posts);
- $this->assertJsonEquals($expected, $query->all());
+ $this->assertJsonEquals($expected, $query->paginate());
}
- public function valueProvider(): Generator
+ public static function valueProvider(): Generator
{
yield 'Ascending forward start inclusive' => [
function (Table $posts) {
@@ -44,22 +44,22 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id');
+ ->orderByAsc('modified')
+ ->orderByAsc('id');
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -68,7 +68,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -82,22 +82,22 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id');
+ ->orderByAsc('modified')
+ ->orderByAsc('id');
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -106,7 +106,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -119,38 +119,38 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -164,33 +164,33 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -205,29 +205,29 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id');
+ ->orderByAsc('modified')
+ ->orderByAsc('id');
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -243,29 +243,29 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id');
+ ->orderByAsc('modified')
+ ->orderByAsc('id');
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -280,22 +280,22 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -304,7 +304,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -318,18 +318,18 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -338,7 +338,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -351,22 +351,22 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id');
+ ->orderByDesc('modified')
+ ->orderByDesc('id');
},
new PaginationResult(
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -375,7 +375,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -389,22 +389,22 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id');
+ ->orderByDesc('modified')
+ ->orderByDesc('id');
},
new PaginationResult(
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -413,7 +413,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -426,29 +426,29 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -464,25 +464,25 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -497,29 +497,29 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id');
+ ->orderByDesc('modified')
+ ->orderByDesc('id');
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -535,29 +535,29 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id');
+ ->orderByDesc('modified')
+ ->orderByDesc('id');
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -572,38 +572,38 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -617,26 +617,26 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -645,14 +645,14 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
];
}
- public function queryExpressionProvider(): Generator
+ public static function queryExpressionProvider(): Generator
{
yield 'Ascending forward start inclusive with QueryExpression' => [
function (Table $posts) {
@@ -661,22 +661,22 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'));
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -685,7 +685,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -698,38 +698,38 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'))
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -743,33 +743,33 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'))
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -784,29 +784,29 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'));
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -822,29 +822,29 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'));
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -859,22 +859,22 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'))
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -883,7 +883,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -897,18 +897,18 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc($posts->selectQuery()->expr('modified'))
- ->orderAsc($posts->selectQuery()->expr('id'))
+ ->orderByAsc($posts->selectQuery()->expr('modified'))
+ ->orderByAsc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -917,7 +917,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -930,22 +930,22 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'));
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -954,7 +954,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -968,22 +968,22 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'));
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -992,7 +992,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1005,29 +1005,29 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'))
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -1043,25 +1043,25 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'))
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => false,
'nextCursor' => null,
@@ -1076,29 +1076,29 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'));
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -1114,29 +1114,29 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'));
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'));
},
new PaginationResult(
[
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
'hasNext' => null,
'nextCursor' => null,
@@ -1151,38 +1151,38 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'))
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
'hasPrevious' => true,
'previousCursor' => [
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
'hasNext' => true,
'nextCursor' => [
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
@@ -1196,26 +1196,26 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc($posts->selectQuery()->expr('modified'))
- ->orderDesc($posts->selectQuery()->expr('id'))
+ ->orderByDesc($posts->selectQuery()->expr('modified'))
+ ->orderByDesc($posts->selectQuery()->expr('id'))
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]);
},
new PaginationResult(
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -1224,7 +1224,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
diff --git a/tests/TestCase/ORM/QueryTest.php b/tests/TestCase/ORM/QueryTest.php
index 19054f8..f96a32b 100644
--- a/tests/TestCase/ORM/QueryTest.php
+++ b/tests/TestCase/ORM/QueryTest.php
@@ -5,7 +5,7 @@
namespace Lampager\Cake\Test\TestCase\ORM;
use Cake\Database\Expression\OrderClauseExpression;
-use Cake\I18n\FrozenTime;
+use Cake\I18n\DateTime;
use Cake\ORM\Entity;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
@@ -23,7 +23,7 @@
class QueryTest extends TestCase
{
- public $fixtures = [
+ public array $fixtures = [
'plugin.Lampager\\Cake.Posts',
];
@@ -49,7 +49,7 @@ public function tearDown(): void
/**
* @dataProvider orderProvider
*/
- public function testOrder(callable $factory, PaginationResult $expected): void
+ public function testorderBy(callable $factory, PaginationResult $expected): void
{
/** @var LampagerBehavior&Table $posts */
$posts = TableRegistry::getTableLocator()->get('Posts');
@@ -57,7 +57,7 @@ public function testOrder(callable $factory, PaginationResult $expected): void
/** @var Query $query */
$query = $factory($posts);
- $this->assertJsonEquals($expected, $query->all());
+ $this->assertJsonEquals($expected, $query->paginate());
}
/**
@@ -74,8 +74,8 @@ public function testOrderClear(callable $factory): void
/** @var Query $query */
$query = $factory($posts);
- $query->order([], true);
- $query->all();
+ $query->orderBy([], true);
+ $query->paginate();
}
public function testOrderIllegal(): void
@@ -91,8 +91,8 @@ public function testOrderIllegal(): void
$posts = TableRegistry::getTableLocator()->get('Posts');
$posts->addBehavior(LampagerBehavior::class);
$posts->lampager()
- ->order([$expression])
- ->all();
+ ->orderBy([$expression])
+ ->paginate();
}
public function testOrderQueryExpression(): void
@@ -105,7 +105,7 @@ public function testOrderQueryExpression(): void
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -114,16 +114,16 @@ public function testOrderQueryExpression(): void
'hasNext' => true,
'nextCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
);
$actual = $posts->lampager()
- ->order([$posts->selectQuery()->expr('modified')])
- ->order([$posts->selectQuery()->expr('id')])
+ ->orderBy([$posts->selectQuery()->expr('modified')])
+ ->orderBy([$posts->selectQuery()->expr('id')])
->limit(1)
- ->all();
+ ->paginate();
$this->assertJsonEquals($expected, $actual);
}
@@ -138,7 +138,7 @@ public function testLimitQueryExpression(): void
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -147,16 +147,16 @@ public function testLimitQueryExpression(): void
'hasNext' => true,
'nextCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
);
$actual = $posts->lampager()
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->limit($posts->selectQuery()->expr('1'))
- ->all();
+ ->paginate();
$this->assertJsonEquals($expected, $actual);
}
@@ -170,10 +170,10 @@ public function testLimitIllegalQueryExpression(): void
$posts = TableRegistry::getTableLocator()->get('Posts');
$posts->addBehavior(LampagerBehavior::class);
$posts->lampager()
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->limit($posts->selectQuery()->expr('1 + 1'))
- ->all();
+ ->paginate();
}
public function testWhere(): void
@@ -186,7 +186,7 @@ public function testWhere(): void
[
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -195,17 +195,17 @@ public function testWhere(): void
'hasNext' => true,
'nextCursor' => [
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
);
$actual = $posts->lampager()
->where(['id >' => 1])
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->limit(1)
- ->all();
+ ->paginate();
$this->assertJsonEquals($expected, $actual);
}
@@ -219,10 +219,10 @@ public function testGroup(): void
$posts = TableRegistry::getTableLocator()->get('Posts');
$posts->addBehavior(LampagerBehavior::class);
$posts->lampager()
- ->orderAsc('modified')
- ->orderAsc('id')
- ->group('modified')
- ->all();
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
+ ->groupBy('modified')
+ ->paginate();
}
public function testUnion(): void
@@ -234,22 +234,22 @@ public function testUnion(): void
$posts = TableRegistry::getTableLocator()->get('Posts');
$posts->addBehavior(LampagerBehavior::class);
$posts->lampager()
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->union($posts->selectQuery()->select())
- ->all();
+ ->paginate();
}
public function testCall(): void
{
- $this->expectException(\ErrorException::class);
- $this->expectExceptionMessage('Instead call `$query->all()->take(...)` instead.');
+ $this->expectException(\BadMethodCallException::class);
+ $this->expectExceptionMessage('Method Lampager\Cake\ORM\Query::take does not exist');
/** @var LampagerBehavior&Table $posts */
$posts = TableRegistry::getTableLocator()->get('Posts');
$posts->addBehavior(LampagerBehavior::class);
$posts->lampager()
- ->orderAsc('id')
+ ->orderByAsc('id')
->take();
}
@@ -260,8 +260,8 @@ public function testDebugInfo(): void
$posts->addBehavior(LampagerBehavior::class);
$actual = $posts->lampager()
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->limit(3)
->__debugInfo();
@@ -275,7 +275,6 @@ public function testDebugInfo(): void
$this->assertArrayHasKey('decorators', $actual);
$this->assertArrayHasKey('executed', $actual);
$this->assertArrayHasKey('hydrate', $actual);
- $this->assertArrayHasKey('buffered', $actual);
$this->assertArrayHasKey('formatters', $actual);
$this->assertArrayHasKey('mapReducers', $actual);
$this->assertArrayHasKey('contain', $actual);
@@ -303,7 +302,6 @@ public function testDebugInfoIncomplete(): void
$this->assertArrayHasKey('decorators', $actual);
$this->assertArrayHasKey('executed', $actual);
$this->assertArrayHasKey('hydrate', $actual);
- $this->assertArrayHasKey('buffered', $actual);
$this->assertArrayHasKey('formatters', $actual);
$this->assertArrayHasKey('mapReducers', $actual);
$this->assertArrayHasKey('contain', $actual);
@@ -323,7 +321,7 @@ public function testCount(callable $factory, int $expected): void
$this->assertSame($expected, $factory($posts));
}
- public function orderProvider(): Generator
+ public static function orderProvider(): Generator
{
yield 'Ascending and ascending' => [
function (Table $posts) {
@@ -332,7 +330,7 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->order([
+ ->orderBy([
'modified' => 'asc',
'id' => 'asc',
]);
@@ -341,15 +339,15 @@ function (Table $posts) {
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -358,7 +356,7 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
],
]
),
@@ -371,7 +369,7 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->order([
+ ->orderBy([
'modified' => 'desc',
'id' => 'desc',
]);
@@ -380,15 +378,15 @@ function (Table $posts) {
[
new Entity([
'id' => 4,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 2,
- 'modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'modified' => new DateTime('2017-01-01 11:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -397,14 +395,14 @@ function (Table $posts) {
'hasNext' => true,
'nextCursor' => [
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
],
]
),
];
}
- public function countProvider(): Generator
+ public static function countProvider(): Generator
{
yield 'Ascending forward start inclusive' => [
function (Table $posts) {
@@ -413,8 +411,8 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->count();
},
3,
@@ -428,8 +426,8 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->count();
},
3,
@@ -442,11 +440,11 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -461,11 +459,11 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -479,8 +477,8 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->count();
},
3,
@@ -494,8 +492,8 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->count();
},
3,
@@ -508,11 +506,11 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -527,11 +525,11 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderAsc('modified')
- ->orderAsc('id')
+ ->orderByAsc('modified')
+ ->orderByAsc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -545,8 +543,8 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->count();
},
3,
@@ -560,8 +558,8 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->count();
},
3,
@@ -574,11 +572,11 @@ function (Table $posts) {
->forward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -593,11 +591,11 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -611,8 +609,8 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->count();
},
3,
@@ -626,8 +624,8 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->count();
},
3,
@@ -640,11 +638,11 @@ function (Table $posts) {
->backward()
->seekable()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
@@ -659,11 +657,11 @@ function (Table $posts) {
->seekable()
->exclusive()
->limit(3)
- ->orderDesc('modified')
- ->orderDesc('id')
+ ->orderByDesc('modified')
+ ->orderByDesc('id')
->cursor([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
])
->count();
},
diff --git a/tests/TestCase/PaginationResultTest.php b/tests/TestCase/PaginationResultTest.php
index 510165d..bf1a88b 100644
--- a/tests/TestCase/PaginationResultTest.php
+++ b/tests/TestCase/PaginationResultTest.php
@@ -5,7 +5,7 @@
namespace Lampager\Cake\Test\TestCase;
use ArrayIterator;
-use Cake\I18n\FrozenTime;
+use Cake\I18n\DateTime;
use Cake\ORM\Entity;
use Generator;
use IteratorAggregate;
@@ -40,29 +40,10 @@ public function tearDown(): void
* @dataProvider arrayProvider
* @dataProvider iteratorAggregateProvider
*/
- public function testIteratorCurrent(array $entities, $records, array $meta): void
+ public function testCurrentPage(array $entities, $records, array $meta): void
{
$actual = new PaginationResult($records, $meta);
-
- $this->assertEquals($entities[0], $actual->current());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(1, $actual->key());
- $this->assertEquals($entities[1], $actual->current());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(2, $actual->key());
- $this->assertEquals($entities[2], $actual->current());
-
- $actual->next();
- $this->assertFalse($actual->valid());
-
- $actual->rewind();
- $this->assertTrue($actual->valid());
- $this->assertEquals(0, $actual->key());
- $this->assertEquals($entities[0], $actual->current());
+ $this->assertEquals(0, $actual->currentPage());
}
/**
@@ -72,29 +53,10 @@ public function testIteratorCurrent(array $entities, $records, array $meta): voi
* @dataProvider arrayProvider
* @dataProvider iteratorAggregateProvider
*/
- public function testIteratorKey(array $entities, $records, array $meta): void
+ public function testPerPage(array $entities, $records, array $meta): void
{
$actual = new PaginationResult($records, $meta);
-
- $this->assertEquals(0, $actual->key());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(1, $actual->key());
- $this->assertEquals($entities[1], $actual->current());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(2, $actual->key());
- $this->assertEquals($entities[2], $actual->current());
-
- $actual->next();
- $this->assertFalse($actual->valid());
-
- $actual->rewind();
- $this->assertTrue($actual->valid());
- $this->assertEquals(0, $actual->key());
- $this->assertEquals($entities[0], $actual->current());
+ $this->assertEquals(3, $actual->perPage());
}
/**
@@ -104,27 +66,10 @@ public function testIteratorKey(array $entities, $records, array $meta): void
* @dataProvider arrayProvider
* @dataProvider iteratorAggregateProvider
*/
- public function testIteratorNext(array $entities, $records, array $meta): void
+ public function testTotalCount(array $entities, $records, array $meta): void
{
$actual = new PaginationResult($records, $meta);
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(1, $actual->key());
- $this->assertEquals($entities[1], $actual->current());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(2, $actual->key());
- $this->assertEquals($entities[2], $actual->current());
-
- $actual->next();
- $this->assertFalse($actual->valid());
-
- $actual->rewind();
- $this->assertTrue($actual->valid());
- $this->assertEquals(0, $actual->key());
- $this->assertEquals($entities[0], $actual->current());
+ $this->assertNull($actual->totalCount());
}
/**
@@ -134,31 +79,49 @@ public function testIteratorNext(array $entities, $records, array $meta): void
* @dataProvider arrayProvider
* @dataProvider iteratorAggregateProvider
*/
- public function testIteratorValid(array $entities, $records, array $meta): void
+ public function testPageCount(array $entities, $records, array $meta): void
{
$actual = new PaginationResult($records, $meta);
+ $this->assertNull($actual->pageCount());
+ }
- $this->assertTrue($actual->valid());
- $this->assertEquals(0, $actual->key());
- $this->assertEquals($entities[0], $actual->current());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(1, $actual->key());
- $this->assertEquals($entities[1], $actual->current());
-
- $actual->next();
- $this->assertTrue($actual->valid());
- $this->assertEquals(2, $actual->key());
- $this->assertEquals($entities[2], $actual->current());
+ /**
+ * @param Entity[] $entities
+ * @param Entity[]|Traversable $records
+ * @param mixed[] $meta
+ * @dataProvider arrayProvider
+ * @dataProvider iteratorAggregateProvider
+ */
+ public function testHasPrevPage(array $entities, $records, array $meta): void
+ {
+ $actual = new PaginationResult($records, $meta);
+ $this->assertEquals((bool)$meta['hasPrevious'], $actual->hasPrevPage());
+ }
- $actual->next();
- $this->assertFalse($actual->valid());
+ /**
+ * @param Entity[] $entities
+ * @param Entity[]|Traversable $records
+ * @param mixed[] $meta
+ * @dataProvider arrayProvider
+ * @dataProvider iteratorAggregateProvider
+ */
+ public function testHasNextPage(array $entities, $records, array $meta): void
+ {
+ $actual = new PaginationResult($records, $meta);
+ $this->assertEquals((bool)$meta['hasNext'], $actual->hasNextPage());
+ }
- $actual->rewind();
- $this->assertTrue($actual->valid());
- $this->assertEquals(0, $actual->key());
- $this->assertEquals($entities[0], $actual->current());
+ /**
+ * @param Entity[] $entities
+ * @param Entity[]|Traversable $records
+ * @param mixed[] $meta
+ * @dataProvider arrayProvider
+ * @dataProvider iteratorAggregateProvider
+ */
+ public function testItems(array $entities, $records, array $meta): void
+ {
+ $actual = new PaginationResult($records, $meta);
+ $this->assertEquals(iterator_to_array($records), iterator_to_array($actual->items()));
}
/**
@@ -168,10 +131,16 @@ public function testIteratorValid(array $entities, $records, array $meta): void
* @dataProvider arrayProvider
* @dataProvider iteratorAggregateProvider
*/
- public function testJsonSerialize(array $entities, $records, array $meta, string $expected): void
+ public function testPagingParam(array $entities, $records, array $meta): void
{
- $actual = json_encode(new PaginationResult($records, $meta));
- $this->assertJsonStringEqualsJsonString($expected, $actual);
+ $actual = new PaginationResult($records, $meta);
+ $this->assertEquals(count($entities), $actual->pagingParam('count'));
+ $this->assertNull($actual->pagingParam('totalCount'));
+ $this->assertEquals($meta['limit'], $actual->pagingParam('perPage'));
+ $this->assertNull($actual->pagingParam('pageCount'));
+ $this->assertEquals(0, $actual->pagingParam('currentPage'));
+ $this->assertEquals($meta['hasPrevious'], $actual->pagingParam('hasPrevPage'));
+ $this->assertEquals($meta['hasNext'], $actual->pagingParam('hasNextPage'));
}
/**
@@ -181,11 +150,10 @@ public function testJsonSerialize(array $entities, $records, array $meta, string
* @dataProvider arrayProvider
* @dataProvider iteratorAggregateProvider
*/
- public function testSerializeAndUnserialize(array $entities, $records, array $meta): void
+ public function testJsonSerialize(array $entities, $records, array $meta, string $expected): void
{
- $actual = unserialize(serialize(new PaginationResult($records, $meta)));
- $expected = new PaginationResult($records, $meta);
- $this->assertJsonEquals($expected, $actual);
+ $actual = json_encode(new PaginationResult($records, $meta));
+ $this->assertJsonStringEqualsJsonString($expected, $actual);
}
/**
@@ -226,51 +194,35 @@ public function testPublicProperties(array $entities, $records, array $meta): vo
$this->assertEquals($meta['nextCursor'], $paginationResult->nextCursor);
}
- /**
- * @param Entity[] $entities
- * @param Entity[]|Traversable $records
- * @param mixed[] $meta
- * @dataProvider arrayProvider
- * @dataProvider iteratorAggregateProvider
- */
- public function testUndefinedProperties(array $entities, $records, array $meta): void
- {
- $this->expectException(\ErrorException::class);
- $this->expectExceptionMessageMatches('/^Undefined property via __get\(\): undefinedProperty/');
-
- $paginationResult = new PaginationResult($records, $meta);
- $paginationResult->undefinedProperty;
- }
-
- public function arrayProvider(): Generator
+ public static function arrayProvider(): Generator
{
yield 'Array iteration' => [
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
[
@@ -279,8 +231,9 @@ public function arrayProvider(): Generator
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 2,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
+ 'limit' => 3,
],
'{
"records": [
@@ -311,29 +264,29 @@ public function arrayProvider(): Generator
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
new ArrayIterator([
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
]),
[
@@ -342,8 +295,9 @@ public function arrayProvider(): Generator
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 2,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
+ 'limit' => 3,
],
'{
"records": [
@@ -371,21 +325,21 @@ public function arrayProvider(): Generator
];
}
- public function iteratorAggregateProvider(): Generator
+ public static function iteratorAggregateProvider(): Generator
{
yield 'IteratorAggregate iteration' => [
[
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
],
new class implements IteratorAggregate {
@@ -394,15 +348,15 @@ public function getIterator(): Traversable
return new ArrayIterator([
new Entity([
'id' => 1,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 3,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
new Entity([
'id' => 5,
- 'modified' => new FrozenTime('2017-01-01 10:00:00'),
+ 'modified' => new DateTime('2017-01-01 10:00:00'),
]),
]);
}
@@ -413,8 +367,9 @@ public function getIterator(): Traversable
'hasNext' => true,
'nextCursor' => [
'Posts.id' => 2,
- 'Posts.modified' => new FrozenTime('2017-01-01 11:00:00'),
+ 'Posts.modified' => new DateTime('2017-01-01 11:00:00'),
],
+ 'limit' => 3,
],
'{
"records": [
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 39875ed..f906826 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -2,16 +2,19 @@
declare(strict_types=1);
+use function Cake\Core\env;
+use Cake\Core\Configure;
use Cake\Database\Connection;
use Cake\Datasource\ConnectionManager;
use Cake\TestSuite\Fixture\SchemaLoader;
use Lampager\Cake\Database\Driver\Sqlite;
-require_once __DIR__ . '/../vendor/cakephp/cakephp/src/basics.php';
require_once __DIR__ . '/../vendor/autoload.php';
define('ROOT', dirname(__DIR__));
+Configure::write('App.encoding', 'utf-8');
+
ConnectionManager::setConfig('test', [
'url' => env('DB_DSN') ?: 'sqlite:///:memory:?className=' . Connection::class . '&driver=' . Sqlite::class . '"eIdentifiers=true',
]);