From 6cdffa6a4fec15f31c3cb1112c9ccbe762636be3 Mon Sep 17 00:00:00 2001 From: MacFJA Date: Sun, 27 Mar 2022 19:02:23 +0200 Subject: [PATCH] Update dev tools version (PHP-CS-Fixer + PHPStan) --- .php-cs-fixer.dist.php | 41 +++++++++++++++---- .unused.dist.php | 24 +++++------ CHANGELOG.md | 4 ++ Makefile | 6 +-- composer.json | 22 +++++----- src/Index.php | 3 ++ src/IndexBuilder.php | 18 ++++++++ src/Query/Builder/EncapsulationGroup.php | 3 ++ src/Query/Builder/FieldFacet.php | 1 + src/Query/Builder/Fuzzy.php | 1 + src/Redis/Client.php | 2 - src/Redis/Client/AbstractClient.php | 2 - src/Redis/Client/ClientFacade.php | 3 -- src/Redis/Command/AbstractCommand.php | 2 + .../AggregateCommand/GroupByOption.php | 1 + .../Command/AggregateCommand/SortByOption.php | 2 + .../Command/CreateCommand/JSONFieldOption.php | 1 + .../Command/Option/AbstractCommandOption.php | 1 + src/Redis/Command/Option/FlagOption.php | 1 + src/Redis/Command/Option/GroupedOption.php | 3 ++ src/Redis/Command/Option/NumberedOption.php | 1 + .../Command/SearchCommand/FilterOption.php | 4 ++ .../Command/SearchCommand/LimitOption.php | 1 + src/Redis/Command/SpellCheck.php | 6 ++- .../Command/SpellCheckCommand/TermsOption.php | 1 + src/Redis/Response/CursorResponse.php | 9 ++++ src/Redis/Response/PaginatedResponse.php | 4 ++ src/Redis/Response/SpellCheckResponseItem.php | 1 + src/Suggestions.php | 3 ++ tests/Query/EscaperTest.php | 1 + .../Option/CustomValidatorOptionTest.php | 18 ++++++++ tests/Redis/Command/Option/FlagOptionTest.php | 6 +++ .../Command/Option/GroupedOptionTest.php | 27 ++++++++++++ .../Redis/Command/Option/NamedOptionTest.php | 3 ++ .../Command/Option/NamelessOptionTest.php | 6 +++ .../Command/Option/NotEmptyOptionTest.php | 37 ++++++++++++++++- .../Command/Option/NumberedOptionTest.php | 9 ++++ tests/Redis/InitializerTest.php | 6 +++ tests/Redis/Response/InfoResponseTest.php | 1 + tests/integration/DockerTest.php | 2 + tests/psalm/stubs/phpiredis.php | 4 ++ 41 files changed, 245 insertions(+), 46 deletions(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index c6d01b1..a5e9991 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -1,10 +1,32 @@ setRiskyAllowed(true) ->setRules([ @@ -17,15 +39,15 @@ '@PhpCsFixer' => true, 'combine_nested_dirname' => true, 'dir_constant' => true, - 'global_namespace_import' => ['import_functions'=>true], - 'header_comment' => ['comment_type'=>'comment','header'=>"Copyright MacFJA\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",'location'=>'after_declare_strict'], + 'global_namespace_import' => ['import_functions' => true], + 'header_comment' => ['comment_type' => 'comment', 'header' => "Copyright MacFJA\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", 'location' => 'after_declare_strict'], 'implode_call' => true, 'logical_operators' => true, 'modernize_types_casting' => true, 'native_function_invocation' => true, - 'no_alias_functions' => ['sets'=>['@all']], + 'no_alias_functions' => ['sets' => ['@all']], 'no_php4_constructor' => true, - 'no_superfluous_phpdoc_tags' => ['allow_mixed'=>true,'remove_inheritdoc'=>true], + 'no_superfluous_phpdoc_tags' => ['allow_mixed' => true, 'remove_inheritdoc' => true], 'no_unreachable_default_argument_value' => true, 'no_useless_sprintf' => true, 'php_unit_dedicate_assert' => true, @@ -43,9 +65,10 @@ 'ternary_to_elvis_operator' => true, 'void_return' => true, ]) - ->setFinder(PhpCsFixer\Finder::create() - ->exclude('vendor') - ->in(__DIR__.'/src') - ->in(__DIR__.'/tests') + ->setFinder( + PhpCsFixer\Finder::create() + ->exclude('vendor') + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') ) - ; \ No newline at end of file + ; diff --git a/.unused.dist.php b/.unused.dist.php index 39cc3d7..a9c78bd 100644 --- a/.unused.dist.php +++ b/.unused.dist.php @@ -1,24 +1,20 @@ $projectPath . '/composer.json', - 'vendorPath' => $projectPath . '/vendor/', + // Required params + 'composerJsonPath' => $projectPath.'/composer.json', + 'vendorPath' => $projectPath.'/vendor/', 'scanDirectories' => $scanDirectories, - /** - * Optional params - **/ + // Optional params 'skipPackages' => [ 'phpmd/phpmd', // QA tool 'vimeo/psalm', // QA tool @@ -28,10 +24,10 @@ 'enlightn/security-checker', // QA tool 'php-parallel-lint/php-parallel-lint', // QA tool 'sebastian/phpcpd', // QA tool - 'ukko/phpredis-phpdoc' // Stubs + 'ukko/phpredis-phpdoc', // Stubs ], 'excludeDirectories' => [], 'scanFiles' => [], 'extensions' => ['*.php'], - 'requireDev' => true -]; \ No newline at end of file + 'requireDev' => true, +]; diff --git a/CHANGELOG.md b/CHANGELOG.md index 6365b16..a03f621 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased v2.x] +### Changed + +- (dev) Update version and rules of PHP-CS-Fixer and PHPStan + ## [2.1.1] ### Fixed diff --git a/Makefile b/Makefile index bd42908..ac983c9 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ analyze: | vendor $(COMPOSER) exec -v parallel-lint -- src - $(COMPOSER) exec -v php-cs-fixer -- fix --dry-run + $(COMPOSER) exec -v php-cs-fixer -- fix --dry-run -v $(COMPOSER) exec -v unused_scanner -- .unused.dist.php $(COMPOSER) exec -v security-checker -- security:check $(COMPOSER) exec -v phpcpd -- --fuzzy src @@ -13,7 +13,7 @@ analyze: | vendor fix-code: | vendor $(COMPOSER) normalize - $(COMPOSER) exec -v php-cs-fixer -- fix + $(COMPOSER) exec -v php-cs-fixer -- fix -v test: | vendor $(COMPOSER) exec -v phpunit @@ -55,4 +55,4 @@ ifneq ($(shell command -v composer > /dev/null ; echo $$?), 0) COMPOSER=php composer.phar else COMPOSER=composer -endif \ No newline at end of file +endif diff --git a/composer.json b/composer.json index 03a0581..e6ca3be 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,8 @@ { "name": "macfja/redisearch", - "type": "library", "description": "PHP Client for RediSearch", + "license": "MIT", + "type": "library", "keywords": [ "Redis", "RediSearch", @@ -9,12 +10,15 @@ "Suggestion" ], "readme": "README.md", - "license": "MIT", "authors": [ { "name": "MacFJA" } ], + "support": { + "issues": "https://github.com/MacFJA/php-redisearch/issues", + "source": "https://github.com/MacFJA/php-redisearch" + }, "require": { "php": "^7.2 || ^8.0", "ext-intl": "*", @@ -55,12 +59,6 @@ "ptrofimov/tinyredisclient": "To use TinyRedisClient implementation", "redisent/redisent": "To use Redisent implementation" }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "ergebnis/composer-normalize": true - } - }, "autoload": { "psr-4": { "MacFJA\\RediSearch\\": "src/" @@ -71,8 +69,10 @@ "MacFJA\\RediSearch\\tests\\": "tests/" } }, - "support": { - "issues": "https://github.com/MacFJA/php-redisearch/issues", - "source": "https://github.com/MacFJA/php-redisearch" + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "ergebnis/composer-normalize": true + } } } diff --git a/src/Index.php b/src/Index.php index eb4c225..02d269e 100644 --- a/src/Index.php +++ b/src/Index.php @@ -44,10 +44,13 @@ class Index { /** @var Client */ private $client; + /** @var InfoResponse */ private $info; + /** @var string */ private $index; + /** @var string */ private $version; diff --git a/src/IndexBuilder.php b/src/IndexBuilder.php index 31215a0..78674b7 100644 --- a/src/IndexBuilder.php +++ b/src/IndexBuilder.php @@ -97,40 +97,58 @@ class IndexBuilder use AddFieldOptionTrait; private const IS_ARRAY = ['prefixes', 'stopWords', 'fields']; + /** @var null|string */ private $index; + /** @var null|string */ private $structure; + /** @var array */ private $prefixes = []; + /** @var null|string */ private $filter; + /** @var null|string */ private $defaultLanguage; + /** @var null|string */ private $languageField; + /** @var null|float */ private $defaultScore; + /** @var null|string */ private $scoreField; + /** @var null|string */ private $payloadField; + /** @var bool */ private $maxTextFields = false; + /** @var null|int */ private $temporary; + /** @var bool */ private $noOffsets = false; + /** @var bool */ private $noHighLight = false; + /** @var bool */ private $noFields = false; + /** @var bool */ private $noFrequencies = false; + /** @var bool */ private $skipInitialScan = false; + /** @var null|array */ private $stopWords; + /** @var array */ private $fields = []; diff --git a/src/Query/Builder/EncapsulationGroup.php b/src/Query/Builder/EncapsulationGroup.php index 656d535..9c7c871 100644 --- a/src/Query/Builder/EncapsulationGroup.php +++ b/src/Query/Builder/EncapsulationGroup.php @@ -25,10 +25,13 @@ class EncapsulationGroup implements QueryElement, QueryElementDecorator { /** @var string */ private $open; + /** @var string */ private $close; + /** @var bool */ private $omitIfNoSpace; + /** @var QueryElement */ private $element; diff --git a/src/Query/Builder/FieldFacet.php b/src/Query/Builder/FieldFacet.php index 2df1e19..2a22685 100644 --- a/src/Query/Builder/FieldFacet.php +++ b/src/Query/Builder/FieldFacet.php @@ -29,6 +29,7 @@ class FieldFacet implements QueryElement { /** @var array */ private $fields; + /** @var QueryElement */ private $element; diff --git a/src/Query/Builder/Fuzzy.php b/src/Query/Builder/Fuzzy.php index ffce965..4fbc423 100644 --- a/src/Query/Builder/Fuzzy.php +++ b/src/Query/Builder/Fuzzy.php @@ -28,6 +28,7 @@ class Fuzzy implements QueryElement { /** @var string */ private $word; + /** @var int */ private $distance; diff --git a/src/Redis/Client.php b/src/Redis/Client.php index ee94663..e1452b0 100644 --- a/src/Redis/Client.php +++ b/src/Redis/Client.php @@ -43,8 +43,6 @@ public function execute(Command $command); public function executeRaw(...$args); /** - * @param Command ...$commands - * * @return array */ public function pipeline(Command ...$commands): array; diff --git a/src/Redis/Client/AbstractClient.php b/src/Redis/Client/AbstractClient.php index 193d9ed..3856f3e 100644 --- a/src/Redis/Client/AbstractClient.php +++ b/src/Redis/Client/AbstractClient.php @@ -41,8 +41,6 @@ public function pipeline(Command ...$commands): array } /** - * @param Command ...$commands - * * @return array */ abstract protected function doPipeline(Command ...$commands): array; diff --git a/src/Redis/Client/ClientFacade.php b/src/Redis/Client/ClientFacade.php index b213c46..d16a269 100644 --- a/src/Redis/Client/ClientFacade.php +++ b/src/Redis/Client/ClientFacade.php @@ -53,9 +53,6 @@ public function getClient($redis): Client { /** @var Client $factory */ foreach ($this->factories as $factory) { - if (!is_subclass_of($factory, Client::class)) { - continue; - } if ($factory::supports($redis)) { return $factory::make($redis); } diff --git a/src/Redis/Command/AbstractCommand.php b/src/Redis/Command/AbstractCommand.php index e9cedd5..c9855f3 100644 --- a/src/Redis/Command/AbstractCommand.php +++ b/src/Redis/Command/AbstractCommand.php @@ -34,10 +34,12 @@ abstract class AbstractCommand implements Command { public const MAX_IMPLEMENTED_VERSION = '2.0.12'; public const MIN_IMPLEMENTED_VERSION = '2.0.0'; + /** * @var array|CommandOption|mixed> */ protected $options; + /** @var string */ private $rediSearchVersion; diff --git a/src/Redis/Command/AggregateCommand/GroupByOption.php b/src/Redis/Command/AggregateCommand/GroupByOption.php index 7985702..4441c59 100644 --- a/src/Redis/Command/AggregateCommand/GroupByOption.php +++ b/src/Redis/Command/AggregateCommand/GroupByOption.php @@ -31,6 +31,7 @@ class GroupByOption extends AbstractCommandOption /** @var array */ private $reducers = []; + /** @var array */ private $fields; diff --git a/src/Redis/Command/AggregateCommand/SortByOption.php b/src/Redis/Command/AggregateCommand/SortByOption.php index e1a5155..ea9b8b0 100644 --- a/src/Redis/Command/AggregateCommand/SortByOption.php +++ b/src/Redis/Command/AggregateCommand/SortByOption.php @@ -29,8 +29,10 @@ class SortByOption extends AbstractCommandOption { use PrefixFieldName; + /** @var array */ private $fields = []; + /** @var null|int */ private $max; diff --git a/src/Redis/Command/CreateCommand/JSONFieldOption.php b/src/Redis/Command/CreateCommand/JSONFieldOption.php index 8f3a9b2..9b2588b 100644 --- a/src/Redis/Command/CreateCommand/JSONFieldOption.php +++ b/src/Redis/Command/CreateCommand/JSONFieldOption.php @@ -27,6 +27,7 @@ class JSONFieldOption extends AbstractCommandOption implements CreateCommandJSON { /** @var CreateCommandFieldOption */ private $decorated; + /** @var string */ private $path; diff --git a/src/Redis/Command/Option/AbstractCommandOption.php b/src/Redis/Command/Option/AbstractCommandOption.php index 30f5fc8..cd37c61 100644 --- a/src/Redis/Command/Option/AbstractCommandOption.php +++ b/src/Redis/Command/Option/AbstractCommandOption.php @@ -22,6 +22,7 @@ namespace MacFJA\RediSearch\Redis\Command\Option; use Composer\Semver\Semver; +use function is_scalar; use UnexpectedValueException; abstract class AbstractCommandOption implements CommandOption diff --git a/src/Redis/Command/Option/FlagOption.php b/src/Redis/Command/Option/FlagOption.php index c315582..992c216 100644 --- a/src/Redis/Command/Option/FlagOption.php +++ b/src/Redis/Command/Option/FlagOption.php @@ -25,6 +25,7 @@ class FlagOption extends AbstractCommandOption { /** @var string */ private $name; + /** @var bool */ private $active; diff --git a/src/Redis/Command/Option/GroupedOption.php b/src/Redis/Command/Option/GroupedOption.php index 49503bf..9b91a1e 100644 --- a/src/Redis/Command/Option/GroupedOption.php +++ b/src/Redis/Command/Option/GroupedOption.php @@ -25,6 +25,7 @@ use BadMethodCallException; use function in_array; use function is_bool; +use function is_scalar; use OutOfRangeException; class GroupedOption extends AbstractCommandOption @@ -33,8 +34,10 @@ class GroupedOption extends AbstractCommandOption /** @var array */ private $options; + /** @var array */ private $required; + /** @var array */ private $locked; diff --git a/src/Redis/Command/Option/NumberedOption.php b/src/Redis/Command/Option/NumberedOption.php index 9bd725a..f52d998 100644 --- a/src/Redis/Command/Option/NumberedOption.php +++ b/src/Redis/Command/Option/NumberedOption.php @@ -29,6 +29,7 @@ class NumberedOption extends AbstractCommandOption { /** @var string */ private $name; + /** @var null|array */ private $arguments; diff --git a/src/Redis/Command/SearchCommand/FilterOption.php b/src/Redis/Command/SearchCommand/FilterOption.php index 618bb2e..c4c0570 100644 --- a/src/Redis/Command/SearchCommand/FilterOption.php +++ b/src/Redis/Command/SearchCommand/FilterOption.php @@ -29,12 +29,16 @@ class FilterOption extends AbstractCommandOption /** @var string */ private $fieldName; + /** @var null|float */ private $min; + /** @var null|float */ private $max; + /** @var bool */ private $isMaxInclusive; + /** @var bool */ private $isMinInclusive; diff --git a/src/Redis/Command/SearchCommand/LimitOption.php b/src/Redis/Command/SearchCommand/LimitOption.php index e9e585f..d819fd0 100644 --- a/src/Redis/Command/SearchCommand/LimitOption.php +++ b/src/Redis/Command/SearchCommand/LimitOption.php @@ -28,6 +28,7 @@ class LimitOption extends AbstractCommandOption { /** @var null|int */ private $offset; + /** @var null|int */ private $size; diff --git a/src/Redis/Command/SpellCheck.php b/src/Redis/Command/SpellCheck.php index b2a196d..ed30225 100644 --- a/src/Redis/Command/SpellCheck.php +++ b/src/Redis/Command/SpellCheck.php @@ -100,8 +100,12 @@ public function parseResponse($data) $misspelled = array_shift($group); $suggestions = reset($group); $suggestions = array_column($suggestions, 0, 1); + $castedSuggestions = []; + foreach ($suggestions as $term => $score) { + $castedSuggestions[(string) $term] = (float) $score; + } - return new SpellCheckResponseItem($misspelled, $suggestions); + return new SpellCheckResponseItem($misspelled, $castedSuggestions); }, $data); return array_filter($items); diff --git a/src/Redis/Command/SpellCheckCommand/TermsOption.php b/src/Redis/Command/SpellCheckCommand/TermsOption.php index fcdf953..3b69f8d 100644 --- a/src/Redis/Command/SpellCheckCommand/TermsOption.php +++ b/src/Redis/Command/SpellCheckCommand/TermsOption.php @@ -28,6 +28,7 @@ class TermsOption extends AbstractCommandOption { /** @var bool */ private $isExclusion = false; + /** @var string */ private $dictionary; diff --git a/src/Redis/Response/CursorResponse.php b/src/Redis/Response/CursorResponse.php index 231a96f..a477a46 100644 --- a/src/Redis/Response/CursorResponse.php +++ b/src/Redis/Response/CursorResponse.php @@ -35,20 +35,28 @@ class CursorResponse implements Response, Iterator { /** @var array */ private $items; + /** @var int */ private $totalCount; + /** @var Client */ private $client; + /** @var bool */ private $doNext = false; + /** @var int */ private $cursorId; + /** @var int */ private $size; + /** @var int */ private $offset = 0; + /** @var string */ private $index; + /** @var string */ private $redisVersion; @@ -82,6 +90,7 @@ public function current() $cursorRead->setIndex($this->index); $cursorRead->setCursorId($this->cursorId); $cursorRead->setCount($this->getPageSize()); + /** @var CursorResponse $next */ $next = $this->client->execute($cursorRead); $this->cursorId = $next->cursorId; diff --git a/src/Redis/Response/PaginatedResponse.php b/src/Redis/Response/PaginatedResponse.php index 3687772..d139526 100644 --- a/src/Redis/Response/PaginatedResponse.php +++ b/src/Redis/Response/PaginatedResponse.php @@ -36,15 +36,19 @@ class PaginatedResponse implements Response, Iterator, Countable { /** @var array|array */ private $items; + /** @var PaginatedCommand */ private $lastCommand; + /** @var int */ private $totalCount; + /** @var Client */ private $client; /** @var null|int */ private $requestedOffset; + /** @var null|int */ private $requestedSize; diff --git a/src/Redis/Response/SpellCheckResponseItem.php b/src/Redis/Response/SpellCheckResponseItem.php index 55df80a..bd2c464 100644 --- a/src/Redis/Response/SpellCheckResponseItem.php +++ b/src/Redis/Response/SpellCheckResponseItem.php @@ -30,6 +30,7 @@ class SpellCheckResponseItem { /** @var string */ private $term; + /** @var array */ private $suggestions; diff --git a/src/Suggestions.php b/src/Suggestions.php index ad785ec..91c0732 100644 --- a/src/Suggestions.php +++ b/src/Suggestions.php @@ -39,10 +39,13 @@ class Suggestions { /** @var string */ private $dictionary; + /** @var Client */ private $client; + /** @var int */ private $length; + /** @var string */ private $version; diff --git a/tests/Query/EscaperTest.php b/tests/Query/EscaperTest.php index 40f5ce7..bf3ac8e 100644 --- a/tests/Query/EscaperTest.php +++ b/tests/Query/EscaperTest.php @@ -40,6 +40,7 @@ class EscaperTest extends \PHPUnit\Framework\TestCase 'testEscapeOptional' => 'optional', 'testEscapeNothing' => 'input', ]; + /** * @var array> */ diff --git a/tests/Redis/Command/Option/CustomValidatorOptionTest.php b/tests/Redis/Command/Option/CustomValidatorOptionTest.php index 58e3bc7..925d40d 100644 --- a/tests/Redis/Command/Option/CustomValidatorOptionTest.php +++ b/tests/Redis/Command/Option/CustomValidatorOptionTest.php @@ -72,42 +72,60 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$invalidMinLengthOption, 'foo']; + yield [$validMinLengthOption, 'foobar']; + yield [$emptyMinLengthOption, null]; break; case 'testIsValid': yield [$invalidMinLengthOption, false]; + yield [$validMinLengthOption, true]; + yield [$emptyMinLengthOption, false]; break; case 'testRender': yield [$invalidMinLengthOption, []]; + yield [$validMinLengthOption, ['foobar']]; + yield [$emptyMinLengthOption, []]; break; case 'testIsCompatible': yield [$validMinLengthOption, '1.0.0', true]; + yield [$validMinLengthOption, '1.5.0', true]; + yield [$validMinLengthOption, '2.0.0', true]; + yield [$validMinLengthOption, '2.5.0', true]; + yield [$validMinLengthOption, 'foo', false]; yield [$lowValidMinLengthOption, '1.0.0', true]; + yield [$lowValidMinLengthOption, '1.5.0', true]; + yield [$lowValidMinLengthOption, '2.0.0', true]; + yield [$lowValidMinLengthOption, '2.5.0', true]; + yield [$lowValidMinLengthOption, 'foo', false]; yield [$highValidMinLengthOption, '1.0.0', false]; + yield [$highValidMinLengthOption, '1.5.0', false]; + yield [$highValidMinLengthOption, '2.0.0', true]; + yield [$highValidMinLengthOption, '2.5.0', true]; + yield [$highValidMinLengthOption, 'foo', false]; break; diff --git a/tests/Redis/Command/Option/FlagOptionTest.php b/tests/Redis/Command/Option/FlagOptionTest.php index 182b995..1b0c551 100644 --- a/tests/Redis/Command/Option/FlagOptionTest.php +++ b/tests/Redis/Command/Option/FlagOptionTest.php @@ -67,21 +67,27 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$defaultValueFlag, false]; + yield [$notActiveFlag, false]; + yield [$activeFlag, true]; break; case 'testIsValid': yield [$defaultValueFlag, true]; + yield [$notActiveFlag, true]; + yield [$activeFlag, true]; break; case 'testRender': yield [$defaultValueFlag, []]; + yield [$notActiveFlag, []]; + yield [$activeFlag, ['BAR']]; break; diff --git a/tests/Redis/Command/Option/GroupedOptionTest.php b/tests/Redis/Command/Option/GroupedOptionTest.php index 9c38843..71033c2 100644 --- a/tests/Redis/Command/Option/GroupedOptionTest.php +++ b/tests/Redis/Command/Option/GroupedOptionTest.php @@ -137,51 +137,78 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$emptyGroup, []]; + yield [$noRequiredGroup, ['foo' => new NamelessOption()]]; + yield [$emptyRequiredGroup, []]; + yield [$noValueRequireGroup, ['foo' => new NamelessOption()]]; + yield [$valueRequireGroup, ['foo' => new NamelessOption('FOO')]]; + yield [$valueRequireGroup2, ['foo' => new NamelessOption(0)]]; + yield [$valueLockGroup, ['foo' => new NamelessOption('FOO')]]; break; case 'testIsValid': yield [$emptyGroup, true]; + yield [$noRequiredGroup, true]; + yield [$emptyRequiredGroup, false]; + yield [$noValueRequireGroup, false]; + yield [$valueRequireGroup, true]; + yield [$valueRequireGroup2, true]; + yield [$valueLockGroup, true]; break; case 'testRender': yield [$emptyGroup, []]; + yield [$noRequiredGroup, []]; + yield [$emptyRequiredGroup, []]; + yield [$noValueRequireGroup, []]; + yield [$valueRequireGroup, ['FOO']]; + yield [$valueRequireGroup2, [0]]; + yield [$valueLockGroup, ['FOO']]; break; case 'testIsCompatible': yield [$emptyGroup, '1.0.0', true]; + yield [$emptyGroup, '1.5.0', true]; + yield [$emptyGroup, '2.0.0', true]; + yield [$emptyGroup, '2.5.0', true]; yield [$lowVersionGroup, '1.0.0', true]; + yield [$lowVersionGroup, '1.5.0', true]; + yield [$lowVersionGroup, '2.0.0', true]; + yield [$lowVersionGroup, '2.5.0', true]; yield [$highVersionGroup, '1.0.0', false]; + yield [$highVersionGroup, '1.5.0', false]; + yield [$highVersionGroup, '2.0.0', true]; + yield [$highVersionGroup, '2.5.0', true]; break; diff --git a/tests/Redis/Command/Option/NamedOptionTest.php b/tests/Redis/Command/Option/NamedOptionTest.php index d5ee69f..d7bce60 100644 --- a/tests/Redis/Command/Option/NamedOptionTest.php +++ b/tests/Redis/Command/Option/NamedOptionTest.php @@ -65,18 +65,21 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$defaultValueOption, null]; + yield [$withValueOption, 'bar']; break; case 'testIsValid': yield [$defaultValueOption, false]; + yield [$withValueOption, true]; break; case 'testRender': yield [$defaultValueOption, []]; + yield [$withValueOption, ['FOO', 'bar']]; break; diff --git a/tests/Redis/Command/Option/NamelessOptionTest.php b/tests/Redis/Command/Option/NamelessOptionTest.php index de436f2..c6f8166 100644 --- a/tests/Redis/Command/Option/NamelessOptionTest.php +++ b/tests/Redis/Command/Option/NamelessOptionTest.php @@ -57,21 +57,27 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$defaultValueOption, null]; + yield [$withValueOption, 'FOO']; + yield [$emptyValueOption, '']; break; case 'testIsValid': yield [$defaultValueOption, false]; + yield [$withValueOption, true]; + yield [$emptyValueOption, true]; break; case 'testRender': yield [$defaultValueOption, []]; + yield [$withValueOption, ['FOO']]; + yield [$emptyValueOption, ['']]; break; diff --git a/tests/Redis/Command/Option/NotEmptyOptionTest.php b/tests/Redis/Command/Option/NotEmptyOptionTest.php index d5c4f5c..f4243be 100644 --- a/tests/Redis/Command/Option/NotEmptyOptionTest.php +++ b/tests/Redis/Command/Option/NotEmptyOptionTest.php @@ -27,6 +27,7 @@ use MacFJA\RediSearch\Redis\Command\Option\NamelessOption; use MacFJA\RediSearch\Redis\Command\Option\NotEmptyOption; use MacFJA\RediSearch\Redis\Command\Option\NumberedOption; +use PHPUnit\Framework\TestCase; /** * @covers \MacFJA\RediSearch\Redis\Command\Option\AbstractCommandOption @@ -40,7 +41,7 @@ * * @internal */ -class NotEmptyOptionTest extends \PHPUnit\Framework\TestCase +class NotEmptyOptionTest extends TestCase { use BaseOptionTestTrait; use TestIsCompatibleTrait; @@ -79,58 +80,92 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$namelessOption, 'foo']; + yield [$namedOption, 'bar']; + yield [$numberedOption, ['bar', 'foobar']]; + yield [$emptyNamelessOption, null]; + yield [$emptyNamedOption, null]; + yield [$emptyNumberedOption, []]; + yield [$nullNumberedOption, null]; + yield [$trueFlagOption, true]; + yield [$falseFlagOption, false]; break; case 'testIsValid': yield [$namelessOption, true]; + yield [$namedOption, true]; + yield [$numberedOption, true]; + yield [$emptyNamelessOption, false]; + yield [$emptyNamedOption, false]; + yield [$emptyNumberedOption, false]; + yield [$trueFlagOption, true]; + yield [$falseFlagOption, false]; break; case 'testRender': yield [$namelessOption, ['foo']]; + yield [$namedOption, ['FOO', 'bar']]; + yield [$numberedOption, ['FOO', 2, 'bar', 'foobar']]; + yield [$emptyNamelessOption, []]; + yield [$emptyNamedOption, []]; + yield [$emptyNumberedOption, []]; + yield [$trueFlagOption, ['FOO']]; + yield [$falseFlagOption, []]; break; case 'testIsCompatible': yield [$namelessOption, '1.0.0', true]; + yield [$namelessOption, '1.5.0', true]; + yield [$namelessOption, '2.0.0', true]; + yield [$namelessOption, '2.5.0', true]; + yield [$namelessOption, 'foo', false]; yield [$lowOptionOption, '1.0.0', true]; + yield [$lowOptionOption, '1.5.0', true]; + yield [$lowOptionOption, '2.0.0', true]; + yield [$lowOptionOption, '2.5.0', true]; + yield [$lowOptionOption, 'foo', false]; yield [$highOptionOption, '1.0.0', false]; + yield [$highOptionOption, '1.5.0', false]; + yield [$highOptionOption, '2.0.0', true]; + yield [$highOptionOption, '2.5.0', true]; + yield [$highOptionOption, 'foo', false]; break; diff --git a/tests/Redis/Command/Option/NumberedOptionTest.php b/tests/Redis/Command/Option/NumberedOptionTest.php index 4cde462..545c50a 100644 --- a/tests/Redis/Command/Option/NumberedOptionTest.php +++ b/tests/Redis/Command/Option/NumberedOptionTest.php @@ -70,24 +70,33 @@ public function dataProvider(string $testName): Generator switch ($testName) { case 'testGetOptionData': yield [$noArgumentsOption, null]; + yield [$emptyArgumentsOption, []]; + yield [$withOneArgumentOption, ['bar']]; + yield [$withMultipleArgumentOption, ['bar', 'foobar']]; break; case 'testIsValid': yield [$noArgumentsOption, false]; + yield [$emptyArgumentsOption, true]; + yield [$withOneArgumentOption, true]; + yield [$withMultipleArgumentOption, true]; break; case 'testRender': yield [$noArgumentsOption, []]; + yield [$emptyArgumentsOption, ['FOO', 0]]; + yield [$withOneArgumentOption, ['FOO', 1, 'bar']]; + yield [$withMultipleArgumentOption, ['FOO', 2, 'bar', 'foobar']]; break; diff --git a/tests/Redis/InitializerTest.php b/tests/Redis/InitializerTest.php index 7ebfdac..8cde0b2 100644 --- a/tests/Redis/InitializerTest.php +++ b/tests/Redis/InitializerTest.php @@ -51,11 +51,17 @@ public function dataProvider(string $testName): Generator { if ('testRediSearchVersion' === $testName) { yield [[['name', 'search', 'ver', '20005']], '2.0.5']; + yield [[['name', 'search', 'ver', '20000']], '2.0.0']; + yield [[['name', 'search', 'ver', '26512']], '2.65.12']; + yield [[['name', 'search', 'ver', '120569']], '12.5.69']; + yield [[['name', 'search', 'ver', '99999']], '9.99.99']; + yield [[['name', 'json', 'ver', '99999']], null]; + yield [[['name', 'json', 'ver', '99999'], ['name', 'search', 'ver', '20005']], '2.0.5']; } } diff --git a/tests/Redis/Response/InfoResponseTest.php b/tests/Redis/Response/InfoResponseTest.php index 356e91a..c86f904 100644 --- a/tests/Redis/Response/InfoResponseTest.php +++ b/tests/Redis/Response/InfoResponseTest.php @@ -144,6 +144,7 @@ public function testResponse(): void ], ]; $command = new Info(); + /** @var InfoResponse $parsed */ $parsed = $command->parseResponse($rawResponse); diff --git a/tests/integration/DockerTest.php b/tests/integration/DockerTest.php index 5175d4f..2d9234b 100644 --- a/tests/integration/DockerTest.php +++ b/tests/integration/DockerTest.php @@ -111,8 +111,10 @@ class DockerTest extends TestCase { /** @var bool */ private static $skip = false; + /** @var string */ private static $containerCommand = 'podman'; + /** @var null|string */ private static $containerId; diff --git a/tests/psalm/stubs/phpiredis.php b/tests/psalm/stubs/phpiredis.php index 57192c9..87cb532 100644 --- a/tests/psalm/stubs/phpiredis.php +++ b/tests/psalm/stubs/phpiredis.php @@ -39,6 +39,7 @@ function phpiredis_pconnect($host, $port = 6379): void function phpiredis_disconnect(): void { } + /** * @param resource $redis * @param string[] $command @@ -57,6 +58,7 @@ function phpiredis_command_bs($redis, array $command) function phpiredis_command($redis, string $command) { } + /** * @param resource $redis * @param array $commands @@ -113,6 +115,7 @@ function phpiredis_reader_feed($reader, string $response): void function phpiredis_reader_get_state($reader) { } + /** * @param resource $reader * @@ -144,6 +147,7 @@ function phpiredis_reader_destroy($redis): void function phpiredis_reader_set_error_handler($reader, ?callable $handler): void { } + /** * @param resource $reader */