From 35150dfa104c954b59315da2c94b95ec7bc276c0 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 19 Nov 2018 15:53:30 -0500 Subject: [PATCH] Also remove enviornment access (stub) --- atst/domain/environments.py | 4 ++++ atst/domain/workspaces/workspaces.py | 3 +++ atst/models/workspace.py | 5 ++++ tests/models/test_workspace_role.py | 36 +++++++++++++++++++++++++++- 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/atst/domain/environments.py b/atst/domain/environments.py index ec5fd701..1585a59b 100644 --- a/atst/domain/environments.py +++ b/atst/domain/environments.py @@ -85,3 +85,7 @@ class Environments(object): db.session.add(env_role) db.session.commit() + + @classmethod + def revoke_access(cls, user, environment, target_user): + pass diff --git a/atst/domain/workspaces/workspaces.py b/atst/domain/workspaces/workspaces.py index 62ee3ba5..97cf1514 100644 --- a/atst/domain/workspaces/workspaces.py +++ b/atst/domain/workspaces/workspaces.py @@ -146,4 +146,7 @@ class Workspaces(object): # user, workspace, Permissions.REQUEST_NEW_CSP_ROLE, "revoke workspace access" # ) target_workspace_role.status = WorkspaceRoleStatus.DISABLED + for environment in workspace.all_environments: + # TODO: Implement Environments.revoke_access + Environments.revoke_access(user, environment, target_workspace_role.user) return WorkspacesQuery.add_and_commit(target_workspace_role) diff --git a/atst/models/workspace.py b/atst/models/workspace.py index 5b907ba5..18df639a 100644 --- a/atst/models/workspace.py +++ b/atst/models/workspace.py @@ -1,5 +1,6 @@ from sqlalchemy import Column, ForeignKey, String from sqlalchemy.orm import relationship +from itertools import chain from atst.models import Base from atst.models.types import Id @@ -44,6 +45,10 @@ class Workspace(Base, mixins.TimestampsMixin, mixins.AuditableMixin): def displayname(self): return self.name + @property + def all_environments(self): + return list(chain.from_iterable(p.environments for p in self.projects)) + def auditable_workspace_id(self): return self.id diff --git a/tests/models/test_workspace_role.py b/tests/models/test_workspace_role.py index 990c8e0b..4ccc0529 100644 --- a/tests/models/test_workspace_role.py +++ b/tests/models/test_workspace_role.py @@ -3,7 +3,6 @@ import datetime from atst.domain.environments import Environments from atst.domain.workspaces import Workspaces from atst.domain.projects import Projects -from atst.domain.workspace_roles import WorkspaceRoles from atst.models.workspace_role import Status from atst.models.role import Role from atst.models.invitation import Status as InvitationStatus @@ -16,7 +15,9 @@ from tests.factories import ( EnvironmentFactory, EnvironmentRoleFactory, ProjectFactory, + WorkspaceFactory, ) +from atst.domain.workspace_roles import WorkspaceRoles def test_has_no_ws_role_history(session): @@ -234,3 +235,36 @@ def test_can_resend_invitation_if_expired(): invitations=[InvitationFactory.create(status=InvitationStatus.REJECTED_EXPIRED)] ) assert workspace_role.can_resend_invitation + + +def test_can_list_all_environments(): + workspace = WorkspaceFactory.create( + projects=[ + { + "name": "project1", + "environments": [ + {"name": "dev"}, + {"name": "staging"}, + {"name": "prod"}, + ], + }, + { + "name": "project2", + "environments": [ + {"name": "dev"}, + {"name": "staging"}, + {"name": "prod"}, + ], + }, + { + "name": "project3", + "environments": [ + {"name": "dev"}, + {"name": "staging"}, + {"name": "prod"}, + ], + }, + ] + ) + + assert len(workspace.all_environments) == 9