@@ -162,6 +162,149 @@ async def test_json_get_formatting(self, glide_client: TGlideClient):
162162 expected_result = b'[\n ~{\n ~~"a":*1.0,\n ~~"b":*2,\n ~~"c":*{\n ~~~"d":*3,\n ~~~"e":*4\n ~~}\n ~}\n ]'
163163 assert result == expected_result
164164
165+ @pytest .mark .parametrize ("cluster_mode" , [True , False ])
166+ @pytest .mark .parametrize ("protocol" , [ProtocolVersion .RESP2 , ProtocolVersion .RESP3 ])
167+ async def test_json_mget (self , glide_client : TGlideClient ):
168+ key1 = get_random_string (5 )
169+ key2 = get_random_string (5 )
170+
171+ json1_value = {"a" : 1.0 , "b" : {"a" : 1 , "b" : 2.5 , "c" : True }}
172+ json2_value = {"a" : 3.0 , "b" : {"a" : 1 , "b" : 4 }}
173+
174+ assert (
175+ await json .set (glide_client , key1 , "$" , OuterJson .dumps (json1_value )) == OK
176+ )
177+ assert (
178+ await json .set (glide_client , key2 , "$" , OuterJson .dumps (json2_value )) == OK
179+ )
180+
181+ # Test with root JSONPath
182+ result = await json .mget (
183+ glide_client ,
184+ [key1 , key2 ],
185+ "$" ,
186+ )
187+ expected_result = [
188+ b'[{"a":1.0,"b":{"a":1,"b":2.5,"c":true}}]' ,
189+ b'[{"a":3.0,"b":{"a":1,"b":4}}]' ,
190+ ]
191+ assert result == expected_result
192+
193+ # Retrieves the full JSON objects from multiple keys.
194+ result = await json .mget (
195+ glide_client ,
196+ [key1 , key2 ],
197+ "." ,
198+ )
199+ expected_result = [
200+ b'{"a":1.0,"b":{"a":1,"b":2.5,"c":true}}' ,
201+ b'{"a":3.0,"b":{"a":1,"b":4}}' ,
202+ ]
203+ assert result == expected_result
204+
205+ result = await json .mget (
206+ glide_client ,
207+ [key1 , key2 ],
208+ "$.a" ,
209+ )
210+ expected_result = [b"[1.0]" , b"[3.0]" ]
211+ assert result == expected_result
212+
213+ # Retrieves the value of the 'b' field for multiple keys.
214+ result = await json .mget (
215+ glide_client ,
216+ [key1 , key2 ],
217+ "$.b" ,
218+ )
219+ expected_result = [b'[{"a":1,"b":2.5,"c":true}]' , b'[{"a":1,"b":4}]' ]
220+ assert result == expected_result
221+
222+ # Retrieves all values of 'b' fields using recursive path for multiple keys
223+ result = await json .mget (
224+ glide_client ,
225+ [key1 , key2 ],
226+ "$..b" ,
227+ )
228+ expected_result = [b'[{"a":1,"b":2.5,"c":true},2.5]' , b'[{"a":1,"b":4},4]' ]
229+ assert result == expected_result
230+
231+ # retrieves the value of the nested 'b.b' field for multiple keys
232+ result = await json .mget (
233+ glide_client ,
234+ [key1 , key2 ],
235+ ".b.b" ,
236+ )
237+ expected_result = [b"2.5" , b"4" ]
238+ assert result == expected_result
239+
240+ # JSONPath that exists in only one of the keys
241+ result = await json .mget (
242+ glide_client ,
243+ [key1 , key2 ],
244+ "$.b.c" ,
245+ )
246+ expected_result = [b"[true]" , b"[]" ]
247+ assert result == expected_result
248+
249+ # Legacy path that exists in only one of the keys
250+ result = await json .mget (
251+ glide_client ,
252+ [key1 , key2 ],
253+ ".b.c" ,
254+ )
255+ expected_result = [b"true" , None ]
256+ assert result == expected_result
257+
258+ # JSONPath doesn't exist
259+ result = await json .mget (
260+ glide_client ,
261+ [key1 , key2 ],
262+ "$non_existing_path" ,
263+ )
264+ expected_result = [b"[]" , b"[]" ]
265+ assert result == expected_result
266+
267+ # Legacy path doesn't exist
268+ result = await json .mget (
269+ glide_client ,
270+ [key1 , key2 ],
271+ ".non_existing_path" ,
272+ )
273+ assert result == [None , None ]
274+
275+ # JSONPath one key doesn't exist
276+ result = await json .mget (
277+ glide_client ,
278+ [key1 , "{non_existing_key}" ],
279+ "$.a" ,
280+ )
281+ assert result == [b"[1.0]" , None ]
282+
283+ # Legacy path one key doesn't exist
284+ result = await json .mget (
285+ glide_client ,
286+ [key1 , "{non_existing_key}" ],
287+ ".a" ,
288+ )
289+ assert result == [b"1.0" , None ]
290+
291+ # Both keys don't exist
292+ result = await json .mget (
293+ glide_client ,
294+ ["{non_existing_key}1" , "{non_existing_key}2" ],
295+ "$a" ,
296+ )
297+ assert result == [None , None ]
298+
299+ # Test with only one key
300+ result = await json .mget (
301+ glide_client ,
302+ [key1 ],
303+ "$.a" ,
304+ )
305+ expected_result = [b"[1.0]" ]
306+ assert result == expected_result
307+
165308 @pytest .mark .parametrize ("cluster_mode" , [True , False ])
166309 @pytest .mark .parametrize ("protocol" , [ProtocolVersion .RESP2 , ProtocolVersion .RESP3 ])
167310 async def test_json_del (self , glide_client : TGlideClient ):
0 commit comments