From 5ba76354a3982674622746f7369332d030cbd17c Mon Sep 17 00:00:00 2001 From: richard-dds Date: Thu, 6 Sep 2018 15:39:37 -0400 Subject: [PATCH] Show "No Environment Access" flag --- atst/models/workspace_user.py | 20 +++++++++++++ templates/workspaces/members/index.html | 2 +- tests/models/test_workspace_user.py | 39 +++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/models/test_workspace_user.py diff --git a/atst/models/workspace_user.py b/atst/models/workspace_user.py index 3c92707e..1677a4bd 100644 --- a/atst/models/workspace_user.py +++ b/atst/models/workspace_user.py @@ -1,3 +1,9 @@ +from atst.database import db +from atst.models.environment_role import EnvironmentRole +from atst.models.project import Project +from atst.models.environment import Environment + + class WorkspaceUser(object): def __init__(self, user, workspace_role): self.user = user @@ -14,6 +20,7 @@ class WorkspaceUser(object): def workspace(self): return self.workspace_role.workspace + @property def workspace_id(self): return self.workspace_role.workspace_id @@ -32,3 +39,16 @@ class WorkspaceUser(object): @property def status(self): return "radical" + + @property + def has_environment_roles(self): + num_environment_roles = ( + db.session.query(EnvironmentRole) + .join(EnvironmentRole.environment) + .join(Environment.project) + .join(Project.workspace) + .filter(Project.workspace_id == self.workspace_id) + .filter(EnvironmentRole.user_id == self.user_id) + .count() + ) + return num_environment_roles > 0 diff --git a/templates/workspaces/members/index.html b/templates/workspaces/members/index.html index 6c4f0b0f..60d0d431 100644 --- a/templates/workspaces/members/index.html +++ b/templates/workspaces/members/index.html @@ -91,7 +91,7 @@ {% for m in workspace.members %} {{ m.user_name }} - {% if m['num_projects'] == '0' %} No Project Access {% endif %} + {% if not m.has_environment_roles %} No Environment Access {% endif %} {{ m.status }} {{ m.role }} diff --git a/tests/models/test_workspace_user.py b/tests/models/test_workspace_user.py new file mode 100644 index 00000000..afa8c306 --- /dev/null +++ b/tests/models/test_workspace_user.py @@ -0,0 +1,39 @@ +from atst.domain.environments import Environments +from atst.domain.workspaces import Workspaces +from atst.domain.projects import Projects +from tests.factories import RequestFactory, UserFactory + + +def test_has_no_environment_roles(): + owner = UserFactory.create() + developer_data = { + "dod_id": "1234567890", + "first_name": "Test", + "last_name": "User", + "email": "test.user@mail.com", + "workspace_role": "developer", + } + + workspace = Workspaces.create(RequestFactory.create(creator=owner)) + workspace_user = Workspaces.create_member(owner, workspace, developer_data) + + assert not workspace_user.has_environment_roles + + +def test_has_environment_roles(): + owner = UserFactory.create() + developer_data = { + "dod_id": "1234567890", + "first_name": "Test", + "last_name": "User", + "email": "test.user@mail.com", + "workspace_role": "developer", + } + + workspace = Workspaces.create(RequestFactory.create(creator=owner)) + workspace_user = Workspaces.create_member(owner, workspace, developer_data) + project = Projects.create( + workspace, "my test project", "It's mine.", ["dev", "staging", "prod"] + ) + Environments.add_member(owner, project.environments[0], workspace_user.user) + assert workspace_user.has_environment_roles