mirror of
https://github.com/predis/predis.git
synced 2026-09-17 13:57:33 +00:00
Added response parser for WithScore trait (#830)
* Added response parser for WithScore trait * Added test coverage for new method Co-authored-by: Vladyslav Vildanov <vladyslavvildanov@Vladyslav-Vildanov-MacBook-Pro.local>
This commit is contained in:
committed by
GitHub
parent
573c54ac4c
commit
35d18d739a
@@ -19,4 +19,34 @@ trait WithScores
|
||||
|
||||
parent::setArguments($arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for the presence of the WITHSCORES modifier.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function isWithScoreModifier(): bool
|
||||
{
|
||||
$arguments = parent::getArguments();
|
||||
$lastArgument = $arguments[count($arguments) - 1];
|
||||
|
||||
return is_string($lastArgument) && strtoupper($lastArgument) === 'WITHSCORES';
|
||||
}
|
||||
|
||||
public function parseResponse($data)
|
||||
{
|
||||
if ($this->isWithScoreModifier()) {
|
||||
$result = [];
|
||||
|
||||
for ($i = 0, $iMax = count($data); $i < $iMax; ++$i) {
|
||||
if ($data[$i + 1] ?? false) {
|
||||
$result[$data[$i]] = $data[++$i];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ class ZDIFF_test extends PredisCommandTestCase
|
||||
{
|
||||
$redis = $this->getClient();
|
||||
$membersDictionary = [1, 'member1', 2, 'member2', 3, 'member3'];
|
||||
$expectedResponse = ['member1', '1', 'member2', '2', 'member3', '3'];
|
||||
$expectedResponse = ['member1' => '1', 'member2' => '2', 'member3' => '3'];
|
||||
|
||||
$redis->zadd('test-zset-1', ...$membersDictionary);
|
||||
$this->assertSame($expectedResponse, $redis->zdiff(['test-zset-1', 'test-zset-2'], true));
|
||||
@@ -130,13 +130,13 @@ class ZDIFF_test extends PredisCommandTestCase
|
||||
'no intersection - with score' => [
|
||||
[1, 'member1', 2, 'member2', 3, 'member3'],
|
||||
[1, 'member4', 2, 'member5', 3, 'member6'],
|
||||
['member1', '1', 'member2', '2', 'member3', '3'],
|
||||
['member1' => '1', 'member2' => '2', 'member3' => '3'],
|
||||
true
|
||||
],
|
||||
'partial intersection - with score' => [
|
||||
[1, 'member1', 2, 'member2', 3, 'member3'],
|
||||
[1, 'member1', 2, 'member2', 3, 'member4'],
|
||||
['member3', '3'],
|
||||
['member3' => '3'],
|
||||
true
|
||||
],
|
||||
];
|
||||
|
||||
@@ -111,19 +111,19 @@ class ZRANDMEMBER_test extends PredisCommandTestCase
|
||||
['member1', 'member1'],
|
||||
false
|
||||
],
|
||||
'one member - with score' => ['test-zset', 1, [1, 'member1'], ['member1', 1], true],
|
||||
'one member - with score' => ['test-zset', 1, [1, 'member1'], ['member1' => '1'], true],
|
||||
'multiple members - positive count - with score' => [
|
||||
'test-zset',
|
||||
2,
|
||||
[1, 'member1', 2, 'member2'],
|
||||
['member1', 1, 'member2', 2],
|
||||
['member1' => '1', 'member2' => '2'],
|
||||
true
|
||||
],
|
||||
'multiple members - negative count - with score' => [
|
||||
'test-zset',
|
||||
-2,
|
||||
-1,
|
||||
[1, 'member1'],
|
||||
['member1', 1, 'member1', 1],
|
||||
['member1' => '1'],
|
||||
true
|
||||
],
|
||||
];
|
||||
|
||||
@@ -39,6 +39,21 @@ class WithScoresTest extends PredisTestCase
|
||||
$this->assertSame($expectedArguments, $this->testClass->getArguments());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProvider
|
||||
* @param array $actualData
|
||||
* @param array $expectedResponse
|
||||
* @return void
|
||||
*/
|
||||
public function testParseDataReturnsCorrectResponse(array $actualData, array $expectedResponse): void
|
||||
{
|
||||
$this->testClass->setArguments($actualData);
|
||||
|
||||
$arguments = $this->testClass->getArguments();
|
||||
|
||||
$this->assertSame($expectedResponse, $this->testClass->parseResponse($arguments));
|
||||
}
|
||||
|
||||
public function valuesProvider(): array
|
||||
{
|
||||
return [
|
||||
@@ -47,4 +62,19 @@ class WithScoresTest extends PredisTestCase
|
||||
'with last argument non boolean' => [['test', 'test1', 1], ['test', 'test1', 1]],
|
||||
];
|
||||
}
|
||||
|
||||
public function dataProvider(): array
|
||||
{
|
||||
return [
|
||||
'without modifier' => [['member1', '1', 'member2', '2'], ['member1', '1', 'member2', '2']],
|
||||
'with wrong modifier' => [
|
||||
['member1', '1', 'member2', '2', 'WITHSCOREE'],
|
||||
['member1', '1', 'member2', '2', 'WITHSCOREE'],
|
||||
],
|
||||
'with modifier' => [
|
||||
['member1', '1', 'member2', '2', 'WITHSCORES'],
|
||||
['member1' => '1', 'member2' => '2'],
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user