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,28 +144,17 @@ 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( # if multiple portfolios are allowed for this user
"portfolio__updated_at" if flag_is_active(request, "organization_feature"):
) old_updated_at = request.session.get("portfolio__updated_at")
if request.user.is_org_user(request) or should_update_portfolio: request.session["portfolio__updated_at"] = portfolio.updated_at if portfolio else None
# if multiple portfolios are allowed for this user if request.user.is_org_user(request) or old_updated_at != request.session.get("portfolio__updated_at"):
if flag_is_active(request, "multiple_portfolios"): self.set_portfolio_in_session(request)
# NOTE: we will want to change later to have a workflow for selecting elif request.session.get("portfolio"):
# portfolio and another for switching portfolio; for now, select first # Edge case: User disables flag while already logged in
request.session["portfolio"] = request.user.get_first_portfolio() request.session["portfolio"] = None
elif flag_is_active(request, "organization_feature"):
request.session["portfolio"] = request.user.get_first_portfolio()
else:
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
if request.session.get("portfolio"): if request.session.get("portfolio"):
if current_path == self.home: if current_path == self.home:
@ -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