@@ -181,16 +181,16 @@ async def test_trash_projects( # noqa: PLR0915
181181@pytest .mark .acceptance_test (
182182 "For https://github.com/ITISFoundation/osparc-simcore/pull/6642"
183183)
184- async def test_trash_single_folder (
185- client : TestClient , logged_user : UserInfoDict , is_project_running : bool , force : bool
186- ):
184+ async def test_trash_single_folder (client : TestClient , logged_user : UserInfoDict ):
187185 assert client .app
188186
189- # CREATE a folder
187+ # CREATE a folder
190188 resp = await client .post ("/v0/folders" , json = {"name" : "My first folder" })
191189 data , _ = await assert_status (resp , status .HTTP_201_CREATED )
192190 folder = FolderGet .parse_obj (data )
193191
192+ # ---------------------------------------------------------------------
193+
194194 # LIST NOT trashed
195195 resp = await client .get ("/v0/folders" )
196196 await assert_status (resp , status .HTTP_200_OK )
@@ -253,3 +253,130 @@ async def test_trash_single_folder(
253253
254254 assert got .folder_id == folder .folder_id
255255 assert got .trashed_at is None
256+
257+
258+ @pytest .mark .acceptance_test (
259+ "For https://github.com/ITISFoundation/osparc-simcore/pull/6642"
260+ )
261+ async def test_trash_folder_with_content (
262+ client : TestClient ,
263+ logged_user : UserInfoDict ,
264+ user_project : ProjectDict ,
265+ mocked_catalog : None ,
266+ mocked_director_v2 : None ,
267+ ):
268+ assert client .app
269+ project_uuid = UUID (user_project ["uuid" ])
270+
271+ # CREATE a folder
272+ resp = await client .post ("/v0/folders" , json = {"name" : "My first folder" })
273+ data , _ = await assert_status (resp , status .HTTP_201_CREATED )
274+ folder = FolderGet .parse_obj (data )
275+
276+ # CREATE a SUB-folder
277+ resp = await client .post (
278+ "/v0/folders" ,
279+ json = {"name" : "My subfolder 1" , "parentFolderId" : folder .folder_id },
280+ )
281+ data , _ = await assert_status (resp , status .HTTP_201_CREATED )
282+ subfolder = FolderGet .parse_obj (data )
283+
284+ # MOVE project to SUB-folder
285+ resp = await client .put (
286+ f"/v0/projects/{ project_uuid } /folders/{ subfolder .folder_id } "
287+ )
288+ await assert_status (resp , status .HTTP_204_NO_CONTENT )
289+
290+ # CHECK created
291+ resp = await client .get ("/v0/folders" )
292+ await assert_status (resp , status .HTTP_200_OK )
293+ page = Page [FolderGet ].parse_obj (await resp .json ())
294+ assert page .meta .total == 1
295+ assert page .data [0 ] == folder
296+
297+ resp = await client .get ("/v0/folders" , params = {"folder_id" : f"{ folder .folder_id } " })
298+ await assert_status (resp , status .HTTP_200_OK )
299+ page = Page [FolderGet ].parse_obj (await resp .json ())
300+ assert page .meta .total == 1
301+ assert page .data [0 ] == subfolder
302+
303+ resp = await client .get ("/v0/projects" )
304+ await assert_status (resp , status .HTTP_200_OK )
305+ page = Page [ProjectListItem ].parse_obj (await resp .json ())
306+ assert page .meta .total == 1
307+ assert page .data [0 ].uuid == project_uuid
308+ assert page .data [0 ].folder_id == subfolder .folder_id
309+
310+ # ---------------------------------------------------------------------
311+
312+ # TRASH folder
313+ resp = await client .post (f"/v0/folders/{ folder .folder_id } :trash" )
314+ await assert_status (resp , status .HTTP_204_NO_CONTENT )
315+
316+ # ONLY folder listed in trash. The rest is not listed anymore!
317+ resp = await client .get ("/v0/folders" , params = {"filters" : '{"trashed": true}' })
318+ await assert_status (resp , status .HTTP_200_OK )
319+ page = Page [FolderGet ].parse_obj (await resp .json ())
320+ assert page .meta .total == 1
321+ assert page .data [0 ].folder_id == folder .folder_id
322+
323+ resp = await client .get (
324+ "/v0/folders" ,
325+ params = {"filters" : '{"trashed": true}' , "folder_id" : f"{ folder .folder_id } " },
326+ )
327+ await assert_status (resp , status .HTTP_200_OK )
328+ page = Page [FolderGet ].parse_obj (await resp .json ())
329+ assert page .meta .total == 0
330+ assert page .data [0 ].folder_id == subfolder .folder_id
331+
332+ resp = await client .get ("/v0/projects" , params = {"filters" : '{"trashed": true}' })
333+ await assert_status (resp , status .HTTP_200_OK )
334+ page = Page [ProjectListItem ].parse_obj (await resp .json ())
335+ assert page .meta .total == 0
336+
337+ # CHECK marked as trashed
338+ resp = await client .get (f"/v0/folders/{ folder .folder_id } " )
339+ data , _ = await assert_status (resp , status .HTTP_200_OK )
340+ got = FolderGet .parse_obj (data )
341+ assert got .trashed_at is not None
342+
343+ resp = await client .get (f"/v0/folders/{ subfolder .folder_id } " )
344+ data , _ = await assert_status (resp , status .HTTP_200_OK )
345+ got = FolderGet .parse_obj (data )
346+ assert got .trashed_at is not None
347+
348+ resp = await client .get (f"/v0/projects/{ project_uuid } " )
349+ data , _ = await assert_status (resp , status .HTTP_200_OK )
350+ got = FolderGet .parse_obj (data )
351+ assert got .trashed_at is not None
352+
353+ # UNTRASH folder
354+ resp = await client .post (f"/v0/folders/{ folder .folder_id } :untrash" )
355+ await assert_status (resp , status .HTTP_204_NO_CONTENT )
356+
357+ # NO folders listed in trash.
358+ resp = await client .get ("/v0/folders" , params = {"filters" : '{"trashed": true}' })
359+ await assert_status (resp , status .HTTP_200_OK )
360+ page = Page [FolderGet ].parse_obj (await resp .json ())
361+ assert page .meta .total == 0
362+
363+ resp = await client .get ("/v0/projects" , params = {"filters" : '{"trashed": true}' })
364+ await assert_status (resp , status .HTTP_200_OK )
365+ page = Page [ProjectListItem ].parse_obj (await resp .json ())
366+ assert page .meta .total == 0
367+
368+ # CHECK marked as trashed
369+ resp = await client .get (f"/v0/folders/{ folder .folder_id } " )
370+ data , _ = await assert_status (resp , status .HTTP_200_OK )
371+ got = FolderGet .parse_obj (data )
372+ assert got .trashed_at is None
373+
374+ resp = await client .get (f"/v0/folders/{ subfolder .folder_id } " )
375+ data , _ = await assert_status (resp , status .HTTP_200_OK )
376+ got = FolderGet .parse_obj (data )
377+ assert got .trashed_at is None
378+
379+ resp = await client .get (f"/v0/projects/{ project_uuid } " )
380+ data , _ = await assert_status (resp , status .HTTP_200_OK )
381+ got = FolderGet .parse_obj (data )
382+ assert got .trashed_at is None
0 commit comments