2727from models_library .projects import ProjectID
2828from models_library .projects_state import RunningState
2929from pytest_mock import MockerFixture
30+ from pytest_simcore .helpers import webserver_projects
3031from pytest_simcore .helpers .webserver_login import log_client_in
31- from pytest_simcore .helpers .webserver_projects import create_project , empty_project_data
3232from pytest_simcore .helpers .webserver_users import UserInfoDict
3333from servicelib .aiohttp import status
3434from servicelib .aiohttp .application import create_safe_application
@@ -226,7 +226,25 @@ async def login_guest_user(
226226 )
227227
228228
229- async def new_project (
229+ async def _setup_project_cleanup (
230+ client : TestClient ,
231+ project : dict [str , Any ],
232+ exit_stack : contextlib .AsyncExitStack ,
233+ ) -> None :
234+ """Helper function to setup project cleanup after test completion"""
235+
236+ async def _delete_project (project_uuid ):
237+ assert client .app
238+ with contextlib .suppress (ProjectNotFoundError ):
239+ # Sometimes the test deletes the project
240+ await _projects_repository .delete_project (
241+ client .app , project_uuid = project_uuid
242+ )
243+
244+ exit_stack .push_async_callback (_delete_project , ProjectID (project ["uuid" ]))
245+
246+
247+ async def create_standard_project (
230248 client : TestClient ,
231249 user : UserInfoDict ,
232250 product_name : str ,
@@ -235,12 +253,12 @@ async def new_project(
235253 access_rights : dict [str , Any ] | None = None ,
236254):
237255 """returns a project for the given user"""
238- project_data = empty_project_data ()
256+ project_data = webserver_projects . empty_project_data ()
239257 if access_rights is not None :
240258 project_data ["accessRights" ] = access_rights
241259
242260 assert client .app
243- project = await create_project (
261+ project = await webserver_projects . create_project (
244262 client .app ,
245263 project_data ,
246264 user ["id" ],
@@ -259,25 +277,16 @@ async def new_project(
259277 delete = permissions ["delete" ],
260278 )
261279
262- # ensures the project is removed after the test
263- async def _delete_project (project_uuid ):
264- assert client .app
265- with contextlib .suppress (ProjectNotFoundError ):
266- # Sometimes the test deletes the project
267- await _projects_repository .delete_project (
268- client .app , project_uuid = project_uuid
269- )
270-
271- exit_stack .push_async_callback (_delete_project , ProjectID (project ["uuid" ]))
272-
280+ await _setup_project_cleanup (client , project , exit_stack )
273281 return project
274282
275283
276- async def get_template_project (
284+ async def create_template_project (
277285 client : TestClient ,
278286 user : UserInfoDict ,
279287 product_name : str ,
280288 project_data : ProjectDict ,
289+ exit_stack : contextlib .AsyncExitStack ,
281290 access_rights = None ,
282291):
283292 """returns a tempalte shared with all"""
@@ -292,14 +301,17 @@ async def get_template_project(
292301 if access_rights is not None :
293302 project_data ["accessRights" ].update (access_rights )
294303
295- return await create_project (
304+ project = await webserver_projects . create_project (
296305 client .app ,
297306 project_data ,
298307 user ["id" ],
299308 product_name = product_name ,
300309 default_project_json = None ,
301310 )
302311
312+ await _setup_project_cleanup (client , project , exit_stack )
313+ return project
314+
303315
304316async def get_group (client : TestClient , user : UserInfoDict ):
305317 """Creates a group for a given user"""
@@ -513,7 +525,7 @@ async def test_t1_while_guest_is_connected_no_resources_are_removed(
513525 """while a GUEST user is connected GC will not remove none of its projects nor the user itself"""
514526 assert client .app
515527 logged_guest_user = await login_guest_user (client , exit_stack = exit_stack )
516- empty_guest_user_project = await new_project (
528+ empty_guest_user_project = await create_standard_project (
517529 client ,
518530 logged_guest_user ,
519531 osparc_product_name ,
@@ -544,7 +556,7 @@ async def test_t2_cleanup_resources_after_browser_is_closed(
544556 """After a GUEST users with one opened project closes browser tab regularly (GC cleans everything)"""
545557 assert client .app
546558 logged_guest_user = await login_guest_user (client , exit_stack = exit_stack )
547- empty_guest_user_project = await new_project (
559+ empty_guest_user_project = await create_standard_project (
548560 client ,
549561 logged_guest_user ,
550562 osparc_product_name ,
@@ -600,14 +612,18 @@ async def test_t3_gc_will_not_intervene_for_regular_users_and_their_resources(
600612 number_of_templates = 5
601613 logged_user = await login_user (client , exit_stack = exit_stack )
602614 user_projects = [
603- await new_project (
615+ await create_standard_project (
604616 client , logged_user , osparc_product_name , tests_data_dir , exit_stack
605617 )
606618 for _ in range (number_of_projects )
607619 ]
608620 user_template_projects = [
609- await get_template_project (
610- client , logged_user , osparc_product_name , fake_project
621+ await create_template_project (
622+ client ,
623+ logged_user ,
624+ osparc_product_name ,
625+ fake_project ,
626+ exit_stack = exit_stack ,
611627 )
612628 for _ in range (number_of_templates )
613629 ]
@@ -661,7 +677,7 @@ async def test_t4_project_shared_with_group_transferred_to_user_in_group_on_owne
661677 await invite_user_to_group (client , owner = u1 , invitee = u3 , group = g1 )
662678
663679 # u1 creates project and shares it with g1
664- project = await new_project (
680+ project = await create_standard_project (
665681 client ,
666682 u1 ,
667683 osparc_product_name ,
@@ -706,7 +722,7 @@ async def test_t5_project_shared_with_other_users_transferred_to_one_of_them(
706722 assert q_u3
707723
708724 # u1 creates project and shares it with g1
709- project = await new_project (
725+ project = await create_standard_project (
710726 client ,
711727 u1 ,
712728 osparc_product_name ,
@@ -757,7 +773,7 @@ async def test_t6_project_shared_with_group_transferred_to_last_user_in_group_on
757773 await invite_user_to_group (client , owner = u1 , invitee = u3 , group = g1 )
758774
759775 # u1 creates project and shares it with g1
760- project = await new_project (
776+ project = await create_standard_project (
761777 client ,
762778 u1 ,
763779 osparc_product_name ,
@@ -833,7 +849,7 @@ async def test_t7_project_shared_with_group_transferred_from_one_member_to_the_l
833849 await invite_user_to_group (client , owner = u1 , invitee = u3 , group = g1 )
834850
835851 # u1 creates project and shares it with g1
836- project = await new_project (
852+ project = await create_standard_project (
837853 client ,
838854 u1 ,
839855 osparc_product_name ,
@@ -919,7 +935,7 @@ async def test_t8_project_shared_with_other_users_transferred_to_one_of_them_unt
919935 assert q_u3
920936
921937 # u1 creates project and shares it with g1
922- project = await new_project (
938+ project = await create_standard_project (
923939 client ,
924940 u1 ,
925941 osparc_product_name ,
@@ -997,7 +1013,7 @@ async def test_t9_project_shared_with_other_users_transferred_between_them_and_t
9971013 assert q_u3
9981014
9991015 # u1 creates project and shares it with g1
1000- project = await new_project (
1016+ project = await create_standard_project (
10011017 client ,
10021018 u1 ,
10031019 osparc_product_name ,
@@ -1088,7 +1104,7 @@ async def test_t10_owner_and_all_shared_users_marked_as_guests(
10881104 assert q_u3
10891105
10901106 # u1 creates project and shares it with g1
1091- project = await new_project (
1107+ project = await create_standard_project (
10921108 client ,
10931109 u1 ,
10941110 osparc_product_name ,
@@ -1138,7 +1154,7 @@ async def test_t11_owner_and_all_users_in_group_marked_as_guests(
11381154 await invite_user_to_group (client , owner = u1 , invitee = u3 , group = g1 )
11391155
11401156 # u1 creates project and shares it with g1
1141- project = await new_project (
1157+ project = await create_standard_project (
11421158 client ,
11431159 u1 ,
11441160 osparc_product_name ,
0 commit comments