Filter environments for user with given project id
Previously, calling `Environment.for_user(user, project)` would return environments a user has access to across all projects. Now, we will only return the relevant environements. This was the cause of a visual bug where extra environments were shown in the project list.
This commit is contained in:
parent
7e84382a66
commit
7b2a099ef3
@ -44,7 +44,7 @@ class Environments(object):
|
||||
.join(EnvironmentRole)
|
||||
.join(Project)
|
||||
.filter(EnvironmentRole.user_id == user.id)
|
||||
.filter(Project.id == Environment.project_id)
|
||||
.filter(Environment.project_id == project.id)
|
||||
.all()
|
||||
)
|
||||
|
||||
|
@ -4,11 +4,19 @@ from uuid import uuid4
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.domain.projects import Projects
|
||||
from atst.domain.roles import Roles
|
||||
from atst.domain.workspaces import Workspaces
|
||||
from atst.domain.workspace_users import WorkspaceUsers
|
||||
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():
|
||||
@ -43,3 +51,24 @@ def test_update_environment_roles():
|
||||
|
||||
assert new_dev_env_role.role == "billing_admin"
|
||||
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 atst.forms.data import SERVICE_BRANCHES
|
||||
from atst.models.environment import Environment
|
||||
from atst.models.request import Request
|
||||
from atst.models.request_revision import RequestRevision
|
||||
from atst.models.request_review import RequestReview
|
||||
from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
||||
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.user import User
|
||||
from atst.models.role import Role
|
||||
@ -217,3 +219,17 @@ class WorkspaceFactory(Base):
|
||||
request = factory.SubFactory(RequestFactory)
|
||||
# name it the same as the request ID by default
|
||||
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