@@ -27,15 +27,21 @@ def assertNoPendingMigration(self, app_name): # pylint: disable=invalid-name
27
27
message = f"Missing migration. Run python manage.py makemigrations { app_name } "
28
28
self .assertIn ("No changes" , out .getvalue (), msg = message )
29
29
30
- def assertUUIDFilePath (self , prefix , name , extension , pk , file ): # pylint: disable=invalid-name
31
- expected_path = r"^{prefix}/{pk}/{name}_{uuid}\.{extension}$" .format (
32
- prefix = prefix ,
33
- pk = pk ,
34
- name = name ,
35
- extension = extension ,
36
- uuid = r"[0-9a-f]{8}\-[0-9a-f]{4}\-4[0-9a-f]{3}\-[89ab][0-9a-f]{3}\-[0-9a-f]{12}" ,
30
+ def uuid_file_path_regex (self , prefix , pk , name , extension ):
31
+ uuid_regex = r"[0-9a-f]{8}\-[0-9a-f]{4}\-4[0-9a-f]{3}\-[89ab][0-9a-f]{3}\-[0-9a-f]{12}"
32
+ return re .compile (
33
+ r"^{prefix}/{pk}/{name}_{uuid}\.{extension}$" .format (
34
+ prefix = prefix ,
35
+ pk = pk ,
36
+ name = name ,
37
+ extension = extension ,
38
+ uuid = uuid_regex ,
39
+ )
37
40
)
38
- self .assertTrue (re .match (expected_path , str (file )))
41
+
42
+ def assertUUIDFilePath (self , prefix , name , extension , pk , file ): # pylint: disable=invalid-name
43
+ pattern = self .uuid_file_path_regex (prefix = prefix , pk = pk , name = name , extension = extension )
44
+ self .assertTrue (pattern .match (str (file )))
39
45
40
46
def assertResponseMatch (self , expected , received ): # pylint: disable=invalid-name
41
47
def _assert_dict (expected_item , received_item , idx = None ):
@@ -69,13 +75,23 @@ def _compare(expected_item, received_item):
69
75
if expected_item is ANY :
70
76
return {}
71
77
78
+ if isinstance (expected_item , re .Pattern ):
79
+ if not expected_item .match (received_item ):
80
+ msg = f"Received `{ received_item } `, but expected to match `{ expected_item .pattern } `"
81
+ return {"__match__" : msg }
82
+ return {}
83
+
72
84
if isinstance (expected_item , list ) and isinstance (received_item , list ):
73
85
if len (expected_item ) != len (received_item ):
74
86
msg = f"Received { len (received_item )} items and it was expected to have { len (expected_item )} "
75
87
return {"__len__" : msg }
76
88
89
+ all_errors = {}
77
90
for _idx , (_expected_item , _received_item ) in enumerate (zip (expected_item , received_item )):
78
- return _assert_dict (idx = _idx , expected_item = _expected_item , received_item = _received_item )
91
+ inner_errors = _assert_dict (idx = _idx , expected_item = _expected_item , received_item = _received_item )
92
+ for inner_key , inner_error in inner_errors .items ():
93
+ all_errors [f"[#{ _idx } ] { inner_key } " ] = inner_error
94
+ return all_errors
79
95
elif isinstance (expected_item , dict ) and isinstance (received_item , dict ):
80
96
return _assert_dict (expected_item = expected_item , received_item = received_item )
81
97
else :
0 commit comments