getCommand(); $command->setArguments($actualArguments); $this->assertSameValues($expectedArguments, $command->getArguments()); } /** * @group disconnected * @dataProvider responsesProvider */ public function testParseResponse(array $arguments, array $actualResponse, array $expectedResponse): void { $command = $this->getCommand(); $command->setArguments($arguments); $this->assertSame($expectedResponse, $command->parseResponse($actualResponse)); } /** * @group disconnected */ public function testPrefixKeys(): void { /** @var PrefixableCommand $command */ $command = $this->getCommand(); $actualArguments = ['arg1']; $prefix = 'prefix:'; $expectedArguments = ['prefix:arg1']; $command->setArguments($actualArguments); $command->prefixKeys($prefix); $this->assertSame($expectedArguments, $command->getArguments()); } /** * @group connected * @group relay-resp3 * @dataProvider structureProvider * @param array $reserveArguments * @param array $addArguments * @param array $listArguments * @param array $expectedResponse * @return void * @requiresRedisBfVersion >= 2.0.0 */ public function testReturnsListOfItemsWithinTopKStructure( array $reserveArguments, array $addArguments, array $listArguments, array $expectedResponse ): void { $redis = $this->getClient(); $redis->topkreserve(...$reserveArguments); $redis->topkadd(...$addArguments); $actualResponse = $redis->topklist(...$listArguments); $this->assertEquals($expectedResponse, $actualResponse); } /** * @group connected * @return void * @requiresRedisBfVersion >= 2.6.0 */ public function testReturnsListOfItemsWithinTopKStructureResp3(): void { $redis = $this->getResp3Client(); $redis->topkreserve('key', 50); $redis->topkadd('key', 1, 2, 2, 3, 3, 3); $actualResponse = $redis->topklist('key'); $this->assertEquals(['3', '2', '1'], $actualResponse); } /** * @group connected * @return void * @requiresRedisBfVersion >= 2.0.0 */ public function testThrowsExceptionOnNonExistingKey(): void { $redis = $this->getClient(); $this->expectException(ServerException::class); $this->expectExceptionMessage('TopK: key does not exist'); $redis->topklist('key', true); } public function argumentsProvider(): array { return [ 'with default argument' => [ ['key'], ['key'], ], 'with WITHCOUNT modifier equals true' => [ ['key', true], ['key', 'WITHCOUNT'], ], 'with WITHCOUNT modifier equals false' => [ ['key', false], ['key'], ], ]; } public function responsesProvider(): array { return [ 'without WITHCOUNT modifier' => [ ['foo'], ['foo', 'bar'], ['foo', 'bar'], ], 'with WITHCOUNT modifier' => [ ['foo', true], ['foo', 12, 'bar', 13], ['foo' => 12, 'bar' => 13], ], ]; } public function structureProvider(): array { return [ 'with default arguments' => [ ['key', 50], ['key', 1, 2, 2, 3, 3, 3], ['key', false], ['3', '2', '1'], ], 'with WITHCOUNT modifier' => [ ['key', 50], ['key', 1, 2, 2, 3, 3, 3], ['key', true], ['3' => 3, '2' => 2, '1' => 1], ], ]; } }