From 8bd945d0d4bbb0d559a7efed256367a97e881867 Mon Sep 17 00:00:00 2001 From: dandds Date: Fri, 3 May 2019 08:13:56 -0400 Subject: [PATCH] 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. --- atst/domain/applications.py | 11 +++++------ tests/domain/test_applications.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/atst/domain/applications.py b/atst/domain/applications.py index 640242c0..091e8c37 100644 --- a/atst/domain/applications.py +++ b/atst/domain/applications.py @@ -6,9 +6,7 @@ from atst.domain.application_roles import ApplicationRoles from atst.domain.environments import Environments from atst.domain.exceptions import NotFoundError from atst.domain.users import Users -from atst.models.application import Application -from atst.models.environment import Environment -from atst.models.environment_role import EnvironmentRole +from atst.models import Application, ApplicationRole, ApplicationRoleStatus class Applications(BaseDomainClass): @@ -31,10 +29,11 @@ class Applications(BaseDomainClass): def for_user(self, user, portfolio): return ( db.session.query(Application) - .join(Environment) - .join(EnvironmentRole) + .join(ApplicationRole) .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() ) diff --git a/tests/domain/test_applications.py b/tests/domain/test_applications.py index 922b813c..84aa80d4 100644 --- a/tests/domain/test_applications.py +++ b/tests/domain/test_applications.py @@ -1,7 +1,7 @@ import pytest from uuid import uuid4 -from atst.models import CSPRole +from atst.models import CSPRole, ApplicationRoleStatus from atst.domain.applications import Applications from atst.domain.permission_sets import PermissionSets from atst.domain.exceptions import NotFoundError @@ -128,3 +128,30 @@ def test_create_member(): env_roles = member_role.user.environment_roles assert len(env_roles) == 1 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