From 13861ad998a403dcc8ec89e0c240dcc9467cce5c Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 9 Sep 2019 16:00:08 -0400 Subject: [PATCH] Add query for getting environments pending atat user creation --- atst/domain/environments.py | 19 +++++++++-- atst/jobs.py | 8 +++++ tests/domain/test_environments.py | 53 +++++++++++++++++++++++++++---- 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/atst/domain/environments.py b/atst/domain/environments.py index 10ab15f9..2d3bd4a8 100644 --- a/atst/domain/environments.py +++ b/atst/domain/environments.py @@ -1,3 +1,4 @@ +from sqlalchemy import text from sqlalchemy.orm.exc import NoResultFound from atst.database import db @@ -104,8 +105,8 @@ class Environments(object): return environment @classmethod - def get_environments_pending_creation(cls, now) -> [str]: - query = ( + def base_provision_query(cls, now): + return ( db.session.query(Environment.id) .join(Application) .join(Portfolio) @@ -113,6 +114,18 @@ class Environments(object): .join(CLIN) .filter(CLIN.start_date <= now) .filter(CLIN.end_date > now) - .filter(Environment.cloud_id == None) + ) + + @classmethod + def get_environments_pending_creation(cls, now) -> [str]: + query = cls.base_provision_query(now).filter(Environment.cloud_id == None) + return [environment_id for (environment_id,) in query.all()] + + @classmethod + def get_environments_pending_atat_user_creation(cls, now) -> [str]: + query = ( + cls.base_provision_query(now) + .filter(Environment.cloud_id != None) + .filter(Environment.root_user_info == text("'null'")) ) return [environment_id for (environment_id,) in query.all()] diff --git a/atst/jobs.py b/atst/jobs.py index 6e983a6c..50a06588 100644 --- a/atst/jobs.py +++ b/atst/jobs.py @@ -126,3 +126,11 @@ def dispatch_create_environment(self): pendulum.now() ): create_environment.delay(environment_id=environment_id, atat_user_id="TODO") + + +@celery.task(bind=True) +def dispatch_create_atat_admin_user(self): + for environment_id in Environments.get_environments_pending_atat_user_creation( + pendulum.now() + ): + create_atat_admin_user.delay(environment_id=environment_id, atat_user_id="TODO") diff --git a/tests/domain/test_environments.py b/tests/domain/test_environments.py index 58ea011b..e7049d37 100644 --- a/tests/domain/test_environments.py +++ b/tests/domain/test_environments.py @@ -1,5 +1,6 @@ import pytest import pendulum +from uuid import uuid4 from atst.domain.environments import Environments from atst.domain.environment_roles import EnvironmentRoles @@ -136,18 +137,27 @@ def test_update_environment(): assert environment.name == "name 2" -class TestGetEnvironmentsPendingCreate: - NOW = pendulum.now() - YESTERDAY = NOW.subtract(days=1) - TOMORROW = NOW.add(days=1) +class EnvQueryTest: + @property + def NOW(self): + return pendulum.now() - def create_portfolio_with_clins(self, start_and_end_dates): + @property + def YESTERDAY(self): + return self.NOW.subtract(days=1) + + @property + def TOMORROW(self): + return self.NOW.add(days=1) + + def create_portfolio_with_clins(self, start_and_end_dates, env_data=None): + env_data = env_data or {} return PortfolioFactory.create( applications=[ { "name": "Mos Eisley", "description": "Where Han shot first", - "environments": [{"name": "thebar"}], + "environments": [{"name": "thebar", **env_data}], } ], task_orders=[ @@ -160,6 +170,8 @@ class TestGetEnvironmentsPendingCreate: ], ) + +class TestGetEnvironmentsPendingCreate(EnvQueryTest): def test_with_expired_clins(self, session): self.create_portfolio_with_clins([(self.YESTERDAY, self.YESTERDAY)]) assert len(Environments.get_environments_pending_creation(self.NOW)) == 0 @@ -173,3 +185,32 @@ class TestGetEnvironmentsPendingCreate: def test_with_future_clins(self, session): self.create_portfolio_with_clins([(self.TOMORROW, self.TOMORROW)]) assert len(Environments.get_environments_pending_creation(self.NOW)) == 0 + + +class TestGetEnvironmentsPendingAtatUserCreation(EnvQueryTest): + def test_with_provisioned_environment(self): + self.create_portfolio_with_clins( + [(self.YESTERDAY, self.TOMORROW)], + {"cloud_id": uuid4().hex, "root_user_info": {}}, + ) + assert ( + len(Environments.get_environments_pending_atat_user_creation(self.NOW)) == 0 + ) + + def test_with_unprovisioned_environment(self): + self.create_portfolio_with_clins( + [(self.YESTERDAY, self.TOMORROW)], + {"cloud_id": uuid4().hex, "root_user_info": None}, + ) + assert ( + len(Environments.get_environments_pending_atat_user_creation(self.NOW)) == 1 + ) + + def test_with_unprovisioned_expired_clins_environment(self): + self.create_portfolio_with_clins( + [(self.YESTERDAY, self.YESTERDAY)], + {"cloud_id": uuid4().hex, "root_user_info": None}, + ) + assert ( + len(Environments.get_environments_pending_atat_user_creation(self.NOW)) == 0 + )