From 399cf74ed6e83b951c309be6d9f18c6a1039f27a Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 23 Sep 2019 11:30:06 -0400 Subject: [PATCH] Only provision EnvironmentRoles with active ApplicationRoles --- atst/domain/environment_roles.py | 10 +++++++++- tests/test_jobs.py | 27 ++++++++++++++++++++------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/atst/domain/environment_roles.py b/atst/domain/environment_roles.py index d8475f0e..c3c89169 100644 --- a/atst/domain/environment_roles.py +++ b/atst/domain/environment_roles.py @@ -1,7 +1,13 @@ from sqlalchemy.orm.exc import NoResultFound from atst.database import db -from atst.models import EnvironmentRole, ApplicationRole, Environment +from atst.models import ( + EnvironmentRole, + ApplicationRole, + Environment, + ApplicationInvitation, + ApplicationRoleStatus, +) from atst.domain.exceptions import NotFoundError from uuid import UUID from typing import List @@ -74,9 +80,11 @@ class EnvironmentRoles(object): results = ( db.session.query(EnvironmentRole.id) .join(Environment) + .join(ApplicationRole) .filter(Environment.deleted == False) .filter(Environment.baseline_info != None) .filter(EnvironmentRole.status == EnvironmentRole.Status.PENDING) + .filter(ApplicationRole.status == ApplicationRoleStatus.ACTIVE) .all() ) return [id_ for id_, in results] diff --git a/tests/test_jobs.py b/tests/test_jobs.py index e5d4b0b4..212e8515 100644 --- a/tests/test_jobs.py +++ b/tests/test_jobs.py @@ -21,8 +21,13 @@ from atst.jobs import ( ) from atst.models.utils import claim_for_update from atst.domain.exceptions import ClaimFailedException -from tests.factories import EnvironmentFactory, EnvironmentRoleFactory, PortfolioFactory -from atst.models import EnvironmentRole +from tests.factories import ( + EnvironmentFactory, + EnvironmentRoleFactory, + PortfolioFactory, + ApplicationRoleFactory, +) +from atst.models import EnvironmentRole, ApplicationRoleStatus @pytest.fixture(autouse=True, scope="function") @@ -300,7 +305,8 @@ def test_dispatch_provision_user(csp, session, celery_app, celery_worker, monkey # Given that I have three environment roles: # (A) one of which has a completed status # (B) one of which has an environment that has not been provisioned - # (C) one of which is pending and has a provisioned environment + # (C) one of which is pending, has a provisioned environment but an inactive application role + # (D) one of which is pending, has a provisioned environment and has an active application role provisioned_environment = EnvironmentFactory.create( cloud_id="cloud_id", root_user_info={}, baseline_info={} ) @@ -311,8 +317,15 @@ def test_dispatch_provision_user(csp, session, celery_app, celery_worker, monkey _er_b = EnvironmentRoleFactory.create( environment=unprovisioned_environment, status=EnvironmentRole.Status.PENDING ) - er_c = EnvironmentRoleFactory.create( - environment=provisioned_environment, status=EnvironmentRole.Status.PENDING + _er_c = EnvironmentRoleFactory.create( + environment=unprovisioned_environment, + status=EnvironmentRole.Status.PENDING, + application_role=ApplicationRoleFactory(status=ApplicationRoleStatus.PENDING), + ) + er_d = EnvironmentRoleFactory.create( + environment=provisioned_environment, + status=EnvironmentRole.Status.PENDING, + application_role=ApplicationRoleFactory(status=ApplicationRoleStatus.ACTIVE), ) mock = Mock() @@ -321,8 +334,8 @@ def test_dispatch_provision_user(csp, session, celery_app, celery_worker, monkey # When I dispatch the user provisioning task dispatch_provision_user.run() - # I expect it to dispatch only one call, to EnvironmentRole C - mock.delay.assert_called_once_with(environment_role_id=er_c.id) + # I expect it to dispatch only one call, to EnvironmentRole D + mock.delay.assert_called_once_with(environment_role_id=er_d.id) def test_do_provision_user(csp, session):