cleaned up test cases and formatting

This commit is contained in:
David Kennedy 2023-10-24 09:37:43 -04:00
parent a7ba33b523
commit d532449b3d
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
4 changed files with 55 additions and 61 deletions

View file

@ -7,7 +7,7 @@ from django.forms import formset_factory
from phonenumber_field.widgets import RegionalPhoneNumberWidget
from registrar.utility.errors import (
NameserverError,
NameserverErrorCodes as nsErrorCodes
NameserverErrorCodes as nsErrorCodes,
)
from ..models import Contact, DomainInformation, Domain
@ -26,26 +26,9 @@ class DomainAddUserForm(forms.Form):
class IPAddressField(forms.CharField):
def validate(self, value):
def validate(self, value):
super().validate(value) # Run the default CharField validation
# ip_list = [ip.strip() for ip in value.split(",")] # Split IPs and remove whitespace
# # TODO: pass hostname from view?
# hostname = self.form.cleaned_data.get("server", "")
# print(f"hostname {hostname}")
# # Call the IP validation method from Domain
# try:
# Domain.checkHostIPCombo(hostname, ip_list)
# except NameserverError as e:
# raise forms.ValidationError(str(e))
class DomainNameserverForm(forms.Form):
"""Form for changing nameservers."""
@ -62,12 +45,12 @@ class DomainNameserverForm(forms.Form):
# django.core.validators.validate_ipv46_address
# ],
)
def clean(self):
cleaned_data = super().clean()
server = cleaned_data.get('server', '')
ip = cleaned_data.get('ip', '')
domain = cleaned_data.get('domain', '')
server = cleaned_data.get("server", "")
ip = cleaned_data.get("ip", "")
domain = cleaned_data.get("domain", "")
print(f"clean is called on {domain} {server}")
# make sure there's a nameserver if an ip is passed
@ -75,30 +58,29 @@ class DomainNameserverForm(forms.Form):
ip_list = [ip.strip() for ip in ip.split(",")]
if not server and len(ip_list) > 0:
# If 'server' is empty, disallow 'ip' input
self.add_error('server', NameserverError(code=nsErrorCodes.MISSING_HOST))
self.add_error(
"server", NameserverError(code=nsErrorCodes.MISSING_HOST)
)
# if there's a nameserver and an ip, validate nameserver/ip combo
if server:
if ip:
ip_list = [ip.strip() for ip in ip.split(",")]
else:
ip_list = ['']
ip_list = [""]
try:
Domain.checkHostIPCombo(domain, server, ip_list)
except NameserverError as e:
if e.code == nsErrorCodes.GLUE_RECORD_NOT_ALLOWED:
self.add_error(
'server',
NameserverError(code=nsErrorCodes.GLUE_RECORD_NOT_ALLOWED)
"server",
NameserverError(code=nsErrorCodes.GLUE_RECORD_NOT_ALLOWED),
)
elif e.code == nsErrorCodes.MISSING_IP:
self.add_error(
'ip',
NameserverError(code=nsErrorCodes.MISSING_IP)
)
self.add_error("ip", NameserverError(code=nsErrorCodes.MISSING_IP))
else:
self.add_error('ip', str(e))
self.add_error("ip", str(e))
return cleaned_data

View file

