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.
75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
import pytest
|
|
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,
|
|
WorkspaceFactory,
|
|
EnvironmentFactory,
|
|
ProjectFactory,
|
|
)
|
|
|
|
|
|
def test_update_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(
|
|
owner, workspace, "my test project", "It's mine.", ["dev", "staging", "prod"]
|
|
)
|
|
|
|
dev_env = project.environments[0]
|
|
staging_env = project.environments[1]
|
|
Environments.add_member(dev_env, workspace_user.user, "devops")
|
|
Environments.add_member(staging_env, workspace_user.user, "developer")
|
|
|
|
new_ids_and_roles = [
|
|
{"id": dev_env.id, "role": "billing_admin"},
|
|
{"id": staging_env.id, "role": "developer"},
|
|
]
|
|
|
|
Environments.update_environment_role(owner, new_ids_and_roles, workspace_user)
|
|
new_dev_env_role = EnvironmentRoles.get(workspace_user.user.id, dev_env.id)
|
|
staging_env_role = EnvironmentRoles.get(workspace_user.user.id, staging_env.id)
|
|
|
|
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"]
|