Unit test

This commit is contained in:
zandercymatics 2024-02-09 10:06:46 -07:00
parent b06babd6f0
commit 773d6e0cee
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 63 additions and 3 deletions

View file

@ -1171,7 +1171,7 @@ class DomainAdmin(ListHeaderAdmin):
# If both years match, then lets just proceed as normal. # If both years match, then lets just proceed as normal.
years = 1 years = 1
if desired_date > exp_date: if desired_date > exp_date:
year_difference = relativedelta(desired_date.year, exp_date.year).years year_difference = desired_date.year - exp_date.year
years = year_difference years = year_difference
# Renew the domain. # Renew the domain.

View file

@ -1,6 +1,8 @@
from datetime import date
from django.test import TestCase, RequestFactory, Client from django.test import TestCase, RequestFactory, Client
from django.contrib.admin.sites import AdminSite from django.contrib.admin.sites import AdminSite
from contextlib import ExitStack from contextlib import ExitStack
from django_webtest import WebTest # type: ignore
from django.contrib import messages from django.contrib import messages
from django.urls import reverse from django.urls import reverse
from registrar.admin import ( from registrar.admin import (
@ -35,7 +37,7 @@ from .common import (
) )
from django.contrib.sessions.backends.db import SessionStore from django.contrib.sessions.backends.db import SessionStore
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from unittest.mock import patch from unittest.mock import call, patch
from unittest import skip from unittest import skip
from django.conf import settings from django.conf import settings
@ -45,7 +47,8 @@ import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class TestDomainAdmin(MockEppLib): class TestDomainAdmin(MockEppLib, WebTest):
csrf_checks = False
def setUp(self): def setUp(self):
self.site = AdminSite() self.site = AdminSite()
self.admin = DomainAdmin(model=Domain, admin_site=self.site) self.admin = DomainAdmin(model=Domain, admin_site=self.site)
@ -53,8 +56,65 @@ class TestDomainAdmin(MockEppLib):
self.superuser = create_superuser() self.superuser = create_superuser()
self.staffuser = create_user() self.staffuser = create_user()
self.factory = RequestFactory() self.factory = RequestFactory()
self.app.set_user(self.superuser.username)
self.client.force_login(self.superuser)
super().setUp() super().setUp()
def test_extend_expiration_date_button(self):
"""
Tests if extend_expiration_date button sends the right epp command
"""
# Create a ready domain with a preset expiration date
domain, _ = Domain.objects.get_or_create(name="fake.gov", state=Domain.State.READY)
response = self.app.get(reverse("admin:registrar_domain_change", args=[domain.pk]))
# Make sure that the page is loading as expected
self.assertEqual(response.status_code, 200)
self.assertContains(response, domain.name)
self.assertContains(response, "Extend expiration date")
# Grab the form to submit
form = response.forms["domain_form"]
with patch("django.contrib.messages.add_message") as mock_add_message:
with patch("registrar.models.Domain.renew_domain") as renew_mock:
# Submit the form
response = form.submit("_extend_expiration_date")
# Follow the response
response = response.follow()
# We need to use date.today() here, as it is not trivial
# to mock "date.today()". To do so requires libraries like freezegun,
# or convoluted workarounds.
extension_length = (date.today().year + 1) - 2023
# Assert that it is calling the function
renew_mock.assert_has_calls([call(length=extension_length)], any_order=False)
self.assertEqual(renew_mock.call_count, 1)
# Assert that everything on the page looks correct
self.assertEqual(response.status_code, 200)
self.assertContains(response, domain.name)
self.assertContains(response, "Extend expiration date")
# Ensure the message we recieve is in line with what we expect
expected_message = f"Successfully extended expiration date to 2024-01-01."
#self.assertContains(response, expected_message)
expected_call = call(
response,
messages.INFO,
expected_message,
extra_tags="",
fail_silently=False,
)
mock_add_message.assert_has_calls(expected_call, 1)
# Assert that the domain was updated correctly
expected_date = date(year=2025, month=1, day=1)
self.assertEqual(domain.expiration_date, expected_date)
def test_short_org_name_in_domains_list(self): def test_short_org_name_in_domains_list(self):
""" """
Make sure the short name is displaying in admin on the list page Make sure the short name is displaying in admin on the list page