mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-06-29 15:53:31 +02:00
handle edge case of 0 and 1 empty and duplicate error
This commit is contained in:
parent
85bc9c272e
commit
27ef823b93
3 changed files with 68 additions and 4 deletions
|
@ -178,10 +178,10 @@ class BaseNameserverFormset(forms.BaseFormSet):
|
|||
data = []
|
||||
duplicates = []
|
||||
|
||||
for form in self.forms:
|
||||
for index, form in enumerate(self.forms):
|
||||
if form.cleaned_data:
|
||||
value = form.cleaned_data["server"]
|
||||
if value in data:
|
||||
if value in data and not (form.cleaned_data.get("server", "").strip() == '' and index == 1):
|
||||
form.add_error(
|
||||
"server",
|
||||
NameserverError(code=nsErrorCodes.DUPLICATE_HOST, nameserver=value),
|
||||
|
|
|
@ -1152,6 +1152,18 @@ class MockEppLib(TestCase):
|
|||
],
|
||||
)
|
||||
|
||||
infoDomainFourHosts = fakedEppObject(
|
||||
"my-nameserver.gov",
|
||||
cr_date=make_aware(datetime(2023, 5, 25, 19, 45, 35)),
|
||||
contacts=[],
|
||||
hosts=[
|
||||
"ns1.my-nameserver-1.com",
|
||||
"ns1.my-nameserver-2.com",
|
||||
"ns1.cats-are-superior3.com",
|
||||
"ns1.explosive-chicken-nuggets.com",
|
||||
],
|
||||
)
|
||||
|
||||
infoDomainNoHost = fakedEppObject(
|
||||
"my-nameserver.gov",
|
||||
cr_date=make_aware(datetime(2023, 5, 25, 19, 45, 35)),
|
||||
|
@ -1475,6 +1487,7 @@ class MockEppLib(TestCase):
|
|||
"namerserversubdomain.gov": (self.infoDomainCheckHostIPCombo, None),
|
||||
"freeman.gov": (self.InfoDomainWithContacts, None),
|
||||
"threenameserversDomain.gov": (self.infoDomainThreeHosts, None),
|
||||
"fournameserversDomain.gov": (self.infoDomainFourHosts, None),
|
||||
"defaultsecurity.gov": (self.InfoDomainWithDefaultSecurityContact, None),
|
||||
"adomain2.gov": (self.InfoDomainWithVerisignSecurityContact, None),
|
||||
"defaulttechnical.gov": (self.InfoDomainWithDefaultTechnicalContact, None),
|
||||
|
|
|
@ -5,7 +5,7 @@ from django.conf import settings
|
|||
from django.urls import reverse
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from .common import MockSESClient, create_user # type: ignore
|
||||
from .common import MockEppLib, MockSESClient, create_user # type: ignore
|
||||
from django_webtest import WebTest # type: ignore
|
||||
import boto3_mocking # type: ignore
|
||||
|
||||
|
@ -727,7 +727,7 @@ class TestDomainManagers(TestDomainOverview):
|
|||
self.assertContains(home_page, self.domain.name)
|
||||
|
||||
|
||||
class TestDomainNameservers(TestDomainOverview):
|
||||
class TestDomainNameservers(TestDomainOverview, MockEppLib):
|
||||
def test_domain_nameservers(self):
|
||||
"""Can load domain's nameservers page."""
|
||||
page = self.client.get(reverse("domain-dns-nameservers", kwargs={"pk": self.domain.id}))
|
||||
|
@ -1036,6 +1036,57 @@ class TestDomainNameservers(TestDomainOverview):
|
|||
nameservers_page = result.follow()
|
||||
self.assertContains(nameservers_page, "The name servers for this domain have been updated")
|
||||
|
||||
@skip('wip')
|
||||
def test_domain_nameservers_can_blank_out_first_and_second_one_if_enough_entries(self):
|
||||
"""Nameserver form submits successfully with 2 valid inputs, even if the first and
|
||||
second entries are blanked out.
|
||||
|
||||
Uses self.app WebTest because we need to interact with forms.
|
||||
"""
|
||||
|
||||
# Submit a formset with 3 valid forms
|
||||
# The returned page (after the redirect) will have 4 forms that we can use to test
|
||||
# our use case.
|
||||
|
||||
|
||||
infoDomainFourHosts, _ = Domain.objects.get_or_create(name="fournameserversDomain.gov", state=Domain.State.READY)
|
||||
UserDomainRole.objects.get_or_create(user=self.user, domain=infoDomainFourHosts)
|
||||
DomainInformation.objects.get_or_create(creator=self.user, domain=infoDomainFourHosts)
|
||||
self.client.force_login(self.user)
|
||||
|
||||
nameserver1 = ""
|
||||
nameserver2 = ""
|
||||
nameserver3 = "ns3.igorville.gov"
|
||||
nameserver4 = "ns4.igorville.gov"
|
||||
valid_ip = ""
|
||||
valid_ip_2 = ""
|
||||
valid_ip_3 = "128.0.0.3"
|
||||
valid_ip_4 = "128.0.0.4"
|
||||
nameservers_page = self.app.get(reverse("domain-dns-nameservers", kwargs={"pk": infoDomainFourHosts.id}))
|
||||
print(nameservers_page.content.decode('utf-8'))
|
||||
session_id = self.app.cookies[settings.SESSION_COOKIE_NAME]
|
||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||
nameservers_page.form["form-0-server"] = nameserver1
|
||||
nameservers_page.form["form-0-ip"] = valid_ip
|
||||
nameservers_page.form["form-1-server"] = nameserver2
|
||||
nameservers_page.form["form-1-ip"] = valid_ip_2
|
||||
nameservers_page.form["form-2-server"] = nameserver3
|
||||
nameservers_page.form["form-2-ip"] = valid_ip_3
|
||||
nameservers_page.form["form-3-server"] = nameserver4
|
||||
nameservers_page.form["form-3-ip"] = valid_ip_4
|
||||
with less_console_noise(): # swallow log warning message
|
||||
result = nameservers_page.form.submit()
|
||||
|
||||
# form submission was a successful post, response should be a 302
|
||||
self.assertEqual(result.status_code, 302)
|
||||
self.assertEqual(
|
||||
result["Location"],
|
||||
reverse("domain-dns-nameservers", kwargs={"pk": self.domain.id}),
|
||||
)
|
||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||
nameservers_page = result.follow()
|
||||
self.assertContains(nameservers_page, "The name servers for this domain have been updated")
|
||||
|
||||
def test_domain_nameservers_form_invalid(self):
|
||||
"""Nameserver form does not submit with invalid data.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue