@@ -262,18 +262,37 @@ def test_raises_if_patch_does_not_20x(api_responses, api_token, base_url, domain
262262## DELETE (for nuke functionality in CREATE)
263263
264264def test_does_delete_first_for_nuke_call (api_responses , api_token , base_url , domain_url , webapp ):
265- api_responses .add (responses .DELETE , domain_url , status = 200 )
265+ api_responses .add (responses .DELETE , domain_url , status = 204 )
266266 api_responses .add (responses .POST , base_url , status = 201 , body = json .dumps ({"status" : "OK" }))
267267 api_responses .add (responses .PATCH , domain_url , status = 200 )
268268
269269 webapp .create ("3.10" , "/virtualenv/path" , "/project/path" , nuke = True )
270270
271+ assert [call .request .method for call in api_responses .calls ] == ["DELETE" , "POST" , "PATCH" ]
271272 delete = api_responses .calls [0 ]
272273 assert delete .request .method == "DELETE"
273274 assert delete .request .url == domain_url
274275 assert delete .request .headers ["Authorization" ] == f"Token { api_token } "
275276
276277
278+ @pytest .mark .parametrize ("status_code" , [200 , 201 , 202 , 403 , 409 , 500 ])
279+ def test_nuke_stops_before_creation_when_delete_fails (
280+ api_responses , api_token , base_url , domain_url , webapp , status_code
281+ ):
282+ # Register later steps too, so an erroneous continuation is observable.
283+ api_responses .assert_all_requests_are_fired = False
284+ api_responses .add (responses .DELETE , domain_url , status = status_code , body = "Delete failed" )
285+ api_responses .add (responses .POST , base_url , status = 201 , json = {"status" : "OK" })
286+ api_responses .add (responses .PATCH , domain_url , status = 200 )
287+
288+ with pytest .raises (PythonAnywhereApiException ) as exc :
289+ webapp .create ("3.10" , "/virtualenv/path" , "/project/path" , nuke = True )
290+
291+ assert str (status_code ) in str (exc .value )
292+ assert "Delete failed" in str (exc .value )
293+ assert [call .request .method for call in api_responses .calls ] == ["DELETE" ]
294+
295+
277296def test_ignores_404_from_delete_call_when_nuking (api_responses , api_token , base_url , domain_url , webapp ):
278297 api_responses .add (responses .DELETE , domain_url , status = 404 )
279298 api_responses .add (responses .POST , base_url , status = 201 , body = json .dumps ({"status" : "OK" }))
0 commit comments