diff --git a/atst/models/environment.py b/atst/models/environment.py index 14314cb1..5fc642e5 100644 --- a/atst/models/environment.py +++ b/atst/models/environment.py @@ -32,6 +32,12 @@ class Environment( job_failures = relationship("EnvironmentJobFailure") + roles = relationship( + "EnvironmentRole", + back_populates="environment", + primaryjoin="and_(EnvironmentRole.environment_id == Environment.id, EnvironmentRole.deleted == False)", + ) + class ProvisioningStatus(Enum): PENDING = "pending" COMPLETED = "completed" diff --git a/atst/models/environment_role.py b/atst/models/environment_role.py index 97b2988a..813d3d50 100644 --- a/atst/models/environment_role.py +++ b/atst/models/environment_role.py @@ -24,7 +24,7 @@ class EnvironmentRole( environment_id = Column( UUID(as_uuid=True), ForeignKey("environments.id"), nullable=False ) - environment = relationship("Environment", backref="roles") + environment = relationship("Environment") role = Column(String()) diff --git a/templates/applications/fragments/environments.html b/templates/applications/fragments/environments.html index 8ea06585..923d41a9 100644 --- a/templates/applications/fragments/environments.html +++ b/templates/applications/fragments/environments.html @@ -76,7 +76,7 @@
  • {{ edit_form.csrf_token }} - {{ TextInput(edit_form.name, validation='requiredField') }} + {{ TextInput(edit_form.name, validation='requiredField', optional=False) }} {{ SaveButton( text=("common.save" | translate) diff --git a/tests/models/test_environments.py b/tests/models/test_environments.py index e99c348c..759a6df8 100644 --- a/tests/models/test_environments.py +++ b/tests/models/test_environments.py @@ -3,6 +3,7 @@ import pytest from atst.models import AuditEvent from atst.models.environment_role import CSPRole from atst.domain.applications import Applications +from atst.domain.environment_roles import EnvironmentRoles from tests.factories import * @@ -70,3 +71,19 @@ def test_audit_event_for_environment_deletion(session): def test_environment_provisioning_status(env_data, expected_status): environment = EnvironmentFactory.create(**env_data) assert environment.provisioning_status == expected_status + + +def test_environment_roles_do_not_include_deleted(): + member_list = [ + {"role_name": CSPRole.BASIC_ACCESS.value}, + {"role_name": CSPRole.BASIC_ACCESS.value}, + {"role_name": CSPRole.BASIC_ACCESS.value}, + ] + env = EnvironmentFactory.create(members=member_list) + role_1 = env.roles[0] + role_2 = env.roles[1] + + EnvironmentRoles.delete(role_1.application_role_id, env.id) + EnvironmentRoles.disable(role_2.id) + + assert len(env.roles) == 2