Files
predis/tests/PHPUnit/PredisCommandTestCase.php
T
Vladyslav Vildanov f8797aaa29 Added support for Redis JSON module commands, added JSON.SET and JSON.GET commands (#868)
* Added CommandResolver, moved resolve command logic there, added ClientConfiguration object

* Fixed test, added dependecies

* Added resolved command to commands array

* Used aggregation approach for modules

* Added decorator to check Redis JSON module version

* Added support for JSON.SET and JSON.GET commands

* Added separate workflow for redis-stack tests

* Changed docker imange name to correct one

* Fixed indentation

* Added test coverage for JSON.GET command

* Changed module version resolving using annotations mapping

* Re-written CommandResolver test

* Update ClientInterface.php

* Changes to CI, readme, removed unused modules from configuration

* Fixed build badge URL

* Refactored annotation check to be generic for each module

* Fixed bug with incorrect tests skip

* Added CommandResolver, moved resolve command logic there, added ClientConfiguration object

* Fixed test, added dependecies

* Added resolved command to commands array

* Used aggregation approach for modules

* Added decorator to check Redis JSON module version

* Added support for JSON.SET and JSON.GET commands

* Added separate workflow for redis-stack tests

* Changed docker imange name to correct one

* Fixed indentation

* Added test coverage for JSON.GET command

* Changed module version resolving using annotations mapping

* Re-written CommandResolver test

* Update ClientInterface.php

* Changes to CI, readme, removed unused modules from configuration

* Fixed build badge URL

* Refactored annotation check to be generic for each module

* Fixed bug with incorrect tests skip

* Fixed naming issue with nxXx argument

* Removed redundant trait

* Fixed NxXxArgument test

* add Redis stack tests

* don't run tests twice

* use

* Update stack.yml

* Rename workflows

* Added version 6.x to workflow

* Removed exception thrown to avoid version bug

* Resolve conflicts within tests.yml

* Codestyle fixes

* Removew trailing whitespaces

Co-authored-by: Vladyslav Vildanov <vladyslavvildanov@Vladyslav-Vildanov-MacBook-Pro.local>
Co-authored-by: Till Krüss <tillkruss@users.noreply.github.com>
2023-01-25 14:51:22 +02:00

131 lines
3.3 KiB
PHP

<?php
/*
* This file is part of the Predis package.
*
* (c) 2009-2020 Daniele Alessandri
* (c) 2021-2023 Till Krüss
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Predis\Command\Redis;
use Predis\Client;
use Predis\Command;
use Predis\Command\CommandInterface;
use PredisTestCase;
abstract class PredisCommandTestCase extends PredisTestCase
{
/**
* Returns the expected command for tests.
*
* @return Command\CommandInterface|string Instance or FQCN of the expected command
*/
abstract protected function getExpectedCommand(): string;
/**
* Returns the expected command ID for tests.
*
* @return string
*/
abstract protected function getExpectedId(): string;
/**
* Returns a new command instance.
*
* @return Command\CommandInterface
*/
public function getCommand(): Command\CommandInterface
{
$command = $this->getExpectedCommand();
return $command instanceof Command\CommandInterface ? $command : new $command();
}
/**
* Returns a new client instance.
*
* @param bool $flushdb Flush selected database before returning the client
* @return Client
*/
public function getClient(bool $flushdb = true): Client
{
$commands = $this->getCommandFactory();
if (!$commands->supports($id = $this->getExpectedId())) {
$this->markTestSkipped(
"The current command factory does not support command $id"
);
}
$client = $this->createClient(null, null, $flushdb);
return $client;
}
/**
* Verifies if the command implements the prefixable interface.
*
* @return bool
*/
protected function isPrefixable(): bool
{
return $this->getCommand() instanceof Command\PrefixableCommandInterface;
}
/**
* Returns a new command instance with the specified arguments.
*
* @param mixed ...$arguments List of arguments for the command
*
* @return CommandInterface
*/
protected function getCommandWithArguments(...$arguments): CommandInterface
{
return $this->getCommandWithArgumentsArray($arguments);
}
/**
* Returns a new command instance with the specified arguments.
*
* @param array $arguments Arguments for the command
*
* @return CommandInterface
*/
protected function getCommandWithArgumentsArray(array $arguments): CommandInterface
{
$command = $this->getCommand();
$command->setArguments($arguments);
return $command;
}
/**
* @group disconnected
*/
public function testCommandId(): void
{
$command = $this->getCommand();
$sanitizedCommandId = str_replace('.', '', $command->getId());
$this->assertInstanceOf('Predis\Command\CommandInterface', $command);
$this->assertEquals($this->getExpectedId(), $sanitizedCommandId);
}
/**
* @group disconnected
*/
public function testRawArguments(): void
{
$expected = ['1st', '2nd', '3rd', '4th'];
$command = $this->getCommand();
$command->setRawArguments($expected);
$this->assertSame($expected, $command->getArguments());
}
}