mirror of
https://github.com/predis/predis.git
synced 2026-08-30 20:21:31 +00:00
Added support for LMPOP command (#1013)
Co-authored-by: Vladyslav Vildanov <vladyslavvildanov@Vladyslav-Vildanov-MacBook-Pro.local>
This commit is contained in:
committed by
GitHub
parent
721c829042
commit
d1acca607e
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Predis package.
|
||||
*
|
||||
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
||||
*
|
||||
* 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\Response\ServerException;
|
||||
|
||||
/**
|
||||
* @group commands
|
||||
* @group realm-list
|
||||
*/
|
||||
class LMPOP_Test extends PredisCommandTestCase
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getExpectedCommand(): string
|
||||
{
|
||||
return LMPOP::class;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getExpectedId(): string
|
||||
{
|
||||
return 'LMPOP';
|
||||
}
|
||||
|
||||
/**
|
||||
* @group disconnected
|
||||
* @dataProvider argumentsProvider
|
||||
*/
|
||||
public function testFilterArguments(array $actualArguments, array $expectedArguments): void
|
||||
{
|
||||
$command = $this->getCommand();
|
||||
$command->setArguments($actualArguments);
|
||||
|
||||
$this->assertSame($expectedArguments, $command->getArguments());
|
||||
}
|
||||
|
||||
/**
|
||||
* @group disconnected
|
||||
*/
|
||||
public function testParseResponse(): void
|
||||
{
|
||||
$raw = ['key', ['elem1', 'elem2']];
|
||||
$expected = ['key' => ['elem1', 'elem2']];
|
||||
|
||||
$command = $this->getCommand();
|
||||
|
||||
$this->assertSame($expected, $command->parseResponse($raw));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group connected
|
||||
* @dataProvider listProvider
|
||||
* @param array $listArguments
|
||||
* @param string $key
|
||||
* @param string $modifier
|
||||
* @param int $count
|
||||
* @param array|null $expectedResponse
|
||||
* @param array $expectedModifiedList
|
||||
* @return void
|
||||
* @requiresRedisVersion >= 7.0.0
|
||||
*/
|
||||
public function testPopElementsFromGivenList(
|
||||
array $listArguments,
|
||||
string $key,
|
||||
string $modifier,
|
||||
int $count,
|
||||
?array $expectedResponse,
|
||||
array $expectedModifiedList
|
||||
): void {
|
||||
$redis = $this->getClient();
|
||||
|
||||
$redis->lpush(...$listArguments);
|
||||
$actualResponse = $redis->lmpop(['key1', $key], $modifier, $count);
|
||||
|
||||
$this->assertSame($expectedResponse, $actualResponse);
|
||||
$this->assertSame($expectedModifiedList, $redis->lrange($key, 0, -1));
|
||||
}
|
||||
|
||||
public function argumentsProvider(): array
|
||||
{
|
||||
return [
|
||||
'with default arguments' => [
|
||||
[['key']],
|
||||
[1, 'key', 'LEFT']
|
||||
],
|
||||
'with LEFT/RIGHT argument' => [
|
||||
[['key'], 'right'],
|
||||
[1, 'key', 'RIGHT']
|
||||
],
|
||||
'with COUNT argument' => [
|
||||
[['key'], 'left', 2],
|
||||
[1, 'key', 'LEFT', 'COUNT', 2]
|
||||
],
|
||||
'with all arguments' => [
|
||||
[['key1', 'key2'], 'right', 2],
|
||||
[2, 'key1', 'key2', 'RIGHT', 'COUNT', 2]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function listProvider(): array
|
||||
{
|
||||
return [
|
||||
'pops single element - left' => [
|
||||
['key', 'elem1', 'elem2', 'elem3'],
|
||||
'key',
|
||||
'left',
|
||||
1,
|
||||
['key' => ['elem3']],
|
||||
['elem2', 'elem1']
|
||||
],
|
||||
'pops single element - right' => [
|
||||
['key', 'elem1', 'elem2', 'elem3'],
|
||||
'key',
|
||||
'right',
|
||||
1,
|
||||
['key' => ['elem1']],
|
||||
['elem3', 'elem2']
|
||||
],
|
||||
'pops multiple elements' => [
|
||||
['key', 'elem1', 'elem2', 'elem3'],
|
||||
'key',
|
||||
'right',
|
||||
2,
|
||||
['key' => ['elem1', 'elem2']],
|
||||
['elem3'],
|
||||
],
|
||||
'with empty list' => [
|
||||
['key', 'elem1', 'elem2', 'elem3'],
|
||||
'key2',
|
||||
'right',
|
||||
2,
|
||||
null,
|
||||
[],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user