Merge branch 'rjm/2351-org-requests-page' of https://github.com/cisagov/manage.get.gov into rjm/2351-org-requests-page

This commit is contained in:
David Kennedy 2024-09-06 17:33:54 -04:00
commit a3204c872d
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
3 changed files with 21 additions and 25 deletions

View file

@ -6,7 +6,7 @@ import logging
from urllib.parse import parse_qs from urllib.parse import parse_qs
from django.urls import reverse from django.urls import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from registrar.models.user import User from registrar.models import User, Portfolio
from waffle.decorators import flag_is_active from waffle.decorators import flag_is_active
from registrar.models.utility.generic_helper import replace_url_queryparams from registrar.models.utility.generic_helper import replace_url_queryparams
@ -144,27 +144,16 @@ class CheckPortfolioMiddleware:
if not request.user.is_authenticated: if not request.user.is_authenticated:
return None return None
old_updated_at = None portfolio = request.session.get("portfolio")
if request.session.get("portfolio"):
old_updated_at = request.session.get("portfolio__updated_at")
request.session["portfolio__updated_at"] = request.session.get("portfolio").updated_at
should_update_portfolio = not request.session.get("portfolio") or old_updated_at != request.session.get(
"portfolio__updated_at"
)
if request.user.is_org_user(request) or should_update_portfolio:
# if multiple portfolios are allowed for this user # if multiple portfolios are allowed for this user
if flag_is_active(request, "multiple_portfolios"): if flag_is_active(request, "organization_feature"):
# NOTE: we will want to change later to have a workflow for selecting old_updated_at = request.session.get("portfolio__updated_at")
# portfolio and another for switching portfolio; for now, select first request.session["portfolio__updated_at"] = portfolio.updated_at if portfolio else None
request.session["portfolio"] = request.user.get_first_portfolio() if request.user.is_org_user(request) or old_updated_at != request.session.get("portfolio__updated_at"):
elif flag_is_active(request, "organization_feature"): self.set_portfolio_in_session(request)
request.session["portfolio"] = request.user.get_first_portfolio() elif request.session.get("portfolio"):
else: # Edge case: User disables flag while already logged in
request.session["portfolio"] = None
else:
# Edge case: waffle flag is changed while the user is logged in
if not request.user.is_org_user(request) and request.session.get("portfolio"):
request.session["portfolio"] = None request.session["portfolio"] = None
if request.session.get("portfolio"): if request.session.get("portfolio"):
@ -173,7 +162,14 @@ class CheckPortfolioMiddleware:
portfolio_redirect = reverse("domains") portfolio_redirect = reverse("domains")
else: else:
portfolio_redirect = reverse("no-portfolio-domains") portfolio_redirect = reverse("no-portfolio-domains")
return HttpResponseRedirect(portfolio_redirect) return HttpResponseRedirect(portfolio_redirect)
return None return None
def set_portfolio_in_session(self, request):
# NOTE: we will want to change later to have a workflow for selecting
# portfolio and another for switching portfolio; for now, select first
if flag_is_active(request, "multiple_portfolios"):
request.session["portfolio"] = request.user.get_first_portfolio()
else:
request.session["portfolio"] = request.user.get_first_portfolio()

View file

@ -1135,7 +1135,7 @@ class TestPortfolioInvitations(TestCase):
self.portfolio, _ = Portfolio.objects.get_or_create(creator=self.user2, organization_name="Hotel California") self.portfolio, _ = Portfolio.objects.get_or_create(creator=self.user2, organization_name="Hotel California")
self.portfolio_role_base = UserPortfolioRoleChoices.ORGANIZATION_MEMBER self.portfolio_role_base = UserPortfolioRoleChoices.ORGANIZATION_MEMBER
self.portfolio_role_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN self.portfolio_role_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN
self.portfolio_permission_1 = UserPortfolioPermissionChoices.VIEW_CREATED_REQUESTS self.portfolio_permission_1 = UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS
self.portfolio_permission_2 = UserPortfolioPermissionChoices.EDIT_REQUESTS self.portfolio_permission_2 = UserPortfolioPermissionChoices.EDIT_REQUESTS
self.invitation, _ = PortfolioInvitation.objects.get_or_create( self.invitation, _ = PortfolioInvitation.objects.get_or_create(
email=self.email, email=self.email,

View file

@ -78,7 +78,7 @@ class TestPortfolio(WebTest):
def test_middleware_does_not_redirect_if_no_permission(self): def test_middleware_does_not_redirect_if_no_permission(self):
"""Test that user with no portfolio permission is not redirected when attempting to access home""" """Test that user with no portfolio permission is not redirected when attempting to access home"""
self.app.set_user(self.user.username) self.app.set_user(self.user.username)
portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create( UserPortfolioPermission.objects.get_or_create(
user=self.user, portfolio=self.portfolio, additional_permissions=[] user=self.user, portfolio=self.portfolio, additional_permissions=[]
) )
self.user.portfolio = self.portfolio self.user.portfolio = self.portfolio