mirror of
https://github.com/predis/predis.git
synced 2026-10-25 05:06:43 +00:00
5d85628a11
* Add normalizeVariadic to RPUSHX and LPUSHX commands
RPUSHX and LPUSHX commands were missing the setArguments method
with normalizeVariadic call, unlike their RPUSH and LPUSH counterparts.
This caused errors when passing values as a single array argument
(e.g. $client->rpushx('key', ['val1', 'val2'])).
Fixes #1504
* Update CHANGELOG.md with RPUSHX/LPUSHX variadic fix (#1633)
* Fix variadic arguments normalization for [L|R]PUSHX
---------
Co-authored-by: Till Krüss <tillkruss@users.noreply.github.com>
148 lines
3.6 KiB
PHP
148 lines
3.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) 2009-2020 Daniele Alessandri
|
|
* (c) 2021-2025 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\Command\PrefixableCommand;
|
|
|
|
/**
|
|
* @group commands
|
|
* @group realm-list
|
|
*/
|
|
class RPUSHX_Test extends PredisCommandTestCase
|
|
{
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function getExpectedCommand(): string
|
|
{
|
|
return 'Predis\Command\Redis\RPUSHX';
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function getExpectedId(): string
|
|
{
|
|
return 'RPUSHX';
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testFilterArguments(): void
|
|
{
|
|
$arguments = ['key', 'value'];
|
|
$expected = ['key', 'value'];
|
|
|
|
$command = $this->getCommand();
|
|
$command->setArguments($arguments);
|
|
|
|
$this->assertSame($expected, $command->getArguments());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testFilterArgumentsValuesAsSingleArray(): void
|
|
{
|
|
$arguments = ['key', ['value1', 'value2', 'value3']];
|
|
$expected = ['key', 'value1', 'value2', 'value3'];
|
|
|
|
$command = $this->getCommand();
|
|
$command->setArguments($arguments);
|
|
|
|
$this->assertSame($expected, $command->getArguments());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testParseResponse(): void
|
|
{
|
|
$this->assertSame(1, $this->getCommand()->parseResponse(1));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testPrefixKeys(): void
|
|
{
|
|
/** @var PrefixableCommand $command */
|
|
$command = $this->getCommand();
|
|
$actualArguments = ['arg1', 'arg2', 'arg3', 'arg4'];
|
|
$prefix = 'prefix:';
|
|
$expectedArguments = ['prefix:arg1', 'arg2', 'arg3', 'arg4'];
|
|
|
|
$command->setArguments($actualArguments);
|
|
$command->prefixKeys($prefix);
|
|
|
|
$this->assertSame($expectedArguments, $command->getArguments());
|
|
}
|
|
|
|
/**
|
|
* @group connected
|
|
* @requiresRedisVersion >= 2.2.0
|
|
*/
|
|
public function testPushesElementsToHeadOfExistingList(): void
|
|
{
|
|
$redis = $this->getClient();
|
|
|
|
$redis->rpush('metavars', 'foo');
|
|
|
|
$this->assertSame(2, $redis->rpushx('metavars', 'hoge'));
|
|
$this->assertSame(['foo', 'hoge'], $redis->lrange('metavars', 0, -1));
|
|
}
|
|
|
|
/**
|
|
* @group connected
|
|
* @requiresRedisVersion >= 6.0.0
|
|
*/
|
|
public function testPushesElementsToHeadOfExistingListResp3(): void
|
|
{
|
|
$redis = $this->getResp3Client();
|
|
|
|
$redis->rpush('metavars', 'foo');
|
|
|
|
$this->assertSame(2, $redis->rpushx('metavars', 'hoge'));
|
|
$this->assertSame(['foo', 'hoge'], $redis->lrange('metavars', 0, -1));
|
|
}
|
|
|
|
/**
|
|
* @group connected
|
|
* @requiresRedisVersion >= 2.2.0
|
|
*/
|
|
public function testDoesNotPushElementOnNonExistingKey(): void
|
|
{
|
|
$redis = $this->getClient();
|
|
|
|
$this->assertSame(0, $redis->rpushx('metavars', 'foo'));
|
|
$this->assertSame(0, $redis->rpushx('metavars', 'hoge'));
|
|
$this->assertSame(0, $redis->exists('metavars'));
|
|
}
|
|
|
|
/**
|
|
* @group connected
|
|
* @requiresRedisVersion >= 2.2.0
|
|
*/
|
|
public function testThrowsExceptionOnWrongType(): void
|
|
{
|
|
$this->expectException('Predis\Response\ServerException');
|
|
$this->expectExceptionMessage('Operation against a key holding the wrong kind of value');
|
|
|
|
$redis = $this->getClient();
|
|
|
|
$redis->set('metavars', 'foo');
|
|
$redis->rpushx('metavars', 'hoge');
|
|
}
|
|
}
|