diff --git a/atst/domain/environments.py b/atst/domain/environments.py index 491546b2..9555d12a 100644 --- a/atst/domain/environments.py +++ b/atst/domain/environments.py @@ -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() ) diff --git a/tests/domain/test_environments.py b/tests/domain/test_environments.py index 2b7f4995..eb432f77 100644 --- a/tests/domain/test_environments.py +++ b/tests/domain/test_environments.py @@ -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"] diff --git a/tests/factories.py b/tests/factories.py index 1d39c7c8..b2b973e9 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -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