Merge pull request #354 from dod-ccpo/fix-environments-for-user
Fix environment listing for user
This commit is contained in:
commit
04f3134729
@ -44,7 +44,7 @@ class Environments(object):
|
|||||||
.join(EnvironmentRole)
|
.join(EnvironmentRole)
|
||||||
.join(Project)
|
.join(Project)
|
||||||
.filter(EnvironmentRole.user_id == user.id)
|
.filter(EnvironmentRole.user_id == user.id)
|
||||||
.filter(Project.id == Environment.project_id)
|
.filter(Environment.project_id == project.id)
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,25 +16,29 @@
|
|||||||
]
|
]
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{{ SidenavItem(
|
{% if user_can(permissions.VIEW_WORKSPACE_MEMBERS) %}
|
||||||
"Members",
|
{{ SidenavItem(
|
||||||
href=url_for("workspaces.workspace_members", workspace_id=workspace.id),
|
"Members",
|
||||||
active=request.url_rule.rule.startswith('/workspaces/<workspace_id>/members'),
|
href=url_for("workspaces.workspace_members", workspace_id=workspace.id),
|
||||||
subnav=None if not user_can(permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE) else [
|
active=request.url_rule.rule.startswith('/workspaces/<workspace_id>/members'),
|
||||||
{
|
subnav=None if not user_can(permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE) else [
|
||||||
"label": "Add New Member",
|
{
|
||||||
"href": url_for("workspaces.new_member", workspace_id=workspace.id),
|
"label": "Add New Member",
|
||||||
"active": request.url_rule.rule.startswith('/workspaces/<workspace_id>/members/new'),
|
"href": url_for("workspaces.new_member", workspace_id=workspace.id),
|
||||||
"icon": "plus"
|
"active": request.url_rule.rule.startswith('/workspaces/<workspace_id>/members/new'),
|
||||||
}
|
"icon": "plus"
|
||||||
]
|
}
|
||||||
) }}
|
]
|
||||||
|
) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{{ SidenavItem(
|
{% if user_can(permissions.VIEW_USAGE_DOLLARS) %}
|
||||||
"Budget Report",
|
{{ SidenavItem(
|
||||||
href=url_for("workspaces.workspace_reports", workspace_id=workspace.id),
|
"Budget Report",
|
||||||
active=request.url_rule.rule.startswith('/workspaces/<workspace_id>/reports')
|
href=url_for("workspaces.workspace_reports", workspace_id=workspace.id),
|
||||||
) }}
|
active=request.url_rule.rule.startswith('/workspaces/<workspace_id>/reports')
|
||||||
|
) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if user_can(permissions.EDIT_WORKSPACE_INFORMATION) %}
|
{% if user_can(permissions.EDIT_WORKSPACE_INFORMATION) %}
|
||||||
{{ SidenavItem(
|
{{ SidenavItem(
|
||||||
|
@ -25,10 +25,12 @@
|
|||||||
<div class='block-list project-list-item'>
|
<div class='block-list project-list-item'>
|
||||||
<header class='block-list__header'>
|
<header class='block-list__header'>
|
||||||
<h2 class='block-list__title'>{{ project.name }} ({{ project.environments|length }} environments)</h2>
|
<h2 class='block-list__title'>{{ project.name }} ({{ project.environments|length }} environments)</h2>
|
||||||
<a class='icon-link' href='{{ url_for("workspaces.edit_project", workspace_id=workspace.id, project_id=project.id) }}'>
|
{% if user_can(permissions.RENAME_APPLICATION_IN_WORKSPACE) %}
|
||||||
{{ Icon('edit') }}
|
<a class='icon-link' href='{{ url_for("workspaces.edit_project", workspace_id=workspace.id, project_id=project.id) }}'>
|
||||||
<span>edit</span>
|
{{ Icon('edit') }}
|
||||||
</a>
|
<span>edit</span>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
</header>
|
</header>
|
||||||
<ul>
|
<ul>
|
||||||
{% for environment in project.environments %}
|
{% for environment in project.environments %}
|
||||||
|
@ -4,11 +4,19 @@ from uuid import uuid4
|
|||||||
from atst.domain.environments import Environments
|
from atst.domain.environments import Environments
|
||||||
from atst.domain.environment_roles import EnvironmentRoles
|
from atst.domain.environment_roles import EnvironmentRoles
|
||||||
from atst.domain.projects import Projects
|
from atst.domain.projects import Projects
|
||||||
|
from atst.domain.roles import Roles
|
||||||
from atst.domain.workspaces import Workspaces
|
from atst.domain.workspaces import Workspaces
|
||||||
from atst.domain.workspace_users import WorkspaceUsers
|
from atst.domain.workspace_users import WorkspaceUsers
|
||||||
from atst.domain.exceptions import NotFoundError
|
from atst.domain.exceptions import NotFoundError
|
||||||
|
from atst.models.environment_role import EnvironmentRole
|
||||||
|
|
||||||
from tests.factories import RequestFactory, UserFactory
|
from tests.factories import (
|
||||||
|
RequestFactory,
|
||||||
|
UserFactory,
|
||||||
|
WorkspaceFactory,
|
||||||
|
EnvironmentFactory,
|
||||||
|
ProjectFactory,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_update_environment_roles():
|
def test_update_environment_roles():
|
||||||
@ -43,3 +51,24 @@ def test_update_environment_roles():
|
|||||||
|
|
||||||
assert new_dev_env_role.role == "billing_admin"
|
assert new_dev_env_role.role == "billing_admin"
|
||||||
assert staging_env_role.role == "developer"
|
assert staging_env_role.role == "developer"
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_scoped_environments(db):
|
||||||
|
developer = UserFactory.create()
|
||||||
|
workspace = WorkspaceFactory.create()
|
||||||
|
workspace_user = Workspaces.add_member(workspace, developer, "developer")
|
||||||
|
project1 = ProjectFactory.create(workspace=workspace)
|
||||||
|
project2 = ProjectFactory.create(workspace=workspace)
|
||||||
|
env1 = EnvironmentFactory.create(project=project1, name="project1 dev")
|
||||||
|
env2 = EnvironmentFactory.create(project=project1, name="project1 staging")
|
||||||
|
env3 = EnvironmentFactory.create(project=project2, name="project2 dev")
|
||||||
|
env4 = EnvironmentFactory.create(project=project2, name="project2 staging")
|
||||||
|
db.session.add(EnvironmentRole(user=developer, environment=env1, role="developer"))
|
||||||
|
db.session.add(EnvironmentRole(user=developer, environment=env4, role="developer"))
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
project1_envs = Environments.for_user(developer, project1)
|
||||||
|
assert [env.name for env in project1_envs] == ["project1 dev"]
|
||||||
|
|
||||||
|
project2_envs = Environments.for_user(developer, project2)
|
||||||
|
assert [env.name for env in project2_envs] == ["project2 staging"]
|
||||||
|
@ -6,11 +6,13 @@ import datetime
|
|||||||
from faker import Faker as _Faker
|
from faker import Faker as _Faker
|
||||||
|
|
||||||
from atst.forms.data import SERVICE_BRANCHES
|
from atst.forms.data import SERVICE_BRANCHES
|
||||||
|
from atst.models.environment import Environment
|
||||||
from atst.models.request import Request
|
from atst.models.request import Request
|
||||||
from atst.models.request_revision import RequestRevision
|
from atst.models.request_revision import RequestRevision
|
||||||
from atst.models.request_review import RequestReview
|
from atst.models.request_review import RequestReview
|
||||||
from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
||||||
from atst.models.pe_number import PENumber
|
from atst.models.pe_number import PENumber
|
||||||
|
from atst.models.project import Project
|
||||||
from atst.models.task_order import TaskOrder, Source, FundingType
|
from atst.models.task_order import TaskOrder, Source, FundingType
|
||||||
from atst.models.user import User
|
from atst.models.user import User
|
||||||
from atst.models.role import Role
|
from atst.models.role import Role
|
||||||
@ -217,3 +219,17 @@ class WorkspaceFactory(Base):
|
|||||||
request = factory.SubFactory(RequestFactory)
|
request = factory.SubFactory(RequestFactory)
|
||||||
# name it the same as the request ID by default
|
# name it the same as the request ID by default
|
||||||
name = factory.LazyAttribute(lambda w: w.request.id)
|
name = factory.LazyAttribute(lambda w: w.request.id)
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectFactory(Base):
|
||||||
|
class Meta:
|
||||||
|
model = Project
|
||||||
|
|
||||||
|
workspace = factory.SubFactory(WorkspaceFactory)
|
||||||
|
name = factory.Faker("name")
|
||||||
|
description = "A test project"
|
||||||
|
|
||||||
|
|
||||||
|
class EnvironmentFactory(Base):
|
||||||
|
class Meta:
|
||||||
|
model = Environment
|
||||||
|
Loading…
x
Reference in New Issue
Block a user