88
99import pytest
1010import responses
11+ from responses .matchers import query_string_matcher
1112from simple_salesforce import SalesforceGeneralError
1213
1314from cumulusci .core import exceptions as exc
@@ -73,9 +74,9 @@ def setup_method(self):
7374
7475 def _mock_apex_class_query (self , name = "TestClass_TEST" , namespace = None ):
7576 namespace_param = "null" if namespace is None else f"%27{ namespace } %27"
76- url = (
77- self . base_tooling_url
78- + "query/? q=SELECT+Id%2C+Name+"
77+ url = self . base_tooling_url + "query/"
78+ query_string = (
79+ " q=SELECT+Id%2C+Name+"
7980 + f"FROM+ApexClass+WHERE+NamespacePrefix+%3D+{ namespace_param } "
8081 + "+AND+%28Name+LIKE+%27%25_TEST%27%29"
8182 )
@@ -85,7 +86,10 @@ def _mock_apex_class_query(self, name="TestClass_TEST", namespace=None):
8586 "totalSize" : 1 ,
8687 }
8788 responses .add (
88- responses .GET , url , match_querystring = True , json = expected_response
89+ responses .GET ,
90+ url ,
91+ match = [query_string_matcher (query_string )],
92+ json = expected_response ,
8993 )
9094
9195 def _get_mock_test_query_results (self , methodnames , outcomes , messages ):
@@ -163,16 +167,14 @@ def _get_mock_test_query_results(self, methodnames, outcomes, messages):
163167
164168 def _get_mock_test_query_url (self , job_id ):
165169 return (
166- self .base_tooling_url
167- + "query/?q=%0ASELECT+Id%2CApexClassId%2CTestTimestamp%2C%0A+++++++Message%2CMethodName%2COutcome%2C%0A+++++++RunTime%2CStackTrace%2C%0A+++++++%28SELECT%0A++++++++++Id%2CCallouts%2CAsyncCalls%2CDmlRows%2CEmail%2C%0A++++++++++LimitContext%2CLimitExceptions%2CMobilePush%2C%0A++++++++++QueryRows%2CSosl%2CCpu%2CDml%2CSoql%0A++++++++FROM+ApexTestResults%29%0AFROM+ApexTestResult%0AWHERE+AsyncApexJobId%3D%27{}%27%0A" .format (
168- job_id
169- )
170+ self .base_tooling_url + "query/" ,
171+ f"q=%0ASELECT+Id%2CApexClassId%2CTestTimestamp%2C%0A+++++++Message%2CMethodName%2COutcome%2C%0A+++++++RunTime%2CStackTrace%2C%0A+++++++%28SELECT%0A++++++++++Id%2CCallouts%2CAsyncCalls%2CDmlRows%2CEmail%2C%0A++++++++++LimitContext%2CLimitExceptions%2CMobilePush%2C%0A++++++++++QueryRows%2CSosl%2CCpu%2CDml%2CSoql%0A++++++++FROM+ApexTestResults%29%0AFROM+ApexTestResult%0AWHERE+AsyncApexJobId%3D%27{ job_id } %27%0A" ,
170172 )
171173
172174 def _get_mock_testqueueitem_status_query_url (self , job_id ):
173175 return (
174- self .base_tooling_url
175- + f"query/? q=SELECT+Id%2C+Status%2C+ExtendedStatus%2C+ApexClassId+FROM+ApexTestQueueItem+WHERE+ParentJobId+%3D+%27{ job_id } %27+AND+Status+%3D+%27Failed%27"
176+ ( self .base_tooling_url + "query/" ),
177+ f" q=SELECT+Id%2C+Status%2C+ExtendedStatus%2C+ApexClassId+FROM+ApexTestQueueItem+WHERE+ParentJobId+%3D+%27{ job_id } %27+AND+Status+%3D+%27Failed%27",
176178 )
177179
178180 def _mock_get_test_results (
@@ -182,44 +184,50 @@ def _mock_get_test_results(
182184 job_id = "JOB_ID1234567" ,
183185 methodname = ["TestMethod" ],
184186 ):
185- url = self ._get_mock_test_query_url (job_id )
187+ url , query_string = self ._get_mock_test_query_url (job_id )
186188
187189 expected_response = self ._get_mock_test_query_results (
188190 methodname , [outcome ], [message ]
189191 )
190192 responses .add (
191- responses .GET , url , match_querystring = True , json = expected_response
193+ responses .GET ,
194+ url ,
195+ match = [query_string_matcher (query_string )],
196+ json = expected_response ,
192197 )
193198
194199 def _mock_get_test_results_multiple (
195200 self , method_names , outcomes , messages , job_id = "JOB_ID1234567"
196201 ):
197- url = self ._get_mock_test_query_url (job_id )
202+ url , query_string = self ._get_mock_test_query_url (job_id )
198203
199204 expected_response = self ._get_mock_test_query_results (
200205 method_names , outcomes , messages
201206 )
202207 responses .add (
203- responses .GET , url , match_querystring = True , json = expected_response
208+ responses .GET ,
209+ url ,
210+ match = [query_string_matcher (query_string )],
211+ json = expected_response ,
204212 )
205213
206214 def _mock_get_failed_test_classes (self , job_id = "JOB_ID1234567" ):
207- url = self ._get_mock_testqueueitem_status_query_url (job_id )
215+ url , query_string = self ._get_mock_testqueueitem_status_query_url (job_id )
208216
209217 responses .add (
210218 responses .GET ,
211219 url ,
212- match_querystring = True ,
220+ match = [ query_string_matcher ( query_string )] ,
213221 json = {"totalSize" : 0 , "records" : [], "done" : True },
214222 )
215223
216224 def _mock_get_failed_test_classes_failure (self , job_id = "JOB_ID1234567" ):
217- url = self ._get_mock_testqueueitem_status_query_url (job_id )
225+ url , query_string = self ._get_mock_testqueueitem_status_query_url (job_id )
218226
219227 responses .add (
220228 responses .GET ,
221229 url ,
222- match_querystring = True ,
230+ match = [ query_string_matcher ( query_string )] ,
223231 json = {
224232 "totalSize" : 1 ,
225233 "records" : [
@@ -235,14 +243,15 @@ def _mock_get_failed_test_classes_failure(self, job_id="JOB_ID1234567"):
235243 )
236244
237245 def _mock_get_symboltable (self ):
238- url = (
239- self . base_tooling_url
240- + "query/? q=SELECT+SymbolTable+FROM+ApexClass+WHERE+Name%3D%27TestClass_TEST%27"
246+ url = self . base_tooling_url + "query/"
247+ query_string = (
248+ " q=SELECT+SymbolTable+FROM+ApexClass+WHERE+Name%3D%27TestClass_TEST%27"
241249 )
242250
243251 responses .add (
244252 responses .GET ,
245253 url ,
254+ match = [query_string_matcher (query_string )],
246255 json = {
247256 "records" : [
248257 {
@@ -265,9 +274,9 @@ def _mock_get_symboltable_failure(self):
265274 responses .add (responses .GET , url , json = {"records" : []})
266275
267276 def _mock_tests_complete (self , job_id = "JOB_ID1234567" ):
268- url = (
269- self . base_tooling_url
270- + "query/? q=SELECT+Id%2C+Status%2C+"
277+ url = self . base_tooling_url + "query/"
278+ query_string = (
279+ " q=SELECT+Id%2C+Status%2C+"
271280 + "ApexClassId+FROM+ApexTestQueueItem+WHERE+ParentJobId+%3D+%27"
272281 + "{}%27" .format (job_id )
273282 )
@@ -277,23 +286,29 @@ def _mock_tests_complete(self, job_id="JOB_ID1234567"):
277286 "records" : [{"Status" : "Completed" }],
278287 }
279288 responses .add (
280- responses .GET , url , match_querystring = True , json = expected_response
289+ responses .GET ,
290+ url ,
291+ match = [query_string_matcher (query_string )],
292+ json = expected_response ,
281293 )
282294
283295 def _mock_tests_processing (self , job_id = "JOB_ID1234567" ):
284- url = (
285- self . base_tooling_url
286- + "query/? q=SELECT+Id%2C+Status%2C+"
296+ url = self . base_tooling_url + "query/"
297+ query_string = (
298+ " q=SELECT+Id%2C+Status%2C+"
287299 + "ApexClassId+FROM+ApexTestQueueItem+WHERE+ParentJobId+%3D+%27"
288- + "{ }%27". format ( job_id )
300+ + f" { job_id } %27"
289301 )
290302 expected_response = {
291303 "done" : True ,
292304 "totalSize" : 1 ,
293305 "records" : [{"Status" : "Processing" , "ApexClassId" : 1 }],
294306 }
295307 responses .add (
296- responses .GET , url , match_querystring = True , json = expected_response
308+ responses .GET ,
309+ url ,
310+ match = [query_string_matcher (query_string )],
311+ json = expected_response ,
297312 )
298313
299314 def _mock_run_tests (self , success = True , body = "JOB_ID1234567" ):
0 commit comments