Applications.for_user returns user's portfolio applications.

The method has been updated to that, given a user and portfolio, it
returns the portfolio applications for which the user has an application
role.
This commit is contained in:
dandds 2019-05-03 08:13:56 -04:00
parent a2ebdf78a0
commit 8bd945d0d4
2 changed files with 33 additions and 7 deletions

View File

@ -6,9 +6,7 @@ from atst.domain.application_roles import ApplicationRoles
from atst.domain.environments import Environments from atst.domain.environments import Environments
from atst.domain.exceptions import NotFoundError from atst.domain.exceptions import NotFoundError
from atst.domain.users import Users from atst.domain.users import Users
from atst.models.application import Application from atst.models import Application, ApplicationRole, ApplicationRoleStatus
from atst.models.environment import Environment
from atst.models.environment_role import EnvironmentRole
class Applications(BaseDomainClass): class Applications(BaseDomainClass):
@ -31,10 +29,11 @@ class Applications(BaseDomainClass):
def for_user(self, user, portfolio): def for_user(self, user, portfolio):
return ( return (
db.session.query(Application) db.session.query(Application)
.join(Environment) .join(ApplicationRole)
.join(EnvironmentRole)
.filter(Application.portfolio_id == portfolio.id) .filter(Application.portfolio_id == portfolio.id)
.filter(EnvironmentRole.user_id == user.id) .filter(ApplicationRole.application_id == Application.id)
.filter(ApplicationRole.user_id == user.id)
.filter(ApplicationRole.status == ApplicationRoleStatus.ACTIVE)
.all() .all()
) )

View File

@ -1,7 +1,7 @@
import pytest import pytest
from uuid import uuid4 from uuid import uuid4
from atst.models import CSPRole from atst.models import CSPRole, ApplicationRoleStatus
from atst.domain.applications import Applications from atst.domain.applications import Applications
from atst.domain.permission_sets import PermissionSets from atst.domain.permission_sets import PermissionSets
from atst.domain.exceptions import NotFoundError from atst.domain.exceptions import NotFoundError
@ -128,3 +128,30 @@ def test_create_member():
env_roles = member_role.user.environment_roles env_roles = member_role.user.environment_roles
assert len(env_roles) == 1 assert len(env_roles) == 1
assert env_roles[0].environment == env1 assert env_roles[0].environment == env1
def test_for_user():
user = UserFactory.create()
portfolio = PortfolioFactory.create()
for _x in range(4):
ApplicationFactory.create(portfolio=portfolio)
ApplicationRoleFactory.create(
application=portfolio.applications[0],
user=user,
status=ApplicationRoleStatus.ACTIVE,
)
ApplicationRoleFactory.create(
application=portfolio.applications[1],
user=user,
status=ApplicationRoleStatus.ACTIVE,
)
ApplicationRoleFactory.create(
application=portfolio.applications[2],
user=user,
status=ApplicationRoleStatus.PENDING,
)
assert len(portfolio.applications) == 4
user_applications = Applications.for_user(user, portfolio)
assert len(user_applications) == 2