diff --git a/src/registrar/tests/test_admin_request.py b/src/registrar/tests/test_admin_request.py index 15cc18404..1aec3ad5d 100644 --- a/src/registrar/tests/test_admin_request.py +++ b/src/registrar/tests/test_admin_request.py @@ -856,23 +856,6 @@ class TestDomainRequestAdmin(MockEppLib): self.transition_state_and_send_email(domain_request, DomainRequest.DomainRequestStatus.SUBMITTED) self.assertEqual(len(self.mock_client.EMAILS_SENT), 3) - @less_console_noise_decorator - def test_model_displays_action_needed_email(self): - """Tests if the action needed email is visible for Domain Requests""" - - _domain_request = completed_domain_request( - status=DomainRequest.DomainRequestStatus.ACTION_NEEDED, - action_needed_reason=DomainRequest.ActionNeededReasons.BAD_NAME, - ) - - self.client.force_login(self.staffuser) - response = self.client.get( - "/admin/registrar/domainrequest/{}/change/".format(_domain_request.pk), - follow=True, - ) - - self.assertContains(response, "DOMAIN NAME DOES NOT MEET .GOV REQUIREMENTS") - @override_settings(IS_PRODUCTION=True) @less_console_noise_decorator def test_save_model_sends_submitted_email_with_bcc_on_prod(self): diff --git a/src/registrar/tests/test_api.py b/src/registrar/tests/test_api.py index 2597e65c2..cfef6abea 100644 --- a/src/registrar/tests/test_api.py +++ b/src/registrar/tests/test_api.py @@ -1,8 +1,8 @@ from django.urls import reverse from django.test import TestCase, Client -from registrar.models import FederalAgency, SeniorOfficial, User +from registrar.models import FederalAgency, SeniorOfficial, User, DomainRequest from django.contrib.auth import get_user_model -from registrar.tests.common import create_superuser, create_user +from registrar.tests.common import create_superuser, create_user, completed_domain_request from api.tests.common import less_console_noise_decorator from registrar.utility.constants import BranchChoices @@ -109,3 +109,58 @@ class GetFederalPortfolioTypeJsonTest(TestCase): self.client.login(username="testuser", password=p) response = self.client.get(self.api_url, {"agency_name": "Test Agency", "organization_type": "federal"}) self.assertEqual(response.status_code, 302) + + +class GetActionNeededEmailForUserJsonTest(TestCase): + def setUp(self): + self.client = Client() + self.superuser = create_superuser() + self.analyst_user = create_user() + self.agency = FederalAgency.objects.create(agency="Test Agency") + self.domain_request = completed_domain_request( + federal_agency=self.agency, + name="test.gov", + status=DomainRequest.DomainRequestStatus.ACTION_NEEDED, + ) + + self.api_url = reverse("get-action-needed-email-for-user-json") + + def tearDown(self): + DomainRequest.objects.all().delete() + User.objects.all().delete() + FederalAgency.objects.all().delete() + + @less_console_noise_decorator + def test_get_action_needed_email_for_user_json_superuser(self): + """Test that a superuser can fetch the action needed email.""" + p = "adminpass" + self.client.force_login(self.superuser) + + response = self.client.get( + self.api_url, + { + "reason": DomainRequest.ActionNeededReasons.ELIGIBILITY_UNCLEAR, + "domain_request_id": self.domain_request.id, + }, + ) + self.assertEqual(response.status_code, 200) + data = response.json() + self.assertIn("action_needed_email", data) + self.assertIn("ORGANIZATION MAY NOT MEET ELIGIBILITY REQUIREMENTS", data["action_needed_email"]) + + @less_console_noise_decorator + def test_get_action_needed_email_for_user_json_analyst(self): + """Test that an analyst can fetch the action needed email.""" + self.client.force_login(self.analyst_user) + + response = self.client.get( + self.api_url, + { + "reason": DomainRequest.ActionNeededReasons.QUESTIONABLE_SENIOR_OFFICIAL, + "domain_request_id": self.domain_request.id, + }, + ) + self.assertEqual(response.status_code, 200) + data = response.json() + self.assertIn("action_needed_email", data) + self.assertIn("SENIOR OFFICIAL DOES NOT MEET ELIGIBILITY REQUIREMENTS", data["action_needed_email"]) diff --git a/src/registrar/utility/admin_helpers.py b/src/registrar/utility/admin_helpers.py index dff3751bc..c3896dcc9 100644 --- a/src/registrar/utility/admin_helpers.py +++ b/src/registrar/utility/admin_helpers.py @@ -1,21 +1,20 @@ -from django.http import HttpRequest from registrar.models.domain_request import DomainRequest from waffle.decorators import flag_is_active from django.template.loader import get_template def get_all_action_needed_reason_emails(request, domain_request): - """Returns a dictionary of every action needed reason and its associated email - for this particular domain request.""" + """Returns a dictionary of every action needed reason and its associated email + for this particular domain request.""" - emails = {} - for action_needed_reason in domain_request.ActionNeededReasons: - # Map the action_needed_reason to its default email - emails[action_needed_reason.value] = get_action_needed_reason_default_email( - request, domain_request, action_needed_reason.value - ) + emails = {} + for action_needed_reason in domain_request.ActionNeededReasons: + # Map the action_needed_reason to its default email + emails[action_needed_reason.value] = get_action_needed_reason_default_email( + request, domain_request, action_needed_reason.value + ) - return emails + return emails def get_action_needed_reason_default_email(request, domain_request, action_needed_reason): @@ -39,4 +38,4 @@ def get_action_needed_reason_default_email(request, domain_request, action_neede if email_body_text: email_body_text_cleaned = email_body_text.strip().lstrip("\n") - return email_body_text_cleaned \ No newline at end of file + return email_body_text_cleaned