getCommand(); $command->setArguments($actualArguments); $this->assertSame($expectedArguments, $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']; $prefix = 'prefix:'; $expectedArguments = ['prefix:arg1']; $command->setArguments($actualArguments); $command->prefixKeys($prefix); $this->assertSame($expectedArguments, $command->getArguments()); } /** * @group connected * @group relay-resp3 * @dataProvider jsonProvider * @param string $key * @param string $defaultJson * @param string $appendedJson * @param string $path * @param string|null $nxXxArgument * @param string|null $expectedResponse * @param string $expectedJson * @return void * @requiresRedisJsonVersion >= 1.0.0 */ public function testSetCorrectJsonValueAndReturnsCorrespondingResponse( string $key, string $defaultJson, string $appendedJson, string $path, ?string $nxXxArgument, ?string $expectedResponse, string $expectedJson ): void { $redis = $this->getClient(); $this->assertEquals('OK', $redis->jsonset($key, '$', $defaultJson)); $this->assertEquals($expectedResponse, $redis->jsonset($key, $path, $appendedJson, $nxXxArgument)); $this->assertSame($expectedJson, $redis->jsonget($key)); } /** * @group connected * @return void * @requiresRedisJsonVersion >= 2.6.1 */ public function testSetCorrectJsonValueAndReturnsCorrespondingResponseResp3(): void { $redis = $this->getResp3Client(); $this->assertEquals('OK', $redis->jsonset('key', '$', '{"key1":"value1","key2":"value2"}')); $this->assertEquals('OK', $redis->jsonset('key', '$', '{"key3":"value3"}')); $this->assertSame('{"key3":"value3"}', $redis->jsonget('key')); } /** * @group connected * @group relay-resp3 * @return void * @requiresRedisJsonVersion >= 1.0.0 */ public function testThrowsExceptionOnUnexpectedValueGiven(): void { $redis = $this->getClient(); $this->expectException(UnexpectedValueException::class); $this->expectExceptionMessage('Argument accepts only: nx, xx values'); $redis->jsonset('key', '$', 'value', 'wrong'); } public function argumentsProvider(): array { return [ 'with default arguments' => [ ['key', 'path', 'value'], ['key', 'path', 'value'], ], 'with NX argument' => [ ['key', 'path', 'value', 'nx'], ['key', 'path', 'value', 'NX'], ], 'with XX argument' => [ ['key', 'path', 'value', 'xx'], ['key', 'path', 'value', 'XX'], ], ]; } public function jsonProvider(): array { return [ 'override json' => [ 'key', '{"key1":"value1","key2":"value2"}', '{"key3":"value3"}', '$', null, 'OK', '{"key3":"value3"}', ], 'override certain key - without nxXx argument' => [ 'key', '{"key1":"value1","key2":"value2"}', '"value3"', '$.key2', null, 'OK', '{"key1":"value1","key2":"value3"}', ], 'append to json - without nxXx argument' => [ 'key', '{"key1":"value1","key2":"value2"}', '"value3"', '$.key3', null, 'OK', '{"key1":"value1","key2":"value2","key3":"value3"}', ], 'override certain key - with XX argument' => [ 'key', '{"key1":"value1","key2":"value2"}', '"value3"', '$.key2', 'xx', 'OK', '{"key1":"value1","key2":"value3"}', ], 'append to json - with NX argument' => [ 'key', '{"key1":"value1","key2":"value2"}', '"value3"', '$.key3', 'nx', 'OK', '{"key1":"value1","key2":"value2","key3":"value3"}', ], 'override failed with XX argument' => [ 'key', '{"key1":"value1","key2":"value2"}', '"value3"', '$.key3', 'xx', null, '{"key1":"value1","key2":"value2"}', ], 'append failed with NX argument' => [ 'key', '{"key1":"value1","key2":"value2"}', '"value2"', '$.key2', 'nx', null, '{"key1":"value1","key2":"value2"}', ], ]; } }