diff --git a/atst/domain/environment_roles.py b/atst/domain/environment_roles.py index 6e724789..bdf4ae09 100644 --- a/atst/domain/environment_roles.py +++ b/atst/domain/environment_roles.py @@ -56,7 +56,17 @@ class EnvironmentRoles(object): @classmethod def delete(cls, application_role_id, environment_id): - existing_env_role = EnvironmentRoles.get(application_role_id, environment_id) + existing_env_role = ( + db.session.query(EnvironmentRole) + .join(ApplicationRole) + .filter( + ApplicationRole.id == application_role_id, + EnvironmentRole.environment_id == environment_id, + EnvironmentRole.status != EnvironmentRole.Status.PENDING_DELETE, + ) + .one_or_none() + ) + if existing_env_role: existing_env_role.status = EnvironmentRole.Status.PENDING_DELETE existing_env_role.role = "deleted" diff --git a/tests/domain/test_application_roles.py b/tests/domain/test_application_roles.py index a91de2c1..32c5cd2e 100644 --- a/tests/domain/test_application_roles.py +++ b/tests/domain/test_application_roles.py @@ -83,5 +83,6 @@ def test_disable(session): ApplicationRoles.disable(member_role) session.refresh(member_role) + session.refresh(environment_role) assert member_role.status == ApplicationRoleStatus.DISABLED - assert not EnvironmentRoles.get_by_user_and_environment(user.id, environment.id) + assert environment_role.status == EnvironmentRole.Status.PENDING_DELETE diff --git a/tests/domain/test_environments.py b/tests/domain/test_environments.py index a14f3bbe..dc92d9e0 100644 --- a/tests/domain/test_environments.py +++ b/tests/domain/test_environments.py @@ -5,7 +5,7 @@ from uuid import uuid4 from atst.domain.environments import Environments from atst.domain.environment_roles import EnvironmentRoles from atst.domain.exceptions import NotFoundError -from atst.models.environment_role import CSPRole +from atst.models.environment_role import CSPRole, EnvironmentRole from tests.factories import ( ApplicationFactory, @@ -35,15 +35,15 @@ def test_update_env_role(): assert env_role.role == new_role -def test_update_env_role_no_access(): +def test_update_env_role_no_access(session): env_role = EnvironmentRoleFactory.create(role=CSPRole.BASIC_ACCESS.value) assert Environments.update_env_role( env_role.environment, env_role.application_role, None ) - assert not EnvironmentRoles.get( - env_role.application_role.id, env_role.environment.id - ) + + session.refresh(env_role) + assert env_role.status == EnvironmentRole.Status.PENDING_DELETE def test_update_env_role_no_change(): diff --git a/tests/routes/applications/test_settings.py b/tests/routes/applications/test_settings.py index e477da14..62bfd34a 100644 --- a/tests/routes/applications/test_settings.py +++ b/tests/routes/applications/test_settings.py @@ -1,4 +1,3 @@ -import pytest import uuid from flask import url_for, get_flashed_messages from unittest.mock import Mock @@ -9,16 +8,10 @@ from tests.factories import * from atst.domain.applications import Applications from atst.domain.application_roles import ApplicationRoles from atst.domain.environment_roles import EnvironmentRoles -from atst.domain.environments import Environments -from atst.domain.environment_roles import EnvironmentRoles from atst.domain.common import Paginator from atst.domain.permission_sets import PermissionSets -from atst.domain.portfolios import Portfolios -from atst.domain.exceptions import NotFoundError -from atst.models.application_role import Status as ApplicationRoleStatus from atst.models.environment_role import CSPRole from atst.models.permissions import Permissions -from atst.models.portfolio_role import Status as PortfolioRoleStatus from atst.forms.application import EditEnvironmentForm from atst.forms.application_member import UpdateMemberForm from atst.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS @@ -483,7 +476,7 @@ def test_remove_member_failure(client, user_session): assert response.status_code == 404 -def test_update_member(client, user_session): +def test_update_member(client, user_session, session): role = PermissionSets.get(PermissionSets.EDIT_APPLICATION_TEAM) # create an app role with only edit team perms app_role = ApplicationRoleFactory.create(permission_sets=[role]) @@ -544,13 +537,6 @@ def test_update_member(client, user_session): app_role.has_permission_set(PermissionSets.DELETE_APPLICATION_ENVIRONMENTS) ) - environment_roles = application.roles[0].environment_roles - # make sure that old env role was deleted and there are only 2 env roles - assert len(environment_roles) == 2 - # check that the user has roles in the correct envs - assert environment_roles[0].environment in [env, env_2] - assert environment_roles[1].environment in [env, env_2] - def test_revoke_invite(client, user_session): invite = ApplicationInvitationFactory.create()