@@ -114,6 +114,15 @@ def fix_mock_response_usage(match):
114114 return test_func
115115
116116 content = re .sub (pattern5 , fix_mock_response_usage , content , flags = re .DOTALL )
117+
118+ # Pattern 6: Replace assert result == mock_response.json.return_value with assert result == expected_data
119+ pattern6 = r'([ \t]*assert\s+.*?==\s*)mock_response\.json\.return_value'
120+
121+ def fix_assertions (match ):
122+ before_part = match .group (1 )
123+ return f"{ before_part } mock_response.json()"
124+
125+ content = re .sub (pattern6 , fix_assertions , content )
117126
118127 # If no changes were made, return False
119128 if content == original_content :
@@ -130,37 +139,68 @@ def fix_mock_response_usage(match):
130139def find_files_to_transform () -> List [Tuple [str , bool ]]:
131140 """Find all test files that need to be transformed."""
132141 test_dir = Path ("tests" )
142+ # Allow specifying a subdirectory
143+ if len (sys .argv ) > 1 and not sys .argv [1 ].startswith ("--" ):
144+ test_dir = Path (sys .argv [1 ])
145+ print (f"Searching in directory: { test_dir } " )
146+
133147 result = []
134-
148+ verbose = "--verbose" in sys .argv
149+
135150 for root , _ , files in os .walk (test_dir ):
136151 for file in files :
137152 if file .endswith (".py" ) and file .startswith ("test_" ):
138153 file_path = os .path .join (root , file )
139-
140- # Check if file uses mock_response directly
154+
155+ # First check for any mention of mock_response
156+ has_mock_response = bool (find_pattern_in_file (file_path , r"mock_response" ))
157+
158+ if not has_mock_response :
159+ continue
160+
161+ # More detailed patterns
162+ # Check if file uses mock_response directly as parameter
141163 uses_mock_response = bool (
142164 find_pattern_in_file (
143165 file_path , r"def\s+test_\w+\([^)]*,\s*mock_response\s*[,)]"
144166 )
145167 )
146-
168+
147169 # Check if file directly manipulates mock_response
148170 manipulates_mock_response = bool (
149171 find_pattern_in_file (
150172 file_path , r"mock_response\.(json\.return_value|status_code)\s*="
151173 )
152174 )
153-
175+
176+ # Check if file uses mock_response.json.return_value in assertions
177+ uses_return_value_in_assertions = bool (
178+ find_pattern_in_file (
179+ file_path , r"assert\s+.*?=.*?mock_response\.json\.return_value"
180+ )
181+ )
182+
154183 # Check if file uses mock_response_factory
155184 uses_factory = bool (
156185 find_pattern_in_file (file_path , r"mock_response\s*=\s*mock_response_factory" )
157186 )
158-
187+
159188 # Determine if file needs transformation
160- needs_transform = (
161- uses_mock_response or manipulates_mock_response
162- ) and not uses_factory
163-
189+ needs_transform = (uses_mock_response or manipulates_mock_response ) and not uses_factory
190+
191+ # Also flag files that use factory but still use mock_response.json.return_value in assertions
192+ if uses_factory and uses_return_value_in_assertions and not needs_transform :
193+ needs_transform = True
194+
195+ if verbose or needs_transform :
196+ print (f"File: { file_path } " )
197+ print (f" Has mock_response: { has_mock_response } " )
198+ print (f" Uses as parameter: { uses_mock_response } " )
199+ print (f" Manipulates: { manipulates_mock_response } " )
200+ print (f" Uses in assertions: { uses_return_value_in_assertions } " )
201+ print (f" Uses factory: { uses_factory } " )
202+ print (f" Needs transform: { needs_transform } " )
203+
164204 if needs_transform :
165205 result .append ((file_path , needs_transform ))
166206
0 commit comments