1+ import copy
12from datetime import datetime , date
23
34import jsonpickle
@@ -1099,4 +1100,73 @@ def test_apply_unboxing_function(self, value, unboxing_function, is_array, is_di
10991100 is_array_of_map ,
11001101 is_map_of_array ,
11011102 dimension_count )
1102- assert result == expected
1103+ assert result == expected
1104+
1105+ @pytest .mark .parametrize (
1106+ "dictionary, pointer, expected" ,
1107+ [
1108+ ({"foo" : "bar" }, "/foo" , "bar" ), # basic access
1109+ ({"a" : {"b" : {"c" : 1 }}}, "/a/b/c" , 1 ), # nested path
1110+ ({"list" : [10 , 20 , 30 ]}, "/list/1" , 20 ), # list index
1111+ ({}, "/missing" , None ), # missing key
1112+ ({"x" : {"y" : 5 }}, "/x/z" , None ), # partial match but invalid final key
1113+ ({"" : "empty_key" }, "/" , "empty_key" ), # root-level empty string key
1114+ ]
1115+ )
1116+ def test_get_value_by_json_pointer_valid_and_invalid (self , dictionary , pointer , expected ):
1117+ result = ApiHelper .get_value_by_json_pointer (dictionary , pointer )
1118+ assert result == expected
1119+
1120+ def test_get_value_by_json_pointer_raises_invalid_pointer (self ):
1121+ # Pointer with invalid format (should raise and be caught internally)
1122+ result = ApiHelper .get_value_by_json_pointer ({"foo" : "bar" }, "invalid_pointer" )
1123+ assert result is None
1124+
1125+ @pytest .mark .parametrize (
1126+ "pointer, json_body, json_headers, expected" ,
1127+ [
1128+ ("$response.body#/name" , '{"name": "Alice"}' , {}, "Alice" ),
1129+ ("$response.body#/details/age" , '{"details": {"age": 30}}' , {}, 30 ),
1130+ ("$response.headers#/X-Request-ID" , "" , {"X-Request-ID" : "abc-123" }, "abc-123" ),
1131+ ("$response.body#/missing" , '{"name": "Alice"}' , {}, None ),
1132+ ("$response.headers#/missing" , "" , {"X-Request-ID" : "abc-123" }, None ),
1133+ ("$response.unknown#/path" , '{"some": "data"}' , {}, None ),
1134+ ("" , '{"some": "data"}' , {}, None ),
1135+ (None , '{"some": "data"}' , {}, None ),
1136+ ]
1137+ )
1138+ def test_resolve_response_pointer (self , pointer , json_body , json_headers , expected ):
1139+ result = ApiHelper .resolve_response_pointer (pointer , json_body , json_headers )
1140+ assert result == expected
1141+
1142+ @pytest .mark .parametrize (
1143+ "json_pointer, expected" ,
1144+ [
1145+ ("$response.body#/name" , ("$response.body" , "/name" )),
1146+ ("$response.headers#/X-Header" , ("$response.headers" , "/X-Header" )),
1147+ ("$response.body#" , ("$response.body" , "" )),
1148+ ("$response.body" , ("$response.body" , "" )),
1149+ ("" , None ),
1150+ (None , None ),
1151+ ]
1152+ )
1153+ def test_split_into_parts (self , json_pointer , expected ):
1154+ result = ApiHelper .split_into_parts (json_pointer )
1155+ assert result == expected
1156+
1157+ @pytest .mark .parametrize (
1158+ "initial_dict, pointer, new_value, inplace, expected_dict" ,
1159+ [
1160+ ({"name" : "Alice" }, "/name" , "Bob" , True , {"name" : "Bob" }),
1161+ ({"a" : {"b" : 1 }}, "/a/b" , 2 , True , {"a" : {"b" : 2 }}),
1162+ ({}, "/new/key" , "value" , True , {"new" : {"key" : "value" }}),
1163+ ({"x" : 1 }, "/x" , {"nested" : "yes" }, False , {"x" : {"nested" : "yes" }}),
1164+ ]
1165+ )
1166+ def test_update_entry_by_json_pointer (self , initial_dict , pointer , new_value , inplace , expected_dict ):
1167+ original_copy = copy .deepcopy (initial_dict )
1168+ result = ApiHelper .update_entry_by_json_pointer (initial_dict , pointer , new_value , inplace = inplace )
1169+
1170+ assert result == expected_dict
1171+ if not inplace :
1172+ assert initial_dict == original_copy
0 commit comments