Skip to content

Commit d66482e

Browse files
Add testcases for non breaking changes in api response
1 parent 3328721 commit d66482e

File tree

4 files changed

+126
-7
lines changed

4 files changed

+126
-7
lines changed

imagekitio/models/results/UploadFileResult.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def __init__(
4444
self.ai_tags.append(AITags(**camel_dict_to_snake_dict(i)))
4545
else:
4646
self.ai_tags.append(AITags(None, None, None))
47-
self.version_info = VersionInfo(camel_dict_to_snake_dict(version_info))
47+
self.version_info = VersionInfo(**camel_dict_to_snake_dict(version_info))
4848
self.is_private_file = is_private_file
4949
self.custom_coordinates = custom_coordinates
5050
self.custom_metadata = custom_metadata
@@ -55,7 +55,7 @@ def __init__(
5555
self.embedded_metadata = embedded_metadata
5656
else:
5757
self.embedded_metadata: EmbeddedMetadata = EmbeddedMetadata(
58-
**embedded_metadata
58+
**camel_dict_to_snake_dict(embedded_metadata)
5959
)
6060
self.extension_status = extension_status
6161
self.file_type = file_type

imagekitio/utils/utils.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,7 @@ def throw_other_exception(response: Response):
7676

7777

7878
def convert_to_response_object(resp: Response, response_object):
79-
resp_json = resp.json()
80-
embeddedMetadata = resp_json.get("embeddedMetadata")
81-
if embeddedMetadata != None:
82-
resp_json["embeddedMetadata"] = camel_dict_to_snake_dict(embeddedMetadata)
83-
res_new = loads(dumps(camel_dict_to_snake_dict(resp_json)))
79+
res_new = loads(dumps(camel_dict_to_snake_dict(resp.json())))
8480
u = response_object(**res_new)
8581
u.response_metadata = ResponseMetadata(resp.json(), resp.status_code, resp.headers)
8682
return u

tests/test_custom_metadata_fields_ops.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,88 @@ def test_get_custom_metadata_fields_succeeds_with_include_deleted_true(self):
213213
responses.calls[0].request.url,
214214
)
215215

216+
@responses.activate
217+
def test_get_custom_metadata_fields_succeeds_with_additional_attributes_in_response(self):
218+
"""
219+
Tests if get_custom_metadata_fields succeeds with additional responses
220+
"""
221+
URL.API_BASE_URL = "http://test.com"
222+
url = "{}/v1/customMetadataFields".format(URL.API_BASE_URL)
223+
headers = create_headers_for_test()
224+
responses.add(
225+
responses.GET,
226+
url,
227+
body="""[{
228+
"id": "62a9d5f6db485107347bb7f2",
229+
"name": "test10",
230+
"label": "test10",
231+
"schema": {
232+
"type": "Number",
233+
"isValueRequired": false,
234+
"minValue": 10,
235+
"maxValue": 1000,
236+
"currentValue":100
237+
}
238+
}, {
239+
"id": "62aab2cfdb4851833b8f5e64",
240+
"name": "test11",
241+
"label": "test11",
242+
"schema": {
243+
"type": "Number",
244+
"isValueRequired": false,
245+
"minValue": 10,
246+
"maxValue": 1000,
247+
"currentValue":1000
248+
}
249+
}]""",
250+
match=[matchers.query_string_matcher("includeDeleted=true")],
251+
headers=headers,
252+
)
253+
resp = self.client.get_custom_metadata_fields(include_deleted=True)
254+
255+
mock_response_metadata = {
256+
"raw": [
257+
{
258+
"id": "62a9d5f6db485107347bb7f2",
259+
"name": "test10",
260+
"label": "test10",
261+
"schema": {
262+
"type": "Number",
263+
"isValueRequired": False,
264+
"minValue": 10,
265+
"maxValue": 1000,
266+
"currentValue":100
267+
},
268+
},
269+
{
270+
"id": "62aab2cfdb4851833b8f5e64",
271+
"name": "test11",
272+
"label": "test11",
273+
"schema": {
274+
"type": "Number",
275+
"isValueRequired": False,
276+
"minValue": 10,
277+
"maxValue": 1000,
278+
"currentValue":1000
279+
},
280+
},
281+
],
282+
"httpStatusCode": 200,
283+
"headers": {
284+
"Content-Type": "text/plain",
285+
"Accept-Encoding": "gzip, deflate",
286+
"Authorization": "Basic ZmFrZTEyMjo=",
287+
},
288+
}
289+
290+
self.assertEqual(
291+
camel_dict_to_snake_dict(mock_response_metadata),
292+
resp.response_metadata.__dict__,
293+
)
294+
self.assertEqual(resp.list[0].schema.current_value,100)
295+
self.assertEqual(resp.list[1].schema.current_value,1000)
296+
self.assertEqual(resp.list[0].random,None)
297+
216298
@responses.activate
217299
def test_delete_custom_metadata_fields_succeeds(self):
218300
"""

tests/test_files_ops.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,6 +1184,47 @@ def test_bulk_file_delete_succeeds(self):
11841184
)
11851185

11861186
@responses.activate
1187+
def test_bulk_file_delete_succeeds_and_recieves_extra_non_breaking_changes_from_apii(self):
1188+
"""Test bulk_delete on authenticated request
1189+
this function tests if bulk_file_delete working properly
1190+
"""
1191+
1192+
URL.API_BASE_URL = "http://test.com"
1193+
url = URL.API_BASE_URL + "/v1/files" + URL.BULK_FILE_DELETE
1194+
headers = {"Content-Type": "application/json"}
1195+
headers.update(get_auth_headers_for_test())
1196+
1197+
responses.add(
1198+
responses.POST,
1199+
url,
1200+
body='{"successfullyDeletedFileIds": ["fake_123"],"nonDeletedFields":["fake_222"]}',
1201+
headers=headers,
1202+
)
1203+
1204+
resp = self.client.bulk_file_delete(self.bulk_delete_ids)
1205+
1206+
mock_response_metadata = {
1207+
"raw": {"successfullyDeletedFileIds": ["fake_123"],"nonDeletedFields":["fake_222"]},
1208+
"httpStatusCode": 200,
1209+
"headers": {
1210+
"Content-Type": "text/plain, application/json",
1211+
"Authorization": "Basic ZmFrZTEyMjo=",
1212+
},
1213+
}
1214+
self.assertEqual(
1215+
'{"fileIds": ["fake_123", "fake_222"]}', responses.calls[0].request.body
1216+
)
1217+
self.assertEqual(
1218+
camel_dict_to_snake_dict(mock_response_metadata),
1219+
resp.response_metadata.__dict__,
1220+
)
1221+
self.assertEqual(["fake_123"], resp.successfully_deleted_file_ids)
1222+
self.assertEqual(["fake_222"], resp.non_deleted_fields)
1223+
self.assertEqual(
1224+
"http://test.com/v1/files/batch/deleteByFileIds",
1225+
responses.calls[0].request.url,
1226+
)
1227+
@responses.activate
11871228
def test_bulk_file_delete_fails_with_404_exception(self) -> None:
11881229
"""Test bulk_file_delete raises 404 error"""
11891230

0 commit comments

Comments
 (0)