diff --git a/src/registrar/tests/test_views_portfolio.py b/src/registrar/tests/test_views_portfolio.py index 10c8724f5..8eec5e9c8 100644 --- a/src/registrar/tests/test_views_portfolio.py +++ b/src/registrar/tests/test_views_portfolio.py @@ -17,7 +17,7 @@ from .common import MockSESClient, completed_domain_request, create_test_user from waffle.testutils import override_flag from django.contrib.sessions.middleware import SessionMiddleware import boto3_mocking # type: ignore - +from django.test import Client import logging logger = logging.getLogger(__name__) @@ -26,6 +26,7 @@ logger = logging.getLogger(__name__) class TestPortfolio(WebTest): def setUp(self): super().setUp() + self.client = Client() self.user = create_test_user() self.domain, _ = Domain.objects.get_or_create(name="igorville.gov") 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 self.assertNotContains(requests_page, 'Start a new domain request') - @skip("TODO") + @less_console_noise_decorator 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") diff --git a/src/registrar/tests/test_views_request.py b/src/registrar/tests/test_views_request.py index 6642b6471..73f79fe68 100644 --- a/src/registrar/tests/test_views_request.py +++ b/src/registrar/tests/test_views_request.py @@ -7,7 +7,7 @@ from api.tests.common import less_console_noise_decorator from .common import MockSESClient, completed_domain_request # type: ignore from django_webtest import WebTest # type: ignore import boto3_mocking # type: ignore - +from waffle.testutils import override_flag from registrar.models import ( DomainRequest, DraftDomain, @@ -17,12 +17,14 @@ from registrar.models import ( User, Website, FederalAgency, + Portfolio, + UserPortfolioPermission ) from registrar.views.domain_request import DomainRequestWizard, Step from .common import less_console_noise from .test_views import TestWithUser - +from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices import logging logger = logging.getLogger(__name__) @@ -2925,6 +2927,41 @@ class DomainRequestTestDifferentStatuses(TestWithUser, WebTest): response = self.client.get("/get-domain-requests-json/") 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 def test_domain_request_withdraw_no_permissions(self): """Can't withdraw domain requests as a restricted user."""