diff --git a/atst/models/environment.py b/atst/models/environment.py index 02e87f85..fcdea074 100644 --- a/atst/models/environment.py +++ b/atst/models/environment.py @@ -1,6 +1,7 @@ from sqlalchemy import Column, ForeignKey, String from sqlalchemy.orm import relationship from sqlalchemy.dialects.postgresql import JSONB +from enum import Enum from atst.models import Base from atst.models.types import Id @@ -30,6 +31,10 @@ class Environment( job_failures = relationship("EnvironmentJobFailure") + class ProvisioningStatus(Enum): + PENDING = "pending" + COMPLETED = "completed" + @property def users(self): return {r.application_role.user for r in self.roles} @@ -50,6 +55,17 @@ class Environment( def portfolio_id(self): return self.application.portfolio_id + @property + def provisioning_status(self) -> ProvisioningStatus: + if ( + self.cloud_id is None + or self.root_user_info is None + or self.baseline_info is None + ): + return self.ProvisioningStatus.PENDING + else: + return self.ProvisioningStatus.COMPLETED + def __repr__(self): return "".format( self.name, diff --git a/tests/models/test_environments.py b/tests/models/test_environments.py index 170b5162..2c2453f6 100644 --- a/tests/models/test_environments.py +++ b/tests/models/test_environments.py @@ -1,6 +1,7 @@ +import pytest + from atst.models import AuditEvent from atst.models.environment_role import CSPRole -from atst.domain.environments import Environments from atst.domain.applications import Applications from tests.factories import * @@ -46,3 +47,29 @@ def test_audit_event_for_environment_deletion(session): before, after = update_event.changed_state["deleted"] assert not before assert after + + +@pytest.mark.parametrize( + "env_data,expected_status", + [ + [ + {"cloud_id": None, "root_user_info": None, "baseline_info": None}, + Environment.ProvisioningStatus.PENDING, + ], + [ + {"cloud_id": 1, "root_user_info": None, "baseline_info": None}, + Environment.ProvisioningStatus.PENDING, + ], + [ + {"cloud_id": 1, "root_user_info": {}, "baseline_info": None}, + Environment.ProvisioningStatus.PENDING, + ], + [ + {"cloud_id": 1, "root_user_info": {}, "baseline_info": {}}, + Environment.ProvisioningStatus.COMPLETED, + ], + ], +) +def test_environment_provisioning_status(env_data, expected_status): + environment = EnvironmentFactory.create(**env_data) + assert environment.provisioning_status == expected_status