Add registrar_middleware session tests and the Test for withdraw redirect test

This commit is contained in:
zandercymatics 2024-09-06 16:25:07 -06:00
parent 39834fde8a
commit 3d27199854
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 89 additions and 5 deletions

View file

@ -17,7 +17,7 @@ from .common import MockSESClient, completed_domain_request, create_test_user
from waffle.testutils import override_flag from waffle.testutils import override_flag
from django.contrib.sessions.middleware import SessionMiddleware from django.contrib.sessions.middleware import SessionMiddleware
import boto3_mocking # type: ignore import boto3_mocking # type: ignore
from django.test import Client
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -26,6 +26,7 @@ logger = logging.getLogger(__name__)
class TestPortfolio(WebTest): class TestPortfolio(WebTest):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.client = Client()
self.user = create_test_user() self.user = create_test_user()
self.domain, _ = Domain.objects.get_or_create(name="igorville.gov") self.domain, _ = Domain.objects.get_or_create(name="igorville.gov")
self.portfolio, _ = Portfolio.objects.get_or_create(creator=self.user, organization_name="Hotel California") self.portfolio, _ = Portfolio.objects.get_or_create(creator=self.user, organization_name="Hotel California")
@ -644,6 +645,52 @@ class TestPortfolio(WebTest):
# create new request btn # create new request btn
self.assertNotContains(requests_page, 'Start a new domain request') self.assertNotContains(requests_page, 'Start a new domain request')
@skip("TODO") @less_console_noise_decorator
def test_portfolio_cache_updates_when_modified(self): def test_portfolio_cache_updates_when_modified(self):
pass """Test that the portfolio in session updates when the portfolio is modified"""
self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles)
with override_flag("organization_feature", active=True):
# Initial request to set the portfolio in session
response = self.client.get(reverse("home"), follow=True)
portfolio = self.client.session.get("portfolio")
self.assertEqual(portfolio.organization_name, "Hotel California")
self.assertContains(response, "Hotel California")
# Modify the portfolio
self.portfolio.organization_name = "Updated Hotel California"
self.portfolio.save()
# Make another request
response = self.client.get(reverse("home"), follow=True)
# Check if the updated portfolio name is in the response
self.assertContains(response, "Updated Hotel California")
# Verify that the session contains the updated portfolio
portfolio = self.client.session.get("portfolio")
self.assertEqual(portfolio.organization_name, "Updated Hotel California")
@less_console_noise_decorator
def test_portfolio_cache_updates_when_flag_disabled_while_logged_in(self):
"""Test that the portfolio in session is set to None when the organization_feature flag is disabled"""
self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles)
with override_flag("organization_feature", active=True):
# Initial request to set the portfolio in session
response = self.client.get(reverse("home"), follow=True)
portfolio = self.client.session.get("portfolio")
self.assertEqual(portfolio.organization_name, "Hotel California")
self.assertContains(response, "Hotel California")
# Disable the organization_feature flag
with override_flag("organization_feature", active=False):
# Make another request
response = self.client.get(reverse("home"))
self.assertIsNone(self.client.session.get("portfolio"))
self.assertNotContains(response, "Hotel California")

View file

@ -7,7 +7,7 @@ from api.tests.common import less_console_noise_decorator
from .common import MockSESClient, completed_domain_request # type: ignore from .common import MockSESClient, completed_domain_request # type: ignore
from django_webtest import WebTest # type: ignore from django_webtest import WebTest # type: ignore
import boto3_mocking # type: ignore import boto3_mocking # type: ignore
from waffle.testutils import override_flag
from registrar.models import ( from registrar.models import (
DomainRequest, DomainRequest,
DraftDomain, DraftDomain,
@ -17,12 +17,14 @@ from registrar.models import (
User, User,
Website, Website,
FederalAgency, FederalAgency,
Portfolio,
UserPortfolioPermission
) )
from registrar.views.domain_request import DomainRequestWizard, Step from registrar.views.domain_request import DomainRequestWizard, Step
from .common import less_console_noise from .common import less_console_noise
from .test_views import TestWithUser from .test_views import TestWithUser
from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -2925,6 +2927,41 @@ class DomainRequestTestDifferentStatuses(TestWithUser, WebTest):
response = self.client.get("/get-domain-requests-json/") response = self.client.get("/get-domain-requests-json/")
self.assertContains(response, "Withdrawn") self.assertContains(response, "Withdrawn")
@less_console_noise_decorator
@override_flag("organization_feature", active=True)
def test_domain_request_withdraw_portfolio_redirects_correctly(self):
"""Tests that the withdraw button on portfolio redirects to the portfolio domain requests page"""
portfolio, _ = Portfolio.objects.get_or_create(creator=self.user, organization_name="Test Portfolio")
UserPortfolioPermission.objects.get_or_create(
user=self.user,
portfolio=portfolio,
roles=[UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
)
domain_request = completed_domain_request(status=DomainRequest.DomainRequestStatus.SUBMITTED, user=self.user)
domain_request.save()
detail_page = self.app.get(f"/domain-request/{domain_request.id}")
self.assertContains(detail_page, "city.gov")
self.assertContains(detail_page, "city1.gov")
self.assertContains(detail_page, "Chief Tester")
self.assertContains(detail_page, "testy@town.com")
self.assertContains(detail_page, "Admin Tester")
self.assertContains(detail_page, "Status:")
# click the "Withdraw request" button
mock_client = MockSESClient()
with boto3_mocking.clients.handler_for("sesv2", mock_client):
with less_console_noise():
withdraw_page = detail_page.click("Withdraw request")
self.assertContains(withdraw_page, "Withdraw request for")
home_page = withdraw_page.click("Withdraw request")
# Assert that it redirects to the portfolio requests page and the status has been updated to withdrawn
self.assertEqual(home_page.status_code, 302)
self.assertEqual(home_page.location, reverse("domain-requests"))
response = self.client.get("/get-domain-requests-json/")
self.assertContains(response, "Withdrawn")
@less_console_noise_decorator @less_console_noise_decorator
def test_domain_request_withdraw_no_permissions(self): def test_domain_request_withdraw_no_permissions(self):
"""Can't withdraw domain requests as a restricted user.""" """Can't withdraw domain requests as a restricted user."""