@@ -227,3 +227,56 @@ def create_project_side_effect(request: httpx.Request):
227227 )
228228 assert resp .status_code == status .HTTP_201_CREATED
229229 job = Job .model_validate (resp .json ())
230+
231+
232+ @pytest .fixture
233+ def mocked_backend_services_apis_for_delete_job_assets (
234+ mocked_webserver_rest_api : MockRouter ,
235+ mocked_webserver_rpc_api : dict [str , MockType ],
236+ mocked_storage_rest_api_base : MockRouter ,
237+ ) -> dict [str , MockRouter | dict [str , MockType ]]:
238+
239+ # Patch PATCH /projects/{project_id}
240+ def _patch_project (request : httpx .Request , ** kwargs ):
241+ # Accept any patch, return 204 No Content
242+ return httpx .Response (status_code = status .HTTP_204_NO_CONTENT )
243+
244+ mocked_webserver_rest_api .patch (
245+ path__regex = r"/projects/(?P<project_id>[\w-]+)$" ,
246+ name = "patch_project" ,
247+ ).mock (side_effect = _patch_project )
248+
249+ # Mock storage REST delete_project_s3_assets
250+ def _delete_project_s3_assets (request : httpx .Request , ** kwargs ):
251+ return httpx .Response (status_code = status .HTTP_204_NO_CONTENT )
252+
253+ mocked_storage_rest_api_base .delete (
254+ path__regex = r"/simcore-s3/folders/(?P<project_id>[\w-]+)$" ,
255+ name = "delete_project_s3_assets" ,
256+ ).mock (side_effect = _delete_project_s3_assets )
257+
258+ return {
259+ "webserver_rest" : mocked_webserver_rest_api ,
260+ "webserver_rpc" : mocked_webserver_rpc_api ,
261+ "storage_rest" : mocked_storage_rest_api_base ,
262+ }
263+
264+
265+ @pytest .mark .acceptance_test ("Test delete_job_assets endpoint" )
266+ async def test_delete_job_assets_endpoint (
267+ auth : httpx .BasicAuth ,
268+ client : httpx .AsyncClient ,
269+ solver_key : str ,
270+ solver_version : str ,
271+ mocked_backend_services_apis_for_delete_job_assets : dict [
272+ str , MockRouter | dict [str , MockType ]
273+ ],
274+ ):
275+ job_id = "123e4567-e89b-12d3-a456-426614174000"
276+ url = f"/{ API_VTAG } /solvers/{ solver_key } /releases/{ solver_version } /jobs/{ job_id } /assets"
277+
278+ resp = await client .delete (url , auth = auth )
279+ assert resp .status_code == status .HTTP_204_NO_CONTENT
280+
281+ storage_rest = mocked_backend_services_apis_for_delete_job_assets ["storage_rest" ]
282+ assert storage_rest ["delete_project_s3_assets" ].called
0 commit comments