implement PermissionSets.get_many for getting multiple permission sets by name

This commit is contained in:
dandds 2019-03-14 13:47:57 -04:00
parent ee37a5543a
commit ad56ddc60e
9 changed files with 66 additions and 31 deletions

View File

@ -30,6 +30,14 @@ class PermissionSets(object):
def get_all(cls): def get_all(cls):
return db.session.query(PermissionSet).all() return db.session.query(PermissionSet).all()
@classmethod
def get_many(cls, perms_set_names):
return (
db.session.query(PermissionSet)
.filter(PermissionSet.name.in_(perms_set_names))
.all()
)
ATAT_ROLES = [ ATAT_ROLES = [
{ {

View File

@ -101,16 +101,25 @@ class PortfolioRoles(object):
PermissionSets.VIEW_PORTFOLIO_FUNDING, PermissionSets.VIEW_PORTFOLIO_FUNDING,
PermissionSets.VIEW_PORTFOLIO_REPORTS, PermissionSets.VIEW_PORTFOLIO_REPORTS,
PermissionSets.VIEW_PORTFOLIO_ADMIN, PermissionSets.VIEW_PORTFOLIO_ADMIN,
PermissionSets.VIEW_PORTFOLIO,
} }
PORTFOLIO_PERMISSION_SETS = DEFAULT_PORTFOLIO_PERMISSION_SETS.union(
{
PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT,
PermissionSets.EDIT_PORTFOLIO_FUNDING,
PermissionSets.EDIT_PORTFOLIO_REPORTS,
PermissionSets.EDIT_PORTFOLIO_ADMIN,
PermissionSets.PORTFOLIO_POC,
}
)
@classmethod @classmethod
def _permission_sets_for_names(cls, set_names): def _permission_sets_for_names(cls, set_names):
perms_set_names = PortfolioRoles.DEFAULT_PORTFOLIO_PERMISSION_SETS.union( perms_set_names = PortfolioRoles.DEFAULT_PORTFOLIO_PERMISSION_SETS.union(
set(set_names) set(set_names)
) )
return [ return PermissionSets.get_many(perms_set_names)
PermissionSets.get(perms_set_name) for perms_set_name in perms_set_names
]
@classmethod @classmethod
def update(cls, portfolio_role, set_names): def update(cls, portfolio_role, set_names):

View File

@ -1,4 +1,4 @@
from atst.domain.permission_sets import PermissionSets, PORTFOLIO_PERMISSION_SETS from atst.domain.permission_sets import PermissionSets
from atst.domain.authz import Authorization from atst.domain.authz import Authorization
from atst.models.permissions import Permissions from atst.models.permissions import Permissions
from atst.domain.users import Users from atst.domain.users import Users
@ -20,9 +20,7 @@ class Portfolios(object):
portfolio = PortfoliosQuery.create( portfolio = PortfoliosQuery.create(
name=name, defense_component=defense_component name=name, defense_component=defense_component
) )
perms_sets = [ perms_sets = PermissionSets.get_many(PortfolioRoles.PORTFOLIO_PERMISSION_SETS)
PermissionSets.get(prms["name"]) for prms in PORTFOLIO_PERMISSION_SETS
]
Portfolios._create_portfolio_role( Portfolios._create_portfolio_role(
user, user,
portfolio, portfolio,

View File

@ -0,0 +1,32 @@
import pytest
from atst.domain.permission_sets import PermissionSets
from atst.domain.exceptions import NotFoundError
from atst.utils import first_or_none
def test_get_all():
roles = PermissionSets.get_all()
assert roles
def test_get_existing_permission_set():
role = PermissionSets.get("portfolio_poc")
assert role.name == "portfolio_poc"
def test_get_nonexistent_permission_set():
with pytest.raises(NotFoundError):
PermissionSets.get("nonexistent")
def test_get_many():
perms_sets = PermissionSets.get_many(
[PermissionSets.VIEW_PORTFOLIO_FUNDING, PermissionSets.EDIT_PORTFOLIO_FUNDING]
)
assert len(perms_sets) == 2
assert first_or_none(
lambda p: p.name == PermissionSets.VIEW_PORTFOLIO_FUNDING, perms_sets
)
assert first_or_none(
lambda p: p.name == PermissionSets.EDIT_PORTFOLIO_FUNDING, perms_sets
)

View File

@ -18,13 +18,14 @@ def test_add_portfolio_role_with_permission_sets():
port_role = PortfolioRoles.add( port_role = PortfolioRoles.add(
new_user, portfolio.id, permission_sets=permission_sets new_user, portfolio.id, permission_sets=permission_sets
) )
assert len(port_role.permission_sets) == 5 assert len(port_role.permission_sets) == 6
expected_names = [ expected_names = [
PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT, PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT,
PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT, PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
PermissionSets.VIEW_PORTFOLIO_FUNDING, PermissionSets.VIEW_PORTFOLIO_FUNDING,
PermissionSets.VIEW_PORTFOLIO_REPORTS, PermissionSets.VIEW_PORTFOLIO_REPORTS,
PermissionSets.VIEW_PORTFOLIO_ADMIN, PermissionSets.VIEW_PORTFOLIO_ADMIN,
PermissionSets.VIEW_PORTFOLIO,
] ]
actual_names = [prms.name for prms in port_role.permission_sets] actual_names = [prms.name for prms in port_role.permission_sets]
assert expected_names == expected_names assert expected_names == expected_names

View File

@ -9,7 +9,12 @@ from atst.domain.environments import Environments
from atst.domain.permission_sets import PermissionSets, PORTFOLIO_PERMISSION_SETS from atst.domain.permission_sets import PermissionSets, PORTFOLIO_PERMISSION_SETS
from atst.models.portfolio_role import Status as PortfolioRoleStatus from atst.models.portfolio_role import Status as PortfolioRoleStatus
from tests.factories import UserFactory, PortfolioRoleFactory, PortfolioFactory from tests.factories import (
UserFactory,
PortfolioRoleFactory,
PortfolioFactory,
get_all_portfolio_permission_sets,
)
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
@ -201,7 +206,7 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_admin(
) )
admin = UserFactory.create() admin = UserFactory.create()
perm_sets = [PermissionSets.get(prms["name"]) for prms in PORTFOLIO_PERMISSION_SETS] perm_sets = get_all_portfolio_permission_sets()
PortfolioRoleFactory.create( PortfolioRoleFactory.create(
user=admin, portfolio=portfolio, permission_sets=perm_sets user=admin, portfolio=portfolio, permission_sets=perm_sets
) )
@ -263,7 +268,7 @@ def test_get_for_update_information(portfolio, portfolio_owner):
assert portfolio == owner_ws assert portfolio == owner_ws
admin = UserFactory.create() admin = UserFactory.create()
perm_sets = [PermissionSets.get(prms["name"]) for prms in PORTFOLIO_PERMISSION_SETS] perm_sets = get_all_portfolio_permission_sets()
PortfolioRoleFactory.create( PortfolioRoleFactory.create(
user=admin, portfolio=portfolio, permission_sets=perm_sets user=admin, portfolio=portfolio, permission_sets=perm_sets
) )

View File

@ -1,18 +0,0 @@
import pytest
from atst.domain.permission_sets import PermissionSets
from atst.domain.exceptions import NotFoundError
def test_get_all_roles():
roles = PermissionSets.get_all()
assert roles
def test_get_existing_role():
role = PermissionSets.get("portfolio_poc")
assert role.name == "portfolio_poc"
def test_get_nonexistent_role():
with pytest.raises(NotFoundError):
PermissionSets.get("nonexistent")

View File

@ -72,7 +72,7 @@ def base_portfolio_permission_sets():
def get_all_portfolio_permission_sets(): def get_all_portfolio_permission_sets():
return [PermissionSets.get(prms["name"]) for prms in PORTFOLIO_PERMISSION_SETS] return PermissionSets.get_many(PortfolioRoles.PORTFOLIO_PERMISSION_SETS)
class Base(factory.alchemy.SQLAlchemyModelFactory): class Base(factory.alchemy.SQLAlchemyModelFactory):

View File

@ -109,7 +109,7 @@ def test_create_member(client, user_session):
assert user.invitations assert user.invitations
assert len(queue.get_queue()) == queue_length + 1 assert len(queue.get_queue()) == queue_length + 1
portfolio_role = user.portfolio_roles[0] portfolio_role = user.portfolio_roles[0]
assert len(portfolio_role.permission_sets) == 4 assert len(portfolio_role.permission_sets) == 5
@pytest.mark.skip(reason="permission set display not implemented") @pytest.mark.skip(reason="permission set display not implemented")