+
{% if num_expiring_domains == 1%}
- One domain will expire soon. Go to "Manage" to renew the domain. Show expiring domain.
+ One domain will expire soon. Go to "Manage" to renew the domain. Show expiring domain.
{% else%}
- Multiple domains will expire soon. Go to "Manage" to renew the domains. Show expiring domains.
+ Multiple domains will expire soon. Go to "Manage" to renew the domains. Show expiring domains.
{% endif %}
diff --git a/src/registrar/tests/test_views.py b/src/registrar/tests/test_views.py
index f46e417be..2dfead13f 100644
--- a/src/registrar/tests/test_views.py
+++ b/src/registrar/tests/test_views.py
@@ -214,7 +214,7 @@ class HomeTests(TestWithUser):
@less_console_noise_decorator
def test_state_help_text_expired(self):
"""Tests if each domain state has help text when expired"""
- expired_text = "This domain has expired, but it is still online. "
+ expired_text = "This domain has expired. "
test_domain, _ = Domain.objects.get_or_create(name="expired.gov", state=Domain.State.READY)
test_domain.expiration_date = date(2011, 10, 10)
test_domain.save()
@@ -240,7 +240,7 @@ class HomeTests(TestWithUser):
"""Tests if each domain state has help text when expiration date is None"""
# == Test a expiration of None for state ready. This should be expired. == #
- expired_text = "This domain has expired, but it is still online. "
+ expired_text = "This domain has expired. "
test_domain, _ = Domain.objects.get_or_create(name="imexpired.gov", state=Domain.State.READY)
test_domain.expiration_date = None
test_domain.save()
diff --git a/src/registrar/tests/test_views_domain.py b/src/registrar/tests/test_views_domain.py
index d4766b474..7d1e69783 100644
--- a/src/registrar/tests/test_views_domain.py
+++ b/src/registrar/tests/test_views_domain.py
@@ -439,15 +439,21 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
username="usertest",
)
- self.domaintorenew, _ = Domain.objects.get_or_create(
+ self.domain_to_renew, _ = Domain.objects.get_or_create(
name="domainrenewal.gov",
)
- UserDomainRole.objects.get_or_create(
- user=self.user, domain=self.domaintorenew, role=UserDomainRole.Roles.MANAGER
+ self.domain_not_expiring, _ = Domain.objects.get_or_create(
+ name="domainnotexpiring.gov", expiration_date=timezone.now().date() + timedelta(days=65)
)
- DomainInformation.objects.get_or_create(creator=self.user, domain=self.domaintorenew)
+ self.domain_no_domain_manager, _ = Domain.objects.get_or_create(name="domainnodomainmanager.gov")
+
+ UserDomainRole.objects.get_or_create(
+ user=self.user, domain=self.domain_to_renew, role=UserDomainRole.Roles.MANAGER
+ )
+
+ DomainInformation.objects.get_or_create(creator=self.user, domain=self.domain_to_renew)
self.portfolio, _ = Portfolio.objects.get_or_create(organization_name="Test org", creator=self.user)
@@ -473,13 +479,15 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
@override_flag("domain_renewal", active=True)
def test_expiring_domain_on_detail_page_as_domain_manager(self):
+ """If a user is a domain manager and their domain is expiring soon,
+ user should be able to see the "Renew to maintain access" link domain overview detail box."""
self.client.force_login(self.user)
with patch.object(Domain, "is_expiring", self.custom_is_expiring), patch.object(
Domain, "is_expired", self.custom_is_expired_false
):
- self.assertEquals(self.domaintorenew.state, Domain.State.UNKNOWN)
+ self.assertEquals(self.domain_to_renew.state, Domain.State.UNKNOWN)
detail_page = self.client.get(
- reverse("domain", kwargs={"pk": self.domaintorenew.id}),
+ reverse("domain", kwargs={"pk": self.domain_to_renew.id}),
)
self.assertContains(detail_page, "Expiring soon")
@@ -491,6 +499,8 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
@override_flag("domain_renewal", active=True)
@override_flag("organization_feature", active=True)
def test_expiring_domain_on_detail_page_in_org_model_as_a_non_domain_manager(self):
+ """In org model: If a user is NOT a domain manager and their domain is expiring soon,
+ user be notified to contact a domain manager in the domain overview detail box."""
portfolio, _ = Portfolio.objects.get_or_create(organization_name="Test org", creator=self.user)
non_dom_manage_user = get_user_model().objects.create(
first_name="Non Domain",
@@ -510,9 +520,9 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS,
],
)
- domaintorenew2, _ = Domain.objects.get_or_create(name="bogusdomain2.gov")
+ domain_to_renew2, _ = Domain.objects.get_or_create(name="bogusdomain2.gov")
DomainInformation.objects.get_or_create(
- creator=non_dom_manage_user, domain=domaintorenew2, portfolio=self.portfolio
+ creator=non_dom_manage_user, domain=domain_to_renew2, portfolio=self.portfolio
)
non_dom_manage_user.refresh_from_db()
self.client.force_login(non_dom_manage_user)
@@ -520,38 +530,42 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
Domain, "is_expired", self.custom_is_expired_false
):
detail_page = self.client.get(
- reverse("domain", kwargs={"pk": domaintorenew2.id}),
+ reverse("domain", kwargs={"pk": domain_to_renew2.id}),
)
self.assertContains(detail_page, "Contact one of the listed domain managers to renew the domain.")
@override_flag("domain_renewal", active=True)
@override_flag("organization_feature", active=True)
def test_expiring_domain_on_detail_page_in_org_model_as_a_domain_manager(self):
+ """Inorg model: If a user is a domain manager and their domain is expiring soon,
+ user should be able to see the "Renew to maintain access" link domain overview detail box."""
portfolio, _ = Portfolio.objects.get_or_create(organization_name="Test org2", creator=self.user)
- domaintorenew3, _ = Domain.objects.get_or_create(name="bogusdomain3.gov")
+ domain_to_renew3, _ = Domain.objects.get_or_create(name="bogusdomain3.gov")
- UserDomainRole.objects.get_or_create(user=self.user, domain=domaintorenew3, role=UserDomainRole.Roles.MANAGER)
- DomainInformation.objects.get_or_create(creator=self.user, domain=domaintorenew3, portfolio=portfolio)
+ UserDomainRole.objects.get_or_create(user=self.user, domain=domain_to_renew3, role=UserDomainRole.Roles.MANAGER)
+ DomainInformation.objects.get_or_create(creator=self.user, domain=domain_to_renew3, portfolio=portfolio)
self.user.refresh_from_db()
self.client.force_login(self.user)
with patch.object(Domain, "is_expiring", self.custom_is_expiring), patch.object(
Domain, "is_expired", self.custom_is_expired_false
):
detail_page = self.client.get(
- reverse("domain", kwargs={"pk": domaintorenew3.id}),
+ reverse("domain", kwargs={"pk": domain_to_renew3.id}),
)
self.assertContains(detail_page, "Renew to maintain access")
@override_flag("domain_renewal", active=True)
def test_domain_renewal_form_and_sidebar_expiring(self):
+ """If a user is a domain manager and their domain is expiring soon,
+ user should be able to see Renewal Form on the sidebar."""
self.client.force_login(self.user)
with patch.object(Domain, "is_expiring", self.custom_is_expiring), patch.object(
Domain, "is_expiring", self.custom_is_expiring
):
# Grab the detail page
detail_page = self.client.get(
- reverse("domain", kwargs={"pk": self.domaintorenew.id}),
+ reverse("domain", kwargs={"pk": self.domain_to_renew.id}),
)
# Make sure we see the link as a domain manager
@@ -561,18 +575,19 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
self.assertContains(detail_page, "Renewal form")
# Grab link to the renewal page
- renewal_form_url = reverse("domain-renewal", kwargs={"pk": self.domaintorenew.id})
+ renewal_form_url = reverse("domain-renewal", kwargs={"pk": self.domain_to_renew.id})
self.assertContains(detail_page, f'href="{renewal_form_url}"')
# Simulate clicking the link
response = self.client.get(renewal_form_url)
self.assertEqual(response.status_code, 200)
- self.assertContains(response, f"Renew {self.domaintorenew.name}")
+ self.assertContains(response, f"Renew {self.domain_to_renew.name}")
@override_flag("domain_renewal", active=True)
def test_domain_renewal_form_and_sidebar_expired(self):
-
+ """If a user is a domain manager and their domain is expired,
+ user should be able to see Renewal Form on the sidebar."""
self.client.force_login(self.user)
with patch.object(Domain, "is_expired", self.custom_is_expired_true), patch.object(
@@ -580,10 +595,9 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
):
# Grab the detail page
detail_page = self.client.get(
- reverse("domain", kwargs={"pk": self.domaintorenew.id}),
+ reverse("domain", kwargs={"pk": self.domain_to_renew.id}),
)
- print("puglesss", self.domaintorenew.is_expired)
# Make sure we see the link as a domain manager
self.assertContains(detail_page, "Renew to maintain access")
@@ -591,17 +605,19 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
self.assertContains(detail_page, "Renewal form")
# Grab link to the renewal page
- renewal_form_url = reverse("domain-renewal", kwargs={"pk": self.domaintorenew.id})
+ renewal_form_url = reverse("domain-renewal", kwargs={"pk": self.domain_to_renew.id})
self.assertContains(detail_page, f'href="{renewal_form_url}"')
# Simulate clicking the link
response = self.client.get(renewal_form_url)
self.assertEqual(response.status_code, 200)
- self.assertContains(response, f"Renew {self.domaintorenew.name}")
+ self.assertContains(response, f"Renew {self.domain_to_renew.name}")
@override_flag("domain_renewal", active=True)
def test_domain_renewal_form_your_contact_info_edit(self):
+ """Checking that if a user is a domain manager they can edit the
+ Your Profile portion of the Renewal Form."""
with less_console_noise():
# Start on the Renewal page for the domain
renewal_page = self.app.get(reverse("domain-renewal", kwargs={"pk": self.domain_with_ip.id}))
@@ -620,6 +636,8 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
@override_flag("domain_renewal", active=True)
def test_domain_renewal_form_security_email_edit(self):
+ """Checking that if a user is a domain manager they can edit the
+ Security Email portion of the Renewal Form."""
with less_console_noise():
# Start on the Renewal page for the domain
renewal_page = self.app.get(reverse("domain-renewal", kwargs={"pk": self.domain_with_ip.id}))
@@ -641,6 +659,8 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
@override_flag("domain_renewal", active=True)
def test_domain_renewal_form_domain_manager_edit(self):
+ """Checking that if a user is a domain manager they can edit the
+ Domain Manager portion of the Renewal Form."""
with less_console_noise():
# Start on the Renewal page for the domain
renewal_page = self.app.get(reverse("domain-renewal", kwargs={"pk": self.domain_with_ip.id}))
@@ -658,8 +678,26 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
self.assertContains(edit_page, "Domain managers can update all information related to a domain")
@override_flag("domain_renewal", active=True)
- def test_ack_checkbox_not_checked(self):
+ def test_domain_renewal_form_not_expired_or_expiring(self):
+ """Checking that if the user's domain is not expired or expiring that user should not be able
+ to access /renewal and that it should receive a 403."""
+ with less_console_noise():
+ # Start on the Renewal page for the domain
+ renewal_page = self.client.get(reverse("domain-renewal", kwargs={"pk": self.domain_not_expiring.id}))
+ self.assertEqual(renewal_page.status_code, 403)
+ @override_flag("domain_renewal", active=True)
+ def test_domain_renewal_form_does_not_appear_if_not_domain_manager(self):
+ """If user is not a domain manager and tries to access /renewal, user should receive a 403."""
+ with patch.object(Domain, "is_expired", self.custom_is_expired_true), patch.object(
+ Domain, "is_expired", self.custom_is_expired_true
+ ):
+ renewal_page = self.client.get(reverse("domain-renewal", kwargs={"pk": self.domain_no_domain_manager.id}))
+ self.assertEqual(renewal_page.status_code, 403)
+
+ @override_flag("domain_renewal", active=True)
+ def test_ack_checkbox_not_checked(self):
+ """If user don't check the checkbox, user should receive an error message."""
# Grab the renewal URL
renewal_url = reverse("domain-renewal", kwargs={"pk": self.domain_with_ip.id})
@@ -671,7 +709,8 @@ class TestDomainDetailDomainRenewal(TestDomainOverview):
@override_flag("domain_renewal", active=True)
def test_ack_checkbox_checked(self):
-
+ """If user check the checkbox and submits the form,
+ user should be redirected Domain Over page with an updated by 1 year expiration date"""
# Grab the renewal URL
with patch.object(Domain, "renew_domain", self.custom_renew_domain):
renewal_url = reverse("domain-renewal", kwargs={"pk": self.domain_with_ip.id})
@@ -2866,11 +2905,11 @@ class TestDomainRenewal(TestWithUser):
name="igorville.gov", expiration_date=expiring_date
)
self.domain_with_expired_date, _ = Domain.objects.get_or_create(
- name="domainwithexpireddate.com", expiration_date=expired_date
+ name="domainwithexpireddate.gov", expiration_date=expired_date
)
self.domain_with_current_date, _ = Domain.objects.get_or_create(
- name="domainwithfarexpireddate.com", expiration_date=expiring_date_current
+ name="domainwithfarexpireddate.gov", expiration_date=expiring_date_current
)
UserDomainRole.objects.get_or_create(
@@ -2916,7 +2955,7 @@ class TestDomainRenewal(TestWithUser):
today = datetime.now()
expiring_date = (today + timedelta(days=30)).strftime("%Y-%m-%d")
self.domain_with_another_expiring, _ = Domain.objects.get_or_create(
- name="domainwithanotherexpiringdate.com", expiration_date=expiring_date
+ name="domainwithanotherexpiringdate.gov", expiration_date=expiring_date
)
UserDomainRole.objects.get_or_create(
@@ -2952,7 +2991,7 @@ class TestDomainRenewal(TestWithUser):
today = datetime.now()
expiring_date = (today + timedelta(days=31)).strftime("%Y-%m-%d")
self.domain_with_another_expiring_org_model, _ = Domain.objects.get_or_create(
- name="domainwithanotherexpiringdate_orgmodel.com", expiration_date=expiring_date
+ name="domainwithanotherexpiringdate_orgmodel.gov", expiration_date=expiring_date
)
UserDomainRole.objects.get_or_create(
diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py
index 83898934c..72e0e4b35 100644
--- a/src/registrar/views/domain.py
+++ b/src/registrar/views/domain.py
@@ -311,11 +311,39 @@ class DomainView(DomainBaseView):
self._update_session_with_domain()
-class DomainRenewalView(DomainView):
+class DomainRenewalView(DomainBaseView):
"""Domain detail overview page."""
template_name = "domain_renewal.html"
+ def get_context_data(self, **kwargs):
+ """Grabs the security email information and adds security_email to the renewal form context
+ sets it to None if it uses a default email"""
+
+ context = super().get_context_data(**kwargs)
+
+ default_emails = [DefaultEmail.PUBLIC_CONTACT_DEFAULT.value, DefaultEmail.LEGACY_DEFAULT.value]
+
+ context["hidden_security_emails"] = default_emails
+
+ security_email = self.object.get_security_email()
+ context["security_email"] = security_email
+ return context
+
+ def in_editable_state(self, pk):
+ """Override in_editable_state from DomainPermission
+ Allow renewal form to be accessed
+ returns boolean"""
+ requested_domain = None
+ if Domain.objects.filter(id=pk).exists():
+ requested_domain = Domain.objects.get(id=pk)
+
+ return (
+ requested_domain
+ and requested_domain.is_editable()
+ and (requested_domain.is_expiring() or requested_domain.is_expired())
+ )
+
def post(self, request, pk):
domain = get_object_or_404(Domain, id=pk)
diff --git a/src/registrar/views/utility/mixins.py b/src/registrar/views/utility/mixins.py
index 236ef8696..08212088b 100644
--- a/src/registrar/views/utility/mixins.py
+++ b/src/registrar/views/utility/mixins.py
@@ -192,7 +192,8 @@ class DomainPermission(PermissionsLoginMixin):
def can_access_domain_via_portfolio(self, pk):
"""Most views should not allow permission to portfolio users.
If particular views allow access to the domain pages, they will need to override
- this function."""
+ this function.
+ """
return False
def in_editable_state(self, pk):