2424from aiohttp .test_utils import TestClient
2525from aioresponses import aioresponses
2626from models_library .groups import EVERYONE_GROUP_ID , StandardGroupCreate
27+ from models_library .projects import ProjectID
2728from models_library .projects_state import RunningState
2829from pytest_mock import MockerFixture
2930from pytest_simcore .helpers .webserver_login import log_client_in
4445from simcore_service_webserver .groups ._groups_service import create_standard_group
4546from simcore_service_webserver .groups .api import add_user_in_group
4647from simcore_service_webserver .login .plugin import setup_login
48+ from simcore_service_webserver .projects import _projects_repository
4749from simcore_service_webserver .projects ._crud_api_delete import get_scheduled_tasks
4850from simcore_service_webserver .projects ._groups_repository import (
4951 update_or_insert_project_group ,
5052)
53+ from simcore_service_webserver .projects .exceptions import ProjectNotFoundError
5154from simcore_service_webserver .projects .models import ProjectDict
5255from simcore_service_webserver .projects .plugin import setup_projects
5356from simcore_service_webserver .resource_manager .plugin import setup_resource_manager
@@ -228,6 +231,7 @@ async def new_project(
228231 user : UserInfoDict ,
229232 product_name : str ,
230233 tests_data_dir : Path ,
234+ exit_stack : contextlib .AsyncExitStack ,
231235 access_rights : dict [str , Any ] | None = None ,
232236):
233237 """returns a project for the given user"""
@@ -254,6 +258,18 @@ async def new_project(
254258 write = permissions ["write" ],
255259 delete = permissions ["delete" ],
256260 )
261+
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+
257273 return project
258274
259275
@@ -432,7 +448,7 @@ async def assert_user_in_db(
432448 user_as_dict = dict (user )
433449
434450 # some values need to be transformed
435- user_as_dict ["role" ] = user_as_dict ["role" ]. value # type: ignore
451+ user_as_dict ["role" ] = user_as_dict ["role" ] # type: ignore
436452 user_as_dict ["status" ] = user_as_dict ["status" ].value # type: ignore
437453
438454 assert_dicts_match_by_common_keys (user_as_dict , logged_user )
@@ -498,7 +514,11 @@ async def test_t1_while_guest_is_connected_no_resources_are_removed(
498514 assert client .app
499515 logged_guest_user = await login_guest_user (client , exit_stack = exit_stack )
500516 empty_guest_user_project = await new_project (
501- client , logged_guest_user , osparc_product_name , tests_data_dir
517+ client ,
518+ logged_guest_user ,
519+ osparc_product_name ,
520+ tests_data_dir ,
521+ exit_stack = exit_stack ,
502522 )
503523 await assert_users_count (aiopg_engine , 1 )
504524 await assert_projects_count (aiopg_engine , 1 )
@@ -525,7 +545,11 @@ async def test_t2_cleanup_resources_after_browser_is_closed(
525545 assert client .app
526546 logged_guest_user = await login_guest_user (client , exit_stack = exit_stack )
527547 empty_guest_user_project = await new_project (
528- client , logged_guest_user , osparc_product_name , tests_data_dir
548+ client ,
549+ logged_guest_user ,
550+ osparc_product_name ,
551+ tests_data_dir ,
552+ exit_stack = exit_stack ,
529553 )
530554 await assert_users_count (aiopg_engine , 1 )
531555 await assert_projects_count (aiopg_engine , 1 )
@@ -576,7 +600,9 @@ async def test_t3_gc_will_not_intervene_for_regular_users_and_their_resources(
576600 number_of_templates = 5
577601 logged_user = await login_user (client , exit_stack = exit_stack )
578602 user_projects = [
579- await new_project (client , logged_user , osparc_product_name , tests_data_dir )
603+ await new_project (
604+ client , logged_user , osparc_product_name , tests_data_dir , exit_stack
605+ )
580606 for _ in range (number_of_projects )
581607 ]
582608 user_template_projects = [
@@ -641,6 +667,7 @@ async def test_t4_project_shared_with_group_transferred_to_user_in_group_on_owne
641667 osparc_product_name ,
642668 tests_data_dir ,
643669 access_rights = {str (g1 ["gid" ]): {"read" : True , "write" : True , "delete" : False }},
670+ exit_stack = exit_stack ,
644671 )
645672
646673 # mark u1 as guest
@@ -684,6 +711,7 @@ async def test_t5_project_shared_with_other_users_transferred_to_one_of_them(
684711 u1 ,
685712 osparc_product_name ,
686713 tests_data_dir ,
714+ exit_stack = exit_stack ,
687715 access_rights = {
688716 str (q_u2 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
689717 str (q_u3 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
@@ -734,6 +762,7 @@ async def test_t6_project_shared_with_group_transferred_to_last_user_in_group_on
734762 u1 ,
735763 osparc_product_name ,
736764 tests_data_dir ,
765+ exit_stack = exit_stack ,
737766 access_rights = {str (g1 ["gid" ]): {"read" : True , "write" : True , "delete" : False }},
738767 )
739768
@@ -809,6 +838,7 @@ async def test_t7_project_shared_with_group_transferred_from_one_member_to_the_l
809838 u1 ,
810839 osparc_product_name ,
811840 tests_data_dir ,
841+ exit_stack = exit_stack ,
812842 access_rights = {str (g1 ["gid" ]): {"read" : True , "write" : True , "delete" : False }},
813843 )
814844
@@ -894,6 +924,7 @@ async def test_t8_project_shared_with_other_users_transferred_to_one_of_them_unt
894924 u1 ,
895925 osparc_product_name ,
896926 tests_data_dir ,
927+ exit_stack = exit_stack ,
897928 access_rights = {
898929 str (q_u2 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
899930 str (q_u3 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
@@ -971,6 +1002,7 @@ async def test_t9_project_shared_with_other_users_transferred_between_them_and_t
9711002 u1 ,
9721003 osparc_product_name ,
9731004 tests_data_dir ,
1005+ exit_stack = exit_stack ,
9741006 access_rights = {
9751007 str (q_u2 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
9761008 str (q_u3 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
@@ -1061,6 +1093,7 @@ async def test_t10_owner_and_all_shared_users_marked_as_guests(
10611093 u1 ,
10621094 osparc_product_name ,
10631095 tests_data_dir ,
1096+ exit_stack = exit_stack ,
10641097 access_rights = {
10651098 str (q_u2 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
10661099 str (q_u3 ["primary_gid" ]): {"read" : True , "write" : True , "delete" : False },
@@ -1110,6 +1143,7 @@ async def test_t11_owner_and_all_users_in_group_marked_as_guests(
11101143 u1 ,
11111144 osparc_product_name ,
11121145 tests_data_dir ,
1146+ exit_stack = exit_stack ,
11131147 access_rights = {str (g1 ["gid" ]): {"read" : True , "write" : True , "delete" : False }},
11141148 )
11151149
0 commit comments