Only provision EnvironmentRoles with active ApplicationRoles

This commit is contained in:
richard-dds 2019-09-23 11:30:06 -04:00
parent f523db4d2d
commit 399cf74ed6
2 changed files with 29 additions and 8 deletions

View File

@ -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]

View File

@ -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):