Only provision EnvironmentRoles with active ApplicationRoles
This commit is contained in:
parent
f523db4d2d
commit
399cf74ed6
@ -1,7 +1,13 @@
|
|||||||
from sqlalchemy.orm.exc import NoResultFound
|
from sqlalchemy.orm.exc import NoResultFound
|
||||||
|
|
||||||
from atst.database import db
|
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 atst.domain.exceptions import NotFoundError
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from typing import List
|
from typing import List
|
||||||
@ -74,9 +80,11 @@ class EnvironmentRoles(object):
|
|||||||
results = (
|
results = (
|
||||||
db.session.query(EnvironmentRole.id)
|
db.session.query(EnvironmentRole.id)
|
||||||
.join(Environment)
|
.join(Environment)
|
||||||
|
.join(ApplicationRole)
|
||||||
.filter(Environment.deleted == False)
|
.filter(Environment.deleted == False)
|
||||||
.filter(Environment.baseline_info != None)
|
.filter(Environment.baseline_info != None)
|
||||||
.filter(EnvironmentRole.status == EnvironmentRole.Status.PENDING)
|
.filter(EnvironmentRole.status == EnvironmentRole.Status.PENDING)
|
||||||
|
.filter(ApplicationRole.status == ApplicationRoleStatus.ACTIVE)
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
return [id_ for id_, in results]
|
return [id_ for id_, in results]
|
||||||
|
@ -21,8 +21,13 @@ from atst.jobs import (
|
|||||||
)
|
)
|
||||||
from atst.models.utils import claim_for_update
|
from atst.models.utils import claim_for_update
|
||||||
from atst.domain.exceptions import ClaimFailedException
|
from atst.domain.exceptions import ClaimFailedException
|
||||||
from tests.factories import EnvironmentFactory, EnvironmentRoleFactory, PortfolioFactory
|
from tests.factories import (
|
||||||
from atst.models import EnvironmentRole
|
EnvironmentFactory,
|
||||||
|
EnvironmentRoleFactory,
|
||||||
|
PortfolioFactory,
|
||||||
|
ApplicationRoleFactory,
|
||||||
|
)
|
||||||
|
from atst.models import EnvironmentRole, ApplicationRoleStatus
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True, scope="function")
|
@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:
|
# Given that I have three environment roles:
|
||||||
# (A) one of which has a completed status
|
# (A) one of which has a completed status
|
||||||
# (B) one of which has an environment that has not been provisioned
|
# (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(
|
provisioned_environment = EnvironmentFactory.create(
|
||||||
cloud_id="cloud_id", root_user_info={}, baseline_info={}
|
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(
|
_er_b = EnvironmentRoleFactory.create(
|
||||||
environment=unprovisioned_environment, status=EnvironmentRole.Status.PENDING
|
environment=unprovisioned_environment, status=EnvironmentRole.Status.PENDING
|
||||||
)
|
)
|
||||||
er_c = EnvironmentRoleFactory.create(
|
_er_c = EnvironmentRoleFactory.create(
|
||||||
environment=provisioned_environment, status=EnvironmentRole.Status.PENDING
|
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()
|
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
|
# When I dispatch the user provisioning task
|
||||||
dispatch_provision_user.run()
|
dispatch_provision_user.run()
|
||||||
|
|
||||||
# I expect it to dispatch only one call, to EnvironmentRole C
|
# I expect it to dispatch only one call, to EnvironmentRole D
|
||||||
mock.delay.assert_called_once_with(environment_role_id=er_c.id)
|
mock.delay.assert_called_once_with(environment_role_id=er_d.id)
|
||||||
|
|
||||||
|
|
||||||
def test_do_provision_user(csp, session):
|
def test_do_provision_user(csp, session):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user