Add query for environments pending creation
This commit is contained in:
parent
e9bf806dc6
commit
4a5ca1cd27
21
atst/jobs.py
21
atst/jobs.py
@ -6,6 +6,7 @@ from atst.models import EnvironmentJobFailure, EnvironmentRoleJobFailure
|
||||
from atst.domain.csp.cloud import CloudProviderInterface, GeneralCSPException
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.users import Users
|
||||
from atst.models import Application, Portfolio, TaskOrder, CLIN, Environment
|
||||
|
||||
|
||||
class RecordEnvironmentFailure(celery.Task):
|
||||
@ -117,3 +118,23 @@ def create_atat_admin_user(self, environment_id=None):
|
||||
@celery.task(bind=True)
|
||||
def create_environment_baseline(self, environment_id=None):
|
||||
do_work(do_create_environment_baseline, self, app.csp.cloud, **kwargs)
|
||||
|
||||
|
||||
def environments_to_create(now):
|
||||
query = (
|
||||
db.session.query(Environment.id)
|
||||
.join(Application)
|
||||
.join(Portfolio)
|
||||
.join(TaskOrder)
|
||||
.join(CLIN)
|
||||
.filter(CLIN.start_date <= now)
|
||||
.filter(CLIN.end_date > now)
|
||||
.filter(Environment.cloud_id == None)
|
||||
)
|
||||
return [environment_id for (environment_id,) in query.all()]
|
||||
|
||||
|
||||
@celery.task(bind=True)
|
||||
def dispatch_create_environment(self):
|
||||
for environment_id in environments_to_create(pendulum.now()):
|
||||
create_environment.delay(environment_id=environment_id, atat_user_id="TODO")
|
||||
|
@ -1,18 +1,26 @@
|
||||
import pendulum
|
||||
import pytest
|
||||
|
||||
from atst.jobs import RecordEnvironmentFailure, RecordEnvironmentRoleFailure
|
||||
from tests.factories import EnvironmentFactory, EnvironmentRoleFactory, UserFactory
|
||||
from uuid import uuid4
|
||||
from unittest.mock import Mock
|
||||
|
||||
from tests.factories import (
|
||||
UserFactory,
|
||||
PortfolioFactory,
|
||||
CLINFactory,
|
||||
TaskOrderFactory,
|
||||
EnvironmentFactory
|
||||
)
|
||||
from atst.domain.csp.cloud import MockCloudProvider
|
||||
from atst.jobs import (
|
||||
do_create_environment,
|
||||
do_create_atat_admin_user,
|
||||
do_create_environment_baseline,
|
||||
environments_to_create,
|
||||
)
|
||||
from atst.models import Environment
|
||||
|
||||
|
||||
def test_environment_job_failure(celery_app, celery_worker):
|
||||
@celery_app.task(bind=True, base=RecordEnvironmentFailure)
|
||||
def _fail_hard(self, environment_id=None):
|
||||
@ -47,8 +55,10 @@ def test_environment_role_job_failure(celery_app, celery_worker):
|
||||
assert role.job_failures
|
||||
job_failure = role.job_failures[0]
|
||||
assert job_failure.task == task
|
||||
from tests.factories import EnvironmentFactory, UserFactory
|
||||
from atst.domain.csp.cloud import MockCloudProvider
|
||||
|
||||
now = pendulum.now()
|
||||
yesterday = now.subtract(days=1)
|
||||
tomorrow = now.add(days=1)
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True, scope="function")
|
||||
@ -99,3 +109,40 @@ def test_create_environment_baseline(csp, session):
|
||||
updated_environment = session.query(Environment).get(environment_id)
|
||||
|
||||
assert updated_environment.baseline_info
|
||||
|
||||
|
||||
def create_portfolio_with_clins(start_and_end_dates):
|
||||
return PortfolioFactory.create(
|
||||
applications=[
|
||||
{
|
||||
"name": "Mos Eisley",
|
||||
"description": "Where Han shot first",
|
||||
"environments": [{"name": "thebar"}],
|
||||
}
|
||||
],
|
||||
task_orders=[
|
||||
TaskOrderFactory.create(
|
||||
clins=[
|
||||
CLINFactory.create(start_date=start_date, end_date=end_date)
|
||||
for (start_date, end_date) in start_and_end_dates
|
||||
]
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
def test_dispatch_query_with_expired_clins(session):
|
||||
create_portfolio_with_clins([(yesterday, yesterday)])
|
||||
assert len(environments_to_create(pendulum.now())) == 0
|
||||
|
||||
|
||||
def test_dispatch_query_with_active_clins(session):
|
||||
portfolio = create_portfolio_with_clins([(yesterday, tomorrow)])
|
||||
environments_to_create(pendulum.now()) == [
|
||||
portfolio.applications[0].environments[0].id
|
||||
]
|
||||
|
||||
|
||||
def test_dispatch_query_with_future_clins(session):
|
||||
create_portfolio_with_clins([(tomorrow, tomorrow)])
|
||||
assert len(environments_to_create(pendulum.now())) == 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user