mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-05 01:11:55 +02:00
allow clanking of first and or second nameserver if enough entries
This commit is contained in:
parent
21638ad364
commit
9e7f878549
2 changed files with 91 additions and 7 deletions
|
@ -83,25 +83,34 @@ class DomainNameserverForm(forms.Form):
|
|||
# after clean_fields. it is used to determine form level errors.
|
||||
# is_valid is typically called from view during a post
|
||||
cleaned_data = super().clean()
|
||||
|
||||
self.clean_empty_strings(cleaned_data)
|
||||
|
||||
server = cleaned_data.get("server", "")
|
||||
# remove ANY spaces in the server field
|
||||
server = server.replace(" ", "")
|
||||
# lowercase the server
|
||||
server = server.lower()
|
||||
server = server.replace(" ", "").lower()
|
||||
cleaned_data["server"] = server
|
||||
ip = cleaned_data.get("ip", None)
|
||||
# remove ANY spaces in the ip field
|
||||
|
||||
ip = cleaned_data.get("ip", "")
|
||||
ip = ip.replace(" ", "")
|
||||
cleaned_data["ip"] = ip
|
||||
|
||||
domain = cleaned_data.get("domain", "")
|
||||
|
||||
ip_list = self.extract_ip_list(ip)
|
||||
|
||||
# validate if the form has a server or an ip
|
||||
# Capture the server_value
|
||||
server_value = self.cleaned_data["server"]
|
||||
|
||||
# Validate if the form has a server or an ip
|
||||
if (ip and ip_list) or server:
|
||||
self.validate_nameserver_ip_combo(domain, server, ip_list)
|
||||
|
||||
# Re-set the server value:
|
||||
# add_error which is called on validate_nameserver_ip_combo will clean-up (delete) any invalid data.
|
||||
# We need that data because we need to know the total server entries (even if invalid) in the formset
|
||||
# clean method where we determine whether a blank first and/or second entry should throw a required error.
|
||||
self.cleaned_data["server"] = server_value
|
||||
|
||||
return cleaned_data
|
||||
|
||||
def clean_empty_strings(self, cleaned_data):
|
||||
|
@ -149,6 +158,19 @@ class BaseNameserverFormset(forms.BaseFormSet):
|
|||
"""
|
||||
Check for duplicate entries in the formset.
|
||||
"""
|
||||
|
||||
# Check if there are at least two valid servers
|
||||
valid_servers_count = sum(
|
||||
1 for form in self.forms if form.cleaned_data.get("server") and form.cleaned_data.get("server").strip()
|
||||
)
|
||||
if valid_servers_count >= 2:
|
||||
# If there are, remove the "At least two name servers are required" error from each form
|
||||
# This will allow for successful submissions when the first or second entries are blanked
|
||||
# but there are enough entries total
|
||||
for form in self.forms:
|
||||
if form.errors.get("server") == ["At least two name servers are required."]:
|
||||
form.errors.pop("server")
|
||||
|
||||
if any(self.errors):
|
||||
# Don't bother validating the formset unless each form is valid on its own
|
||||
return
|
||||
|
|
|
@ -974,6 +974,68 @@ class TestDomainNameservers(TestDomainOverview):
|
|||
page = result.follow()
|
||||
self.assertContains(page, "The name servers for this domain have been updated")
|
||||
|
||||
def test_domain_nameservers_can_blank_out_first_or_second_one_if_enough_entries(self):
|
||||
"""Nameserver form submits successfully with 2 valid inputs, even if the first or
|
||||
second entries are blanked out.
|
||||
|
||||
Uses self.app WebTest because we need to interact with forms.
|
||||
"""
|
||||
|
||||
nameserver1 = ""
|
||||
nameserver2 = "ns2.igorville.gov"
|
||||
nameserver3 = "ns3.igorville.gov"
|
||||
valid_ip = ""
|
||||
valid_ip_2 = "128.0.0.2"
|
||||
valid_ip_3 = "128.0.0.3"
|
||||
nameservers_page = self.app.get(reverse("domain-dns-nameservers", kwargs={"pk": self.domain.id}))
|
||||
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
|
||||
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")
|
||||
|
||||
nameserver1 = "ns1.igorville.gov"
|
||||
nameserver2 = ""
|
||||
nameserver3 = "ns3.igorville.gov"
|
||||
valid_ip = "128.0.0.1"
|
||||
valid_ip_2 = ""
|
||||
valid_ip_3 = "128.0.0.3"
|
||||
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
|
||||
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