From eedd5d4ff1470d17d13c2dc112d5fb51abccb363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Wed, 14 Jan 2026 12:11:19 +0400 Subject: [PATCH 1/3] configs + deps --- .github/workflows/rector-cs.yml | 27 +++++++++++ .github/workflows/rector.yml | 24 ---------- .gitignore | 4 ++ .php-cs-fixer.dist.php | 34 +++++++++++++ .styleci.yml | 85 --------------------------------- composer.json | 1 + 6 files changed, 66 insertions(+), 109 deletions(-) create mode 100644 .github/workflows/rector-cs.yml delete mode 100644 .github/workflows/rector.yml create mode 100644 .php-cs-fixer.dist.php delete mode 100644 .styleci.yml diff --git a/.github/workflows/rector-cs.yml b/.github/workflows/rector-cs.yml new file mode 100644 index 0000000..6424c2a --- /dev/null +++ b/.github/workflows/rector-cs.yml @@ -0,0 +1,27 @@ +name: Rector + PHP CS Fixer + +on: + pull_request_target: + paths: + - 'src/**' + - 'tests/**' + - '.github/workflows/rector-cs.yml' + - 'composer.json' + - 'rector.php' + - '.php-cs-fixer.dist.php' + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + rector: + uses: yiisoft/actions/.github/workflows/rector-cs.yml@master + secrets: + token: ${{ secrets.YIISOFT_GITHUB_TOKEN }} + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + php: '8.1' diff --git a/.github/workflows/rector.yml b/.github/workflows/rector.yml deleted file mode 100644 index 5d6931d..0000000 --- a/.github/workflows/rector.yml +++ /dev/null @@ -1,24 +0,0 @@ -on: - pull_request_target: - paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.gitattributes' - - 'infection.json.dist' - - 'psalm.xml' - -name: rector - -jobs: - rector: - uses: yiisoft/actions/.github/workflows/rector.yml@master - secrets: - token: ${{ secrets.YIISOFT_GITHUB_TOKEN }} - with: - repository: ${{ github.event.pull_request.head.repo.full_name }} - os: >- - ['ubuntu-latest'] - php: >- - ['8.4'] diff --git a/.gitignore b/.gitignore index c913400..d3b3a3d 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,7 @@ composer.phar /phpunit.phar /phpunit.xml /.phpunit.cache + +# PHP CS Fixer +/.php-cs-fixer.cache +/.php-cs-fixer.php diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..e9cea90 --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,34 @@ +in([ + __DIR__ . '/src', + __DIR__ . '/tests', +]); + +return (new Config()) + ->setRiskyAllowed(true) + ->setParallelConfig(ParallelConfigFactory::detect()) + ->setRules([ + '@PER-CS3.0' => true, + 'no_unused_imports' => true, + 'ordered_class_elements' => true, + 'class_attributes_separation' => ['elements' => ['method' => 'one']], + 'declare_strict_types' => true, + 'native_function_invocation' => true, + 'native_constant_invocation' => true, + 'fully_qualified_strict_types' => [ + 'import_symbols' => true + ], + 'global_namespace_import' => [ + 'import_classes' => true, + 'import_constants' => true, + 'import_functions' => true, + ], + ]) + ->setFinder($finder); diff --git a/.styleci.yml b/.styleci.yml deleted file mode 100644 index e121039..0000000 --- a/.styleci.yml +++ /dev/null @@ -1,85 +0,0 @@ -preset: psr12 -risky: true - -version: 8.2 - -finder: - exclude: - - docs - - vendor - -enabled: - - alpha_ordered_traits - - array_indentation - - array_push - - combine_consecutive_issets - - combine_consecutive_unsets - - combine_nested_dirname - - declare_strict_types - - dir_constant - - fully_qualified_strict_types - - function_to_constant - - hash_to_slash_comment - - is_null - - logical_operators - - magic_constant_casing - - magic_method_casing - - method_separation - - modernize_types_casting - - native_function_casing - - native_function_type_declaration_casing - - no_alias_functions - - no_empty_comment - - no_empty_phpdoc - - no_empty_statement - - no_extra_block_blank_lines - - no_short_bool_cast - - no_superfluous_elseif - - no_unneeded_control_parentheses - - no_unneeded_curly_braces - - no_unneeded_final_method - - no_unset_cast - - no_unused_imports - - no_unused_lambda_imports - - no_useless_else - - no_useless_return - - normalize_index_brace - - php_unit_dedicate_assert - - php_unit_dedicate_assert_internal_type - - php_unit_expectation - - php_unit_mock - - php_unit_mock_short_will_return - - php_unit_namespaced - - php_unit_no_expectation_annotation - - phpdoc_no_empty_return - - phpdoc_no_useless_inheritdoc - - phpdoc_order - - phpdoc_property - - phpdoc_scalar - - phpdoc_singular_inheritdoc - - phpdoc_trim - - phpdoc_trim_consecutive_blank_line_separation - - phpdoc_type_to_var - - phpdoc_types - - phpdoc_types_order - - print_to_echo - - regular_callable_call - - return_assignment - - self_accessor - - self_static_accessor - - set_type_to_cast - - short_array_syntax - - short_list_syntax - - simplified_if_return - - single_quote - - standardize_not_equals - - ternary_to_null_coalescing - - trailing_comma_in_multiline_array - - unalign_double_arrow - - unalign_equals - - empty_loop_body_braces - - integer_literal_case - - union_type_without_spaces - -disabled: - - function_declaration diff --git a/composer.json b/composer.json index 7e9684d..39bd9c7 100644 --- a/composer.json +++ b/composer.json @@ -37,6 +37,7 @@ "yiisoft/data": "^2.0" }, "require-dev": { + "friendsofphp/php-cs-fixer": "^3.92.5", "maglnet/composer-require-checker": "^4.7", "phpunit/phpunit": "^10.5", "rector/rector": "^2.1.5", From 4bbcd9088471b9621c948e3ce7ac4c67792a40d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Wed, 14 Jan 2026 12:12:51 +0400 Subject: [PATCH 2/3] fix CS --- src/Reader/Cache/CachedCollection.php | 4 +- src/Reader/Cache/CachedCount.php | 4 +- src/Reader/EntityReader.php | 64 +++--- src/Reader/FilterHandler/AllHandler.php | 5 +- src/Reader/FilterHandler/AndXHandler.php | 5 +- src/Reader/FilterHandler/BetweenHandler.php | 5 +- src/Reader/FilterHandler/EqualsHandler.php | 5 +- .../FilterHandler/EqualsNullHandler.php | 5 +- .../FilterHandler/GreaterThanHandler.php | 5 +- .../GreaterThanOrEqualHandler.php | 5 +- src/Reader/FilterHandler/InHandler.php | 5 +- src/Reader/FilterHandler/LessThanHandler.php | 5 +- .../FilterHandler/LessThanOrEqualHandler.php | 5 +- .../LikeHandler/BaseLikeHandler.php | 5 +- .../LikeHandler/MysqlLikeHandler.php | 3 +- .../LikeHandler/PostgresLikeHandler.php | 3 +- .../LikeHandler/SqlServerLikeHandler.php | 3 +- .../LikeHandler/SqliteLikeHandler.php | 3 +- src/Reader/FilterHandler/NoneHandler.php | 5 +- src/Reader/FilterHandler/NotHandler.php | 9 +- src/Reader/FilterHandler/OrXHandler.php | 5 +- src/Writer/EntityWriter.php | 9 +- .../NotSupportedFilterExceptionTest.php | 2 + .../Base/Reader/BaseEntityReaderTestCase.php | 2 + .../BaseReaderWithAllTestCase.php | 2 +- .../BaseReaderWithAndXTestCase.php | 2 + .../BaseReaderWithNotTestCase.php | 2 + .../BaseReaderWithOrXTestCase.php | 4 +- .../Base/Writer/BaseEntityWriterTestCase.php | 4 +- tests/Feature/DataTrait.php | 192 +++++++++--------- .../ReaderWithGreaterThanOrEqualTest.php | 3 +- .../ReaderWithFilter/ReaderWithLikeTest.php | 2 +- .../ReaderWithFilter/ReaderWithLikeTest.php | 2 +- tests/Support/NotSupportedFilter.php | 4 +- tests/Support/StubFilter.php | 4 +- .../Reader/Cache/CachedCollectionTest.php | 10 +- tests/Unit/Reader/Cache/CachedCountTest.php | 3 +- tests/Unit/Reader/EntityReaderTest.php | 8 +- tests/bootstrap.php | 2 +- 39 files changed, 226 insertions(+), 189 deletions(-) diff --git a/src/Reader/Cache/CachedCollection.php b/src/Reader/Cache/CachedCollection.php index 0add230..e283957 100644 --- a/src/Reader/Cache/CachedCollection.php +++ b/src/Reader/Cache/CachedCollection.php @@ -4,6 +4,8 @@ namespace Yiisoft\Data\Cycle\Reader\Cache; +use Generator; + final class CachedCollection { private ?iterable $collection = null; @@ -26,7 +28,7 @@ public function getCollection(): ?iterable return $this->collection; } - public function getGenerator(): \Generator + public function getGenerator(): Generator { if ($this->collection !== null) { yield from $this->collection; diff --git a/src/Reader/Cache/CachedCount.php b/src/Reader/Cache/CachedCount.php index eb822d0..6aec74b 100644 --- a/src/Reader/Cache/CachedCount.php +++ b/src/Reader/Cache/CachedCount.php @@ -13,9 +13,7 @@ final class CachedCount */ private ?int $count = null; - public function __construct(private ?Countable $collection) - { - } + public function __construct(private ?Countable $collection) {} /** * @psalm-internal Yiisoft\Data\Cycle\Reader diff --git a/src/Reader/EntityReader.php b/src/Reader/EntityReader.php index a20b938..8d3d34e 100644 --- a/src/Reader/EntityReader.php +++ b/src/Reader/EntityReader.php @@ -18,6 +18,12 @@ use Yiisoft\Data\Reader\Sort; use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection; use Yiisoft\Data\Cycle\Reader\Cache\CachedCount; +use Override; + +use function array_key_exists; +use function is_int; + +use const SORT_DESC; /** * @template TKey as array-key @@ -78,7 +84,7 @@ public function __construct(Select|SelectQuery $query, array $extraFilterHandler $this->filter = new All(); } - #[\Override] + #[Override] public function getSort(): ?Sort { return $this->sorting; @@ -87,7 +93,7 @@ public function getSort(): ?Sort /** * @psalm-mutation-free */ - #[\Override] + #[Override] public function withLimit(?int $limit): static { /** @psalm-suppress DocblockTypeContradiction */ @@ -105,7 +111,7 @@ public function withLimit(?int $limit): static /** * @psalm-mutation-free */ - #[\Override] + #[Override] public function withOffset(int $offset): static { $new = clone $this; @@ -119,7 +125,7 @@ public function withOffset(int $offset): static /** * @psalm-mutation-free */ - #[\Override] + #[Override] public function withSort(?Sort $sort): static { $new = clone $this; @@ -134,7 +140,7 @@ public function withSort(?Sort $sort): static /** * @psalm-mutation-free */ - #[\Override] + #[Override] public function withFilter(FilterInterface $filter): static { $new = clone $this; @@ -148,13 +154,13 @@ public function withFilter(FilterInterface $filter): static return $new; } - #[\Override] + #[Override] public function count(): int { return $this->countCache->getCount(); } - #[\Override] + #[Override] public function read(): iterable { if ($this->itemsCache->getCollection() === null) { @@ -164,8 +170,8 @@ public function read(): iterable return $this->itemsCache->getCollection(); } - #[\Override] - public function readOne(): null|array|object + #[Override] + public function readOne(): array|object|null { if (!$this->oneItemCache->isCollected()) { $item = $this->itemsCache->isCollected() @@ -182,7 +188,7 @@ public function readOne(): null|array|object /** * Get Iterator without caching */ - #[\Override] + #[Override] public function getIterator(): Generator { yield from $this->itemsCache->getCollection() ?? $this->buildSelectQuery()->getIterator(); @@ -191,7 +197,25 @@ public function getIterator(): Generator public function getSql(): string { $query = $this->buildSelectQuery(); - return (string)($query instanceof Select ? $query->buildQuery() : $query); + return (string) ($query instanceof Select ? $query->buildQuery() : $query); + } + + #[Override] + public function getFilter(): FilterInterface + { + return $this->filter; + } + + #[Override] + public function getLimit(): ?int + { + return $this->limit; + } + + #[Override] + public function getOffset(): int + { + return $this->offset; } private function setFilterHandlers(QueryBuilderFilterHandler ...$filterHandlers): void @@ -254,22 +278,4 @@ private function normalizeSortingCriteria(array $criteria): array return $criteria; } - - #[\Override] - public function getFilter(): FilterInterface - { - return $this->filter; - } - - #[\Override] - public function getLimit(): ?int - { - return $this->limit; - } - - #[\Override] - public function getOffset(): int - { - return $this->offset; - } } diff --git a/src/Reader/FilterHandler/AllHandler.php b/src/Reader/FilterHandler/AllHandler.php index 6a3af5b..e7b24c4 100644 --- a/src/Reader/FilterHandler/AllHandler.php +++ b/src/Reader/FilterHandler/AllHandler.php @@ -10,16 +10,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\All; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class AllHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return All::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var All $filter */ diff --git a/src/Reader/FilterHandler/AndXHandler.php b/src/Reader/FilterHandler/AndXHandler.php index 029d8b2..6dfcbfe 100644 --- a/src/Reader/FilterHandler/AndXHandler.php +++ b/src/Reader/FilterHandler/AndXHandler.php @@ -10,16 +10,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\AndX; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class AndXHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return AndX::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var AndX $filter */ diff --git a/src/Reader/FilterHandler/BetweenHandler.php b/src/Reader/FilterHandler/BetweenHandler.php index 07124dd..a2361e5 100644 --- a/src/Reader/FilterHandler/BetweenHandler.php +++ b/src/Reader/FilterHandler/BetweenHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\Between; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class BetweenHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return Between::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Between $filter */ diff --git a/src/Reader/FilterHandler/EqualsHandler.php b/src/Reader/FilterHandler/EqualsHandler.php index 501b492..1cc1229 100644 --- a/src/Reader/FilterHandler/EqualsHandler.php +++ b/src/Reader/FilterHandler/EqualsHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\Equals; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class EqualsHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return Equals::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Equals $filter */ diff --git a/src/Reader/FilterHandler/EqualsNullHandler.php b/src/Reader/FilterHandler/EqualsNullHandler.php index 1769616..fd9059d 100644 --- a/src/Reader/FilterHandler/EqualsNullHandler.php +++ b/src/Reader/FilterHandler/EqualsNullHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\EqualsNull; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class EqualsNullHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return EqualsNull::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var EqualsNull $filter */ diff --git a/src/Reader/FilterHandler/GreaterThanHandler.php b/src/Reader/FilterHandler/GreaterThanHandler.php index ce240ad..0fc85e4 100644 --- a/src/Reader/FilterHandler/GreaterThanHandler.php +++ b/src/Reader/FilterHandler/GreaterThanHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\GreaterThan; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class GreaterThanHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return GreaterThan::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var GreaterThan $filter */ diff --git a/src/Reader/FilterHandler/GreaterThanOrEqualHandler.php b/src/Reader/FilterHandler/GreaterThanOrEqualHandler.php index 1c5cf17..22abdb6 100644 --- a/src/Reader/FilterHandler/GreaterThanOrEqualHandler.php +++ b/src/Reader/FilterHandler/GreaterThanOrEqualHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\GreaterThanOrEqual; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class GreaterThanOrEqualHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return GreaterThanOrEqual::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var GreaterThanOrEqual $filter */ diff --git a/src/Reader/FilterHandler/InHandler.php b/src/Reader/FilterHandler/InHandler.php index e198d71..fd521d8 100644 --- a/src/Reader/FilterHandler/InHandler.php +++ b/src/Reader/FilterHandler/InHandler.php @@ -8,16 +8,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\In; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class InHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return In::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var In $filter */ diff --git a/src/Reader/FilterHandler/LessThanHandler.php b/src/Reader/FilterHandler/LessThanHandler.php index b428744..43d8d3c 100644 --- a/src/Reader/FilterHandler/LessThanHandler.php +++ b/src/Reader/FilterHandler/LessThanHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\LessThan; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class LessThanHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return LessThan::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var LessThan $filter */ diff --git a/src/Reader/FilterHandler/LessThanOrEqualHandler.php b/src/Reader/FilterHandler/LessThanOrEqualHandler.php index 4041af9..83ddc85 100644 --- a/src/Reader/FilterHandler/LessThanOrEqualHandler.php +++ b/src/Reader/FilterHandler/LessThanOrEqualHandler.php @@ -7,16 +7,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\LessThanOrEqual; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class LessThanOrEqualHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return LessThanOrEqual::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var LessThanOrEqual $filter */ diff --git a/src/Reader/FilterHandler/LikeHandler/BaseLikeHandler.php b/src/Reader/FilterHandler/LikeHandler/BaseLikeHandler.php index 6ad5d2a..027d416 100644 --- a/src/Reader/FilterHandler/LikeHandler/BaseLikeHandler.php +++ b/src/Reader/FilterHandler/LikeHandler/BaseLikeHandler.php @@ -8,6 +8,7 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\Like; use Yiisoft\Data\Reader\Filter\LikeMode; +use Override; abstract class BaseLikeHandler implements QueryBuilderFilterHandler { @@ -17,7 +18,7 @@ abstract class BaseLikeHandler implements QueryBuilderFilterHandler '\\' => '\\\\', ]; - #[\Override] + #[Override] public function getFilterClass(): string { return Like::class; @@ -25,7 +26,7 @@ public function getFilterClass(): string protected function prepareValue(string|Stringable $value, LikeMode $mode): string { - $value = strtr((string)$value, $this->escapingReplacements); + $value = strtr((string) $value, $this->escapingReplacements); return match ($mode) { LikeMode::Contains => '%' . $value . '%', LikeMode::StartsWith => $value . '%', diff --git a/src/Reader/FilterHandler/LikeHandler/MysqlLikeHandler.php b/src/Reader/FilterHandler/LikeHandler/MysqlLikeHandler.php index fd64ad8..5e5fa2a 100644 --- a/src/Reader/FilterHandler/LikeHandler/MysqlLikeHandler.php +++ b/src/Reader/FilterHandler/LikeHandler/MysqlLikeHandler.php @@ -6,10 +6,11 @@ use Yiisoft\Data\Reader\Filter\Like; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class MysqlLikeHandler extends BaseLikeHandler { - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Like $filter */ diff --git a/src/Reader/FilterHandler/LikeHandler/PostgresLikeHandler.php b/src/Reader/FilterHandler/LikeHandler/PostgresLikeHandler.php index a140873..a5a06e6 100644 --- a/src/Reader/FilterHandler/LikeHandler/PostgresLikeHandler.php +++ b/src/Reader/FilterHandler/LikeHandler/PostgresLikeHandler.php @@ -6,10 +6,11 @@ use Yiisoft\Data\Reader\Filter\Like; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class PostgresLikeHandler extends BaseLikeHandler { - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Like $filter */ diff --git a/src/Reader/FilterHandler/LikeHandler/SqlServerLikeHandler.php b/src/Reader/FilterHandler/LikeHandler/SqlServerLikeHandler.php index 2199e8a..ff875c7 100644 --- a/src/Reader/FilterHandler/LikeHandler/SqlServerLikeHandler.php +++ b/src/Reader/FilterHandler/LikeHandler/SqlServerLikeHandler.php @@ -7,6 +7,7 @@ use Yiisoft\Data\Cycle\Exception\NotSupportedFilterOptionException; use Yiisoft\Data\Reader\Filter\Like; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class SqlServerLikeHandler extends BaseLikeHandler { @@ -15,7 +16,7 @@ public function __construct() unset($this->escapingReplacements['\\']); } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Like $filter */ diff --git a/src/Reader/FilterHandler/LikeHandler/SqliteLikeHandler.php b/src/Reader/FilterHandler/LikeHandler/SqliteLikeHandler.php index c363557..3786d96 100644 --- a/src/Reader/FilterHandler/LikeHandler/SqliteLikeHandler.php +++ b/src/Reader/FilterHandler/LikeHandler/SqliteLikeHandler.php @@ -7,6 +7,7 @@ use Yiisoft\Data\Cycle\Exception\NotSupportedFilterOptionException; use Yiisoft\Data\Reader\Filter\Like; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class SqliteLikeHandler extends BaseLikeHandler { @@ -15,7 +16,7 @@ public function __construct() unset($this->escapingReplacements['\\']); } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Like $filter */ diff --git a/src/Reader/FilterHandler/NoneHandler.php b/src/Reader/FilterHandler/NoneHandler.php index 8260b75..d6f0bfe 100644 --- a/src/Reader/FilterHandler/NoneHandler.php +++ b/src/Reader/FilterHandler/NoneHandler.php @@ -10,16 +10,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\None; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class NoneHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return None::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var None $filter */ diff --git a/src/Reader/FilterHandler/NotHandler.php b/src/Reader/FilterHandler/NotHandler.php index 65cb483..37ce2ee 100644 --- a/src/Reader/FilterHandler/NotHandler.php +++ b/src/Reader/FilterHandler/NotHandler.php @@ -19,16 +19,17 @@ use Yiisoft\Data\Reader\Filter\Not; use Yiisoft\Data\Reader\Filter\OrX; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class NotHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return Not::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var Not $filter */ @@ -62,13 +63,13 @@ private function convertFilter(FilterInterface $filter, int $notCount = 1): Filt return match ($filter::class) { AndX::class => new OrX( ...array_map( - static fn (FilterInterface $subFilter): FilterInterface => $handler->convertFilter($subFilter), + static fn(FilterInterface $subFilter): FilterInterface => $handler->convertFilter($subFilter), $filter->filters, ), ), OrX::class => new AndX( ...array_map( - static fn (FilterInterface $subFilter): FilterInterface => $handler->convertFilter($subFilter), + static fn(FilterInterface $subFilter): FilterInterface => $handler->convertFilter($subFilter), $filter->filters, ), ), diff --git a/src/Reader/FilterHandler/OrXHandler.php b/src/Reader/FilterHandler/OrXHandler.php index f063ce7..e79da00 100644 --- a/src/Reader/FilterHandler/OrXHandler.php +++ b/src/Reader/FilterHandler/OrXHandler.php @@ -10,16 +10,17 @@ use Yiisoft\Data\Cycle\Reader\QueryBuilderFilterHandler; use Yiisoft\Data\Reader\Filter\OrX; use Yiisoft\Data\Reader\FilterInterface; +use Override; final class OrXHandler implements QueryBuilderFilterHandler { - #[\Override] + #[Override] public function getFilterClass(): string { return OrX::class; } - #[\Override] + #[Override] public function getAsWhereArguments(FilterInterface $filter, array $handlers): array { /** @var OrX $filter */ diff --git a/src/Writer/EntityWriter.php b/src/Writer/EntityWriter.php index 5c0575c..d6bc72e 100644 --- a/src/Writer/EntityWriter.php +++ b/src/Writer/EntityWriter.php @@ -7,17 +7,16 @@ use Cycle\ORM\EntityManagerInterface; use Throwable; use Yiisoft\Data\Writer\DataWriterInterface; +use Override; final class EntityWriter implements DataWriterInterface { - public function __construct(private EntityManagerInterface $entityManager) - { - } + public function __construct(private EntityManagerInterface $entityManager) {} /** * @throws Throwable */ - #[\Override] + #[Override] public function write(iterable $items): void { foreach ($items as $entity) { @@ -26,7 +25,7 @@ public function write(iterable $items): void $this->entityManager->run(); } - #[\Override] + #[Override] public function delete(iterable $items): void { foreach ($items as $entity) { diff --git a/tests/Exception/NotSupportedFilterExceptionTest.php b/tests/Exception/NotSupportedFilterExceptionTest.php index 301a20a..233c9c8 100644 --- a/tests/Exception/NotSupportedFilterExceptionTest.php +++ b/tests/Exception/NotSupportedFilterExceptionTest.php @@ -8,6 +8,8 @@ use Yiisoft\Data\Cycle\Exception\NotSupportedFilterException; use Yiisoft\Data\Reader\Filter\All; +use function sprintf; + final class NotSupportedFilterExceptionTest extends TestCase { public function testBase(): void diff --git a/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php b/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php index 7ca1485..a03c679 100644 --- a/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php +++ b/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php @@ -22,6 +22,8 @@ use function iterator_to_array; use function preg_replace; +use function count; +use function sprintf; abstract class BaseEntityReaderTestCase extends TestCase { diff --git a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAllTestCase.php b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAllTestCase.php index d964e1e..91671de 100644 --- a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAllTestCase.php +++ b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAllTestCase.php @@ -50,7 +50,7 @@ public function testWithReader(): void $expectedItem['number'], $actualItem['number'], 0.01, - "The balance for user ID {$id} is not as expected." + "The balance for user ID {$id} is not as expected.", ); } } diff --git a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAndXTestCase.php b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAndXTestCase.php index f8ff9c9..3a2485d 100644 --- a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAndXTestCase.php +++ b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithAndXTestCase.php @@ -11,6 +11,8 @@ use Yiisoft\Data\Reader\Filter\AndX; use Yiisoft\Data\Reader\Filter\Equals; +use function sprintf; + abstract class BaseReaderWithAndXTestCase extends \Yiisoft\Data\Tests\Common\Reader\ReaderWithFilter\BaseReaderWithAndXTestCase { use DataTrait; diff --git a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithNotTestCase.php b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithNotTestCase.php index 7424b5b..0eb956a 100644 --- a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithNotTestCase.php +++ b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithNotTestCase.php @@ -10,6 +10,8 @@ use Yiisoft\Data\Cycle\Tests\Support\NotSupportedFilter; use Yiisoft\Data\Reader\Filter\Not; +use function sprintf; + abstract class BaseReaderWithNotTestCase extends \Yiisoft\Data\Tests\Common\Reader\ReaderWithFilter\BaseReaderWithNotTestCase { use DataTrait; diff --git a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithOrXTestCase.php b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithOrXTestCase.php index f14481d..e8e8571 100644 --- a/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithOrXTestCase.php +++ b/tests/Feature/Base/Reader/ReaderWithFilter/BaseReaderWithOrXTestCase.php @@ -11,6 +11,8 @@ use Yiisoft\Data\Reader\Filter\Equals; use Yiisoft\Data\Reader\Filter\OrX; +use function sprintf; + abstract class BaseReaderWithOrXTestCase extends \Yiisoft\Data\Tests\Common\Reader\ReaderWithFilter\BaseReaderWithOrXTestCase { use DataTrait; @@ -58,7 +60,7 @@ public function testFilterSupportSelectQuery(): void $expectedItem['balance'], $actualItem['balance'], 0.01, - "The balance for user ID {$id} is not as expected." + "The balance for user ID {$id} is not as expected.", ); } } diff --git a/tests/Feature/Base/Writer/BaseEntityWriterTestCase.php b/tests/Feature/Base/Writer/BaseEntityWriterTestCase.php index b12285f..10499ab 100644 --- a/tests/Feature/Base/Writer/BaseEntityWriterTestCase.php +++ b/tests/Feature/Base/Writer/BaseEntityWriterTestCase.php @@ -38,11 +38,11 @@ public function testDelete(): void $writer = new EntityWriter($this->createEntityManager()); $reader = new EntityReader($this->select('user')->where('number', 'in', [1, 2, 3])); // Iterator doesn't use cache - $entities = \iterator_to_array($reader->getIterator()); + $entities = iterator_to_array($reader->getIterator()); $writer->delete($entities); $this->assertCount(3, $entities); - $this->assertEquals([], \iterator_to_array($reader->getIterator())); + $this->assertEquals([], iterator_to_array($reader->getIterator())); } } diff --git a/tests/Feature/DataTrait.php b/tests/Feature/DataTrait.php index a9fd9e6..8c113db 100644 --- a/tests/Feature/DataTrait.php +++ b/tests/Feature/DataTrait.php @@ -30,6 +30,8 @@ use Yiisoft\Data\Cycle\Reader\EntityReader; use Yiisoft\Data\Reader\DataReaderInterface; +use function is_object; + trait DataTrait { public static ?string $DRIVER = null; @@ -55,66 +57,6 @@ protected function tearDown(): void $this->dbal = null; } - private function createDbal(): DatabaseProviderInterface - { - $databases = [ - 'default' => ['connection' => static::$DRIVER ?? 'sqlite'], - 'sqlite' => ['connection' => 'sqlite'], - ]; - $connections = [ - 'sqlite' => new SQLiteDriverConfig( - connection: new MemoryConnectionConfig(), - queryCache: true, - ), - ]; - - if (getenv('CYCLE_MYSQL_DATABASE', local_only: true) !== false) { - $databases['mysql'] = ['connection' => 'mysql']; - $connections['mysql'] = new MySQLDriverConfig( - connection: new MySQLTcpConnectionConfig( - database: getenv('CYCLE_MYSQL_DATABASE'), - host: getenv('CYCLE_MYSQL_HOST'), - port: (int) getenv('CYCLE_MYSQL_PORT'), - user: getenv('CYCLE_MYSQL_USER'), - password: getenv('CYCLE_MYSQL_PASSWORD'), - ), - queryCache: true, - ); - } - - if (getenv('CYCLE_PGSQL_DATABASE', local_only: true) !== false) { - $databases['pgsql'] = ['connection' => 'pgsql']; - $connections['pgsql'] = new PostgresDriverConfig( - connection: new PostgresTcpConnectionConfig( - database: getenv('CYCLE_PGSQL_DATABASE'), - host: getenv('CYCLE_PGSQL_HOST'), - port: (int) getenv('CYCLE_PGSQL_PORT'), - user: getenv('CYCLE_PGSQL_USER'), - password: getenv('CYCLE_PGSQL_PASSWORD'), - ), - schema: 'public', - queryCache: true, - ); - } - - if (getenv('CYCLE_MSSQL_DATABASE', local_only: true) !== false) { - $databases['mssql'] = ['connection' => 'mssql']; - $connections['mssql'] = new SQLServerDriverConfig( - connection: new SQLServerTcpConnectionConfig( - database: getenv('CYCLE_MSSQL_DATABASE'), - host: getenv('CYCLE_MSSQL_HOST'), - port: (int) getenv('CYCLE_MSSQL_PORT'), - trustServerCertificate: true, - user: getenv('CYCLE_MSSQL_USER'), - password: getenv('CYCLE_MSSQL_PASSWORD'), - ), - queryCache: true, - ); - } - - return new DatabaseManager(new DatabaseConfig(['databases' => $databases, 'connections' => $connections])); - } - protected function dropDatabase(): void { foreach ($this->dbal->database()->getTables() as $table) { @@ -172,46 +114,11 @@ protected function getOrm(): ORMInterface return $this->orm; } - private function createOrm(): ORMInterface - { - return new ORM(factory: new Factory($this->dbal), schema: $this->createSchema()); - } - protected function getDatabase(): DatabaseInterface { return $this->dbal->database(); } - /** - * Cycle ORM Schema - */ - private function createSchema(): SchemaInterface - { - return new Schema([ - 'user' => [ - SchemaInterface::MAPPER => StdMapper::class, - SchemaInterface::DATABASE => 'default', - SchemaInterface::TABLE => 'user', - SchemaInterface::PRIMARY_KEY => 'id', - SchemaInterface::COLUMNS => [ - // property => column - 'id' => 'id', - 'number' => 'number', - 'email' => 'email', - 'balance' => 'balance', - 'born_at' => 'born_at', - ], - SchemaInterface::TYPECAST => [ - 'id' => 'int', - 'number' => 'int', - 'balance' => 'float', - 'born_at' => 'datetime', - ], - SchemaInterface::RELATIONS => [], - ], - ]); - } - protected function createEntityManager(): EntityManagerInterface { return new EntityManager($this->orm); @@ -246,4 +153,99 @@ protected function assertFixtures(array $expectedFixtureIndexes, array $actualFi $this->assertSame($expectedFixtures, $processedActualFixtures); } + + private function createDbal(): DatabaseProviderInterface + { + $databases = [ + 'default' => ['connection' => static::$DRIVER ?? 'sqlite'], + 'sqlite' => ['connection' => 'sqlite'], + ]; + $connections = [ + 'sqlite' => new SQLiteDriverConfig( + connection: new MemoryConnectionConfig(), + queryCache: true, + ), + ]; + + if (getenv('CYCLE_MYSQL_DATABASE', local_only: true) !== false) { + $databases['mysql'] = ['connection' => 'mysql']; + $connections['mysql'] = new MySQLDriverConfig( + connection: new MySQLTcpConnectionConfig( + database: getenv('CYCLE_MYSQL_DATABASE'), + host: getenv('CYCLE_MYSQL_HOST'), + port: (int) getenv('CYCLE_MYSQL_PORT'), + user: getenv('CYCLE_MYSQL_USER'), + password: getenv('CYCLE_MYSQL_PASSWORD'), + ), + queryCache: true, + ); + } + + if (getenv('CYCLE_PGSQL_DATABASE', local_only: true) !== false) { + $databases['pgsql'] = ['connection' => 'pgsql']; + $connections['pgsql'] = new PostgresDriverConfig( + connection: new PostgresTcpConnectionConfig( + database: getenv('CYCLE_PGSQL_DATABASE'), + host: getenv('CYCLE_PGSQL_HOST'), + port: (int) getenv('CYCLE_PGSQL_PORT'), + user: getenv('CYCLE_PGSQL_USER'), + password: getenv('CYCLE_PGSQL_PASSWORD'), + ), + schema: 'public', + queryCache: true, + ); + } + + if (getenv('CYCLE_MSSQL_DATABASE', local_only: true) !== false) { + $databases['mssql'] = ['connection' => 'mssql']; + $connections['mssql'] = new SQLServerDriverConfig( + connection: new SQLServerTcpConnectionConfig( + database: getenv('CYCLE_MSSQL_DATABASE'), + host: getenv('CYCLE_MSSQL_HOST'), + port: (int) getenv('CYCLE_MSSQL_PORT'), + trustServerCertificate: true, + user: getenv('CYCLE_MSSQL_USER'), + password: getenv('CYCLE_MSSQL_PASSWORD'), + ), + queryCache: true, + ); + } + + return new DatabaseManager(new DatabaseConfig(['databases' => $databases, 'connections' => $connections])); + } + + private function createOrm(): ORMInterface + { + return new ORM(factory: new Factory($this->dbal), schema: $this->createSchema()); + } + + /** + * Cycle ORM Schema + */ + private function createSchema(): SchemaInterface + { + return new Schema([ + 'user' => [ + SchemaInterface::MAPPER => StdMapper::class, + SchemaInterface::DATABASE => 'default', + SchemaInterface::TABLE => 'user', + SchemaInterface::PRIMARY_KEY => 'id', + SchemaInterface::COLUMNS => [ + // property => column + 'id' => 'id', + 'number' => 'number', + 'email' => 'email', + 'balance' => 'balance', + 'born_at' => 'born_at', + ], + SchemaInterface::TYPECAST => [ + 'id' => 'int', + 'number' => 'int', + 'balance' => 'float', + 'born_at' => 'datetime', + ], + SchemaInterface::RELATIONS => [], + ], + ]); + } } diff --git a/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithGreaterThanOrEqualTest.php b/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithGreaterThanOrEqualTest.php index 818ae36..f8a9af6 100644 --- a/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithGreaterThanOrEqualTest.php +++ b/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithGreaterThanOrEqualTest.php @@ -4,8 +4,7 @@ namespace Yiisoft\Data\Cycle\Tests\Feature\Mssql\Reader\ReaderWithFilter; -use Yiisoft\Data\Cycle\Tests\Feature\Base\Reader\ReaderWithFilter\BaseReaderWithGreaterThanOrEqualTestCase as -BaseGreaterThanOrEqualHandlerTest; +use Yiisoft\Data\Cycle\Tests\Feature\Base\Reader\ReaderWithFilter\BaseReaderWithGreaterThanOrEqualTestCase as BaseGreaterThanOrEqualHandlerTest; final class ReaderWithGreaterThanOrEqualTest extends BaseGreaterThanOrEqualHandlerTest { diff --git a/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithLikeTest.php b/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithLikeTest.php index f8284e0..f9feb7a 100644 --- a/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithLikeTest.php +++ b/tests/Feature/Mssql/Reader/ReaderWithFilter/ReaderWithLikeTest.php @@ -16,7 +16,7 @@ final class ReaderWithLikeTest extends BaseReaderWithLikeTestCase public function testWithReader( string $field, mixed $value, - bool|null $caseSensitive, + ?bool $caseSensitive, array $expectedFixtureIndexes, ): void { if ($caseSensitive === true) { diff --git a/tests/Feature/Sqlite/Reader/ReaderWithFilter/ReaderWithLikeTest.php b/tests/Feature/Sqlite/Reader/ReaderWithFilter/ReaderWithLikeTest.php index 4160afa..580a251 100644 --- a/tests/Feature/Sqlite/Reader/ReaderWithFilter/ReaderWithLikeTest.php +++ b/tests/Feature/Sqlite/Reader/ReaderWithFilter/ReaderWithLikeTest.php @@ -16,7 +16,7 @@ final class ReaderWithLikeTest extends BaseReaderWithLikeTestCase public function testWithReader( string $field, mixed $value, - bool|null $caseSensitive, + ?bool $caseSensitive, array $expectedFixtureIndexes, ): void { if ($caseSensitive === true) { diff --git a/tests/Support/NotSupportedFilter.php b/tests/Support/NotSupportedFilter.php index d8622ba..d416e28 100644 --- a/tests/Support/NotSupportedFilter.php +++ b/tests/Support/NotSupportedFilter.php @@ -6,6 +6,4 @@ use Yiisoft\Data\Reader\FilterInterface; -final class NotSupportedFilter implements FilterInterface -{ -} +final class NotSupportedFilter implements FilterInterface {} diff --git a/tests/Support/StubFilter.php b/tests/Support/StubFilter.php index fd60b88..ba0d02f 100644 --- a/tests/Support/StubFilter.php +++ b/tests/Support/StubFilter.php @@ -6,6 +6,4 @@ use Yiisoft\Data\Reader\FilterInterface; -final class StubFilter implements FilterInterface -{ -} +final class StubFilter implements FilterInterface {} diff --git a/tests/Unit/Reader/Cache/CachedCollectionTest.php b/tests/Unit/Reader/Cache/CachedCollectionTest.php index 2d5b847..6e7aa11 100644 --- a/tests/Unit/Reader/Cache/CachedCollectionTest.php +++ b/tests/Unit/Reader/Cache/CachedCollectionTest.php @@ -6,12 +6,14 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection; +use ArrayIterator; +use Generator; final class CachedCollectionTest extends TestCase { public function testCollection(): void { - $collection = new \ArrayIterator(['foo']); + $collection = new ArrayIterator(['foo']); $cachedCollection = new CachedCollection(); @@ -28,20 +30,20 @@ public function testIsCollected(): void $this->assertFalse($cachedCollection->isCollected()); - $cachedCollection->setCollection(new \ArrayIterator()); + $cachedCollection->setCollection(new ArrayIterator()); $this->assertTrue($cachedCollection->isCollected()); } public function testGetGenerator(): void { - $collection = new \ArrayIterator(['foo']); + $collection = new ArrayIterator(['foo']); $cachedCollection = new CachedCollection(); $cachedCollection->setCollection($collection); - $this->assertInstanceOf(\Generator::class, $cachedCollection->getGenerator()); + $this->assertInstanceOf(Generator::class, $cachedCollection->getGenerator()); $this->assertSame(['foo'], iterator_to_array($cachedCollection->getGenerator())); } } diff --git a/tests/Unit/Reader/Cache/CachedCountTest.php b/tests/Unit/Reader/Cache/CachedCountTest.php index 0812bc6..3578cd1 100644 --- a/tests/Unit/Reader/Cache/CachedCountTest.php +++ b/tests/Unit/Reader/Cache/CachedCountTest.php @@ -6,12 +6,13 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Data\Cycle\Reader\Cache\CachedCount; +use Countable; final class CachedCountTest extends TestCase { public function testGetCount(): void { - $collection = $this->createMock(\Countable::class); + $collection = $this->createMock(Countable::class); $collection->expects($this->once())->method('count')->willReturn(2); $cached = new CachedCount($collection); diff --git a/tests/Unit/Reader/EntityReaderTest.php b/tests/Unit/Reader/EntityReaderTest.php index ae0c831..288c456 100644 --- a/tests/Unit/Reader/EntityReaderTest.php +++ b/tests/Unit/Reader/EntityReaderTest.php @@ -8,6 +8,10 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Data\Cycle\Reader\EntityReader; use Yiisoft\Data\Reader\Sort; +use ReflectionMethod; + +use const SORT_ASC; +use const SORT_DESC; final class EntityReaderTest extends TestCase { @@ -15,11 +19,11 @@ public function testNormalizeSortingCriteria(): void { $reader = new EntityReader($this->createMock(SelectQuery::class)); - $ref = new \ReflectionMethod($reader, 'normalizeSortingCriteria'); + $ref = new ReflectionMethod($reader, 'normalizeSortingCriteria'); $this->assertSame( ['number' => 'ASC', 'name' => 'DESC', 'email' => 'ASC'], - $ref->invoke($reader, ['number' => 'ASC', 'name' => SORT_DESC, 'email' => SORT_ASC]) + $ref->invoke($reader, ['number' => 'ASC', 'name' => SORT_DESC, 'email' => SORT_ASC]), ); } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 888e00e..b5bcbee 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -10,6 +10,6 @@ /** * @link https://github.com/krakjoe/uopz/issues/172 */ -if (function_exists('uopz_allow_exit')) { +if (\function_exists('uopz_allow_exit')) { uopz_allow_exit(true); } From 0a7828a2b0d52ff175f87f9aa7a596e00799e201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=A1=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B2?= Date: Wed, 14 Jan 2026 12:13:47 +0400 Subject: [PATCH 3/3] changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7de2e3..4d28a99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,8 @@ ## 1.0.1 under development -- no changes in this release. +- Enh #50: Explicitly import classes, functions, and constants in "use" section (@mspirkov) ## 1.0.0 December 21, 2025 -- Initial release. \ No newline at end of file +- Initial release.