diff --git a/atst/models/permission_set.py b/atst/models/permission_set.py index cb5ddb92..1818fbb7 100644 --- a/atst/models/permission_set.py +++ b/atst/models/permission_set.py @@ -1,6 +1,5 @@ from sqlalchemy import String, Column from sqlalchemy.dialects.postgresql import ARRAY -from sqlalchemy.orm.attributes import flag_modified from atst.models import Base, types, mixins @@ -14,18 +13,6 @@ class PermissionSet(Base, mixins.TimestampsMixin): description = Column(String, nullable=False) permissions = Column(ARRAY(String), index=True, server_default="{}", nullable=False) - def add_permission(self, permission): - perms_set = set(self.permissions) - perms_set.add(permission) - self.permissions = list(perms_set) - flag_modified(self, "permissions") - - def remove_permission(self, permission): - perms_set = set(self.permissions) - perms_set.discard(permission) - self.permissions = list(perms_set) - flag_modified(self, "permissions") - def __repr__(self): return "".format( self.name, self.description, self.permissions, self.id diff --git a/tests/domain/test_portfolios.py b/tests/domain/test_portfolios.py index b806e9a5..dd752416 100644 --- a/tests/domain/test_portfolios.py +++ b/tests/domain/test_portfolios.py @@ -162,6 +162,26 @@ def test_random_user_cannot_view_portfolio_members(portfolio): portfolio = Portfolios.get_with_members(developer, portfolio.id) +def test_scoped_portfolio_for_admin_missing_view_apps_perms(portfolio_owner, portfolio): + Applications.create( + portfolio_owner, + portfolio, + "My Application 2", + "My application 2", + ["dev", "staging", "prod"], + ) + restricted_admin = UserFactory.create() + PortfolioRoleFactory.create( + portfolio=portfolio, + user=restricted_admin, + permission_sets=[PermissionSets.get(PermissionSets.VIEW_PORTFOLIO)], + ) + scoped_portfolio = Portfolios.get(restricted_admin, portfolio.id) + assert scoped_portfolio.id == portfolio.id + assert len(portfolio.applications) == 1 + assert len(scoped_portfolio.applications) == 0 + + @pytest.mark.skip(reason="should be reworked pending application member changes") def test_scoped_portfolio_only_returns_a_users_applications_and_environments( portfolio, portfolio_owner diff --git a/tests/models/test_portfolio_role.py b/tests/models/test_portfolio_role.py index 7c67fe5d..198408c8 100644 --- a/tests/models/test_portfolio_role.py +++ b/tests/models/test_portfolio_role.py @@ -21,7 +21,7 @@ from tests.factories import ( from atst.domain.portfolio_roles import PortfolioRoles -def test_has_no_ws_role_history(session): +def test_has_no_portfolio_role_history(session): owner = UserFactory.create() user = UserFactory.create() @@ -39,7 +39,7 @@ def test_has_no_ws_role_history(session): @pytest.mark.skip(reason="need to update audit log permission set handling") -def test_has_ws_role_history(session): +def test_has_portfolio_role_history(session): owner = UserFactory.create() user = UserFactory.create() @@ -62,7 +62,7 @@ def test_has_ws_role_history(session): assert changed_events[0].changed_state["role"][1] == "admin" -def test_has_ws_status_history(session): +def test_has_portfolio_status_history(session): owner = UserFactory.create() user = UserFactory.create() @@ -189,6 +189,11 @@ def test_status_when_member_is_active(): assert portfolio_role.display_status == "Active" +def test_status_when_member_is_disabled(): + portfolio_role = PortfolioRoleFactory.create(status=Status.DISABLED) + assert portfolio_role.display_status == "Disabled" + + def test_status_when_invitation_has_been_rejected_for_expirations(): portfolio = PortfolioFactory.create() user = UserFactory.create() @@ -213,6 +218,18 @@ def test_status_when_invitation_has_been_rejected_for_wrong_user(): assert portfolio_role.display_status == "Error on invite" +def test_status_when_invitation_has_been_revoked(): + portfolio = PortfolioFactory.create() + user = UserFactory.create() + portfolio_role = PortfolioRoleFactory.create( + portfolio=portfolio, user=user, status=PortfolioRoleStatus.PENDING + ) + invitation = InvitationFactory.create( + portfolio_role=portfolio_role, status=InvitationStatus.REVOKED + ) + assert portfolio_role.display_status == "Invite revoked" + + def test_status_when_invitation_is_expired(): portfolio = PortfolioFactory.create() user = UserFactory.create() diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index fe4ec09e..f27e7ee1 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -340,3 +340,15 @@ def test_review_task_order_form(client, user_session, task_order): ) assert response.status_code == 200 + + +def test_update_task_order_clears_unnecessary_other_responses(): + user = UserFactory.create() + to_data = TaskOrderFactory.dictionary() + to_data["complexity"] = ["storage"] + to_data["complexity_other"] = "something else" + to_data["dev_team"] = ["civilians"] + to_data["dev_team_other"] = "something else" + workflow = UpdateTaskOrderWorkflow(user, to_data) + assert workflow.task_order_form_data["complexity_other"] is None + assert workflow.task_order_form_data["dev_team_other"] is None