Skip to content

Commit 2fec316

Browse files
Fix tests
1 parent a24a9e7 commit 2fec316

2 files changed

Lines changed: 44 additions & 5 deletions

File tree

test/helper_test.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
import sys
77
import time
88
import traceback
9+
import unittest
910
from contextlib import contextmanager
1011
from datetime import timedelta, tzinfo
1112
from functools import wraps
1213

1314
import six
1415
from urllib3 import HTTPResponse
1516
from urllib3._collections import HTTPHeaderDict
17+
from collections import defaultdict
1618

1719
from cloudinary import utils, logger, api
1820
from cloudinary.exceptions import NotFound
@@ -249,3 +251,40 @@ def should_test_addon(addon):
249251
return True
250252
cld_test_addons_list = [addon_name.strip() for addon_name in cld_test_addons.split(',')]
251253
return addon in cld_test_addons_list
254+
255+
256+
class CldTestCase(unittest.TestCase):
257+
"""
258+
A custom test case class that extends unittest.TestCase.
259+
It provides the assertCountEqual method for Python 2.7 compatibility,
260+
handling unhashable elements by serializing them.
261+
"""
262+
263+
if six.PY2:
264+
def assertCountEqual(self, list1, list2, msg=None):
265+
"""
266+
Fail if two sequences do not contain the same elements the same number of times,
267+
regardless of their order. Handles unhashable elements by serializing them.
268+
This is a compatibility method for Python 2.7.
269+
"""
270+
271+
def serialize_item(item):
272+
try:
273+
# Attempt to serialize the item to a JSON string
274+
return json.dumps(item, sort_keys=True)
275+
except (TypeError, ValueError):
276+
# Fallback: use the string representation
277+
return str(item)
278+
279+
def count_elements(lst):
280+
counts = defaultdict(int)
281+
for item in lst:
282+
serialized = serialize_item(item)
283+
counts[serialized] += 1
284+
return counts
285+
286+
count1 = count_elements(list1)
287+
count2 = count_elements(list2)
288+
if count1 != count2:
289+
standard_msg = '%s != %s' % (count1, count2)
290+
self.fail(self._formatMessage(msg, standard_msg))

test/test_uploader.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from test.helper_test import uploader_response_mock, SUFFIX, TEST_IMAGE, get_params, get_headers, TEST_ICON, TEST_DOC, \
1818
REMOTE_TEST_IMAGE, UTC, populate_large_file, TEST_UNICODE_IMAGE, get_uri, get_method, get_param, \
1919
cleanup_test_resources_by_tag, cleanup_test_transformation, cleanup_test_resources, EVAL_STR, ON_SUCCESS_STR, \
20-
URLLIB3_REQUEST, patch, retry_assertion
20+
URLLIB3_REQUEST, patch, retry_assertion, CldTestCase
2121
from test.test_utils import TEST_ID, TEST_FOLDER
2222

2323
MOCK_RESPONSE = uploader_response_mock()
@@ -77,7 +77,7 @@
7777
disable_warnings()
7878

7979

80-
class UploaderTest(unittest.TestCase):
80+
class UploaderTest(CldTestCase):
8181
rbp_trans = {"angle": 45, "crop": "scale"}
8282
rbp_format = "png"
8383
rbp_values = [206, 50]
@@ -757,15 +757,15 @@ def test_upload_large(self):
757757
resource = uploader.upload_large(temp_file_name, chunk_size=LARGE_CHUNK_SIZE,
758758
tags=["upload_large_tag", UNIQUE_TAG])
759759

760-
self.assertEqual(resource["tags"], ["upload_large_tag", UNIQUE_TAG])
760+
self.assertCountEqual(resource["tags"], ["upload_large_tag", UNIQUE_TAG])
761761
self.assertEqual(resource["resource_type"], "raw")
762762
self.assertEqual(resource["original_filename"], temp_file_filename)
763763

764764
resource2 = uploader.upload_large(temp_file_name, chunk_size=LARGE_CHUNK_SIZE,
765765
tags=["upload_large_tag", UNIQUE_TAG], resource_type="image",
766766
use_filename=True, unique_filename=False, filename=filename)
767767

768-
self.assertEqual(resource2["tags"], ["upload_large_tag", UNIQUE_TAG])
768+
self.assertCountEqual(resource2["tags"], ["upload_large_tag", UNIQUE_TAG])
769769
self.assertEqual(resource2["resource_type"], "image")
770770
self.assertEqual(resource2["original_filename"], filename)
771771
self.assertEqual(resource2["original_filename"], resource2["public_id"])
@@ -775,7 +775,7 @@ def test_upload_large(self):
775775
resource3 = uploader.upload_large(temp_file_name, chunk_size=LARGE_FILE_SIZE,
776776
tags=["upload_large_tag", UNIQUE_TAG])
777777

778-
self.assertEqual(resource3["tags"], ["upload_large_tag", UNIQUE_TAG])
778+
self.assertCountEqual(resource3["tags"], ["upload_large_tag", UNIQUE_TAG])
779779
self.assertEqual(resource3["resource_type"], "raw")
780780

781781
@unittest.skipUnless(cloudinary.config().api_secret, "requires api_key/api_secret")

0 commit comments

Comments
 (0)