@ -314,15 +314,16 @@ class Domain(TimeStampedModel, DomainHelper):
NameserverError (if exception hit)
Returns:
None"""
if cls.isSubdomain(name, nameserver) and (ip is None or ip == [] or ip == ['']):
if cls.isSubdomain(name, nameserver) and (ip is None or ip == [] or ip == [""]):
raise NameserverError(code=nsErrorCodes.MISSING_IP, nameserver=nameserver)
elif not cls.isSubdomain(name, nameserver) and (ip is not None and ip != [] and ip != ['']):
elif not cls.isSubdomain(name, nameserver) and (
ip is not None and ip != [] and ip != [""]
):
raise NameserverError(
code=nsErrorCodes.GLUE_RECORD_NOT_ALLOWED, nameserver=nameserver, ip=ip
)
elif ip is not None and ip != [] and ip != ['']:
elif ip is not None and ip != [] and ip != [""]:
for addr in ip:
if not cls._valid_ip_addr(addr):
raise NameserverError(
@ -384,7 +385,9 @@ class Domain(TimeStampedModel, DomainHelper):
if newHostDict[prevHost] is not None and set(
newHostDict[prevHost]
) != set(addrs):
self.__class__.checkHostIPCombo(name=self.name, nameserver=prevHost, ip=newHostDict[prevHost])
self.__class__.checkHostIPCombo(
name=self.name, nameserver=prevHost, ip=newHostDict[prevHost]
)
updated_values.append((prevHost, newHostDict[prevHost]))
new_values = {
@ -394,7 +397,9 @@ class Domain(TimeStampedModel, DomainHelper):
}
for nameserver, ip in new_values.items():
self.__class__.checkHostIPCombo(name=self.name, nameserver=nameserver, ip=ip)
self.__class__.checkHostIPCombo(
name=self.name, nameserver=nameserver, ip=ip
)
return (deleted_values, updated_values, new_values, previousHostDict)
@ -605,7 +610,11 @@ class Domain(TimeStampedModel, DomainHelper):
if len(hosts) > 13:
raise NameserverError(code=nsErrorCodes.TOO_MANY_HOSTS)
if self.state not in [self.State.DNS_NEEDED, self.State.READY, self.State.UNKNOWN]:
if self.state not in [
self.State.DNS_NEEDED,
self.State.READY,
self.State.UNKNOWN,
]:
raise ActionNotAllowed("Nameservers can not be " "set in the current state")
logger.info("Setting nameservers")

View file

@ -10,9 +10,7 @@ class TestNameserverError(TestCase):
def test_with_no_ip(self):
"""Test NameserverError when no ip address is passed"""
nameserver = "nameserver val"
expected = (
"Subdomains require an IP address"
)
expected = "Subdomains require an IP address"
nsException = NameserverError(
code=nsErrorCodes.MISSING_IP, nameserver=nameserver

View file

@ -15,7 +15,6 @@ from django.shortcuts import redirect
from django.template import RequestContext
from django.urls import reverse
from django.views.generic.edit import FormMixin
from django.forms import BaseFormSet
from registrar.models import (
Domain,
@ -215,13 +214,13 @@ class DomainDNSView(DomainBaseView):
template_name = "domain_dns.html"
class DomainNameserversView(DomainFormBaseView, BaseFormSet):
class DomainNameserversView(DomainFormBaseView):
"""Domain nameserver editing view."""
template_name = "domain_nameservers.html"
form_class = NameserverFormset
model = Domain
def get_initial(self):
"""The initial value for the form (which is a formset here)."""
nameservers = self.object.nameservers
@ -229,7 +228,9 @@ class DomainNameserversView(DomainFormBaseView, BaseFormSet):
if nameservers is not None:
# Add existing nameservers as initial data
initial_data.extend({"server": name, "ip": ','.join(ip)} for name, ip in nameservers)
initial_data.extend(
{"server": name, "ip": ",".join(ip)} for name, ip in nameservers
)
# Ensure at least 3 fields, filled or empty
while len(initial_data) < 2:
@ -251,8 +252,8 @@ class DomainNameserversView(DomainFormBaseView, BaseFormSet):
def get_form(self, **kwargs):
"""Override the labels and required fields every time we get a formset."""
# kwargs.update({"domain", self.object})
formset = super().get_form(**kwargs)
formset = super().get_form(**kwargs)
for i, form in enumerate(formset):
# form = self.get_form(self, **kwargs)
form.fields["server"].label += f" {i+1}"
@ -263,7 +264,7 @@ class DomainNameserversView(DomainFormBaseView, BaseFormSet):
form.fields["domain"].initial = self.object.name
print(f"domain in get_form {self.object.name}")
return formset
def post(self, request, *args, **kwargs):
"""Form submission posts to this view.
@ -271,33 +272,33 @@ class DomainNameserversView(DomainFormBaseView, BaseFormSet):
"""
self._get_domain(request)
formset = self.get_form()
if "btn-cancel-click" in request.POST:
url = self.get_success_url()
return HttpResponseRedirect(url)
if formset.is_valid():
return self.form_valid(formset)
else:
return self.form_invalid(formset)
def form_valid(self, formset):
"""The formset is valid, perform something with it."""
self.request.session['nameservers_form_domain'] = self.object
self.request.session["nameservers_form_domain"] = self.object
# Set the nameservers from the formset
nameservers = []
for form in formset:
try:
ip_string = form.cleaned_data["ip"]
# Split the string into a list using a comma as the delimiter
ip_list = ip_string.split(',')
ip_list = ip_string.split(",")
# Remove any leading or trailing whitespace from each IP in the list
# this will return [''] if no ips have been entered, which is taken
# into account in the model in checkHostIPCombo
ip_list = [ip.strip() for ip in ip_list]
as_tuple = (
form.cleaned_data["server"],
ip_list,
@ -306,12 +307,12 @@ class DomainNameserversView(DomainFormBaseView, BaseFormSet):
except KeyError:
# no server information in this field, skip it
pass
try:
self.object.nameservers = nameservers
except NameserverError as Err:
# TODO: move into literal
messages.error(self.request, 'Whoops, Nameservers Error')
messages.error(self.request, "Whoops, Nameservers Error")
# messages.error(self.request, GENERIC_ERROR)
logger.error(f"Nameservers error: {Err}")
# TODO: registry is not throwing an error when no connection
@ -325,7 +326,11 @@ class DomainNameserversView(DomainFormBaseView, BaseFormSet):
logger.error(f"Registry error: {Err}")
else:
messages.success(
self.request, "The name servers for this domain have been updated. Keep in mind that DNS changes may take some time to propagate across the internet. It can take anywhere from a few minutes to 48 hours for your changes to take place."
self.request,
"The name servers for this domain have been updated. "
"Keep in mind that DNS changes may take some time to "
"propagate across the internet. It can take anywhere "
"from a few minutes to 48 hours for your changes to take place.",
)
# superclass has the redirect