Add Environments.provisioning_status

This commit is contained in:
richard-dds 2019-09-10 16:47:45 -04:00
parent 1a9c34d856
commit 365a50efce
2 changed files with 44 additions and 1 deletions

View File

@ -1,6 +1,7 @@
from sqlalchemy import Column, ForeignKey, String from sqlalchemy import Column, ForeignKey, String
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.dialects.postgresql import JSONB
from enum import Enum
from atst.models import Base from atst.models import Base
from atst.models.types import Id from atst.models.types import Id
@ -30,6 +31,10 @@ class Environment(
job_failures = relationship("EnvironmentJobFailure") job_failures = relationship("EnvironmentJobFailure")
class ProvisioningStatus(Enum):
PENDING = "pending"
COMPLETED = "completed"
@property @property
def users(self): def users(self):
return {r.application_role.user for r in self.roles} return {r.application_role.user for r in self.roles}
@ -50,6 +55,17 @@ class Environment(
def portfolio_id(self): def portfolio_id(self):
return self.application.portfolio_id 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): def __repr__(self):
return "<Environment(name='{}', num_users='{}', application='{}', portfolio='{}', id='{}')>".format( return "<Environment(name='{}', num_users='{}', application='{}', portfolio='{}', id='{}')>".format(
self.name, self.name,

View File

@ -1,6 +1,7 @@
import pytest
from atst.models import AuditEvent from atst.models import AuditEvent
from atst.models.environment_role import CSPRole from atst.models.environment_role import CSPRole
from atst.domain.environments import Environments
from atst.domain.applications import Applications from atst.domain.applications import Applications
from tests.factories import * from tests.factories import *
@ -46,3 +47,29 @@ def test_audit_event_for_environment_deletion(session):
before, after = update_event.changed_state["deleted"] before, after = update_event.changed_state["deleted"]
assert not before assert not before
assert after 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