mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-13 13:09:41 +02:00
Merge remote-tracking branch 'origin/main' into rjm/1192-delete-ns-1-2
This commit is contained in:
commit
3a1c64206f
9 changed files with 126 additions and 25 deletions
|
@ -46,7 +46,7 @@ This is a standard Django secret key. See Django documentation for tips on gener
|
||||||
|
|
||||||
This is the base64 encoded private key used in the OpenID Connect authentication flow with Login.gov. It is used to sign a token during user login; the signature is examined by Login.gov before their API grants access to user data.
|
This is the base64 encoded private key used in the OpenID Connect authentication flow with Login.gov. It is used to sign a token during user login; the signature is examined by Login.gov before their API grants access to user data.
|
||||||
|
|
||||||
Generate a new key using this command (or whatever is most recently recommended by Login.gov):
|
Generate a new key using this command (or whatever is most recently [recommended by Login.gov](https://developers.login.gov/testing/#creating-a-public-certificate)):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl req -nodes -x509 -days 365 -newkey rsa:2048 -keyout private.pem -out public.crt
|
openssl req -nodes -x509 -days 365 -newkey rsa:2048 -keyout private.pem -out public.crt
|
||||||
|
|
|
@ -238,10 +238,8 @@ function handleValidationClick(e) {
|
||||||
function prepareDeleteButtons(formLabel) {
|
function prepareDeleteButtons(formLabel) {
|
||||||
let deleteButtons = document.querySelectorAll(".delete-record");
|
let deleteButtons = document.querySelectorAll(".delete-record");
|
||||||
let totalForms = document.querySelector("#id_form-TOTAL_FORMS");
|
let totalForms = document.querySelector("#id_form-TOTAL_FORMS");
|
||||||
let isNameserversForm = false;
|
let isNameserversForm = document.title.includes("DNS name servers |");
|
||||||
let addButton = document.querySelector("#add-form");
|
let addButton = document.querySelector("#add-form");
|
||||||
if (document.title.includes("DNS name servers |"))
|
|
||||||
isNameserversForm = true;
|
|
||||||
|
|
||||||
// Loop through each delete button and attach the click event listener
|
// Loop through each delete button and attach the click event listener
|
||||||
deleteButtons.forEach((deleteButton) => {
|
deleteButtons.forEach((deleteButton) => {
|
||||||
|
@ -309,7 +307,7 @@ function prepareDeleteButtons(formLabel) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove the add more button if we have less than 13 forms
|
// Display the add more button if we have less than 13 forms
|
||||||
if (isNameserversForm && forms.length <= 13) {
|
if (isNameserversForm && forms.length <= 13) {
|
||||||
addButton.classList.remove("display-none");
|
addButton.classList.remove("display-none");
|
||||||
}
|
}
|
||||||
|
@ -339,9 +337,8 @@ function prepareDeleteButtons(formLabel) {
|
||||||
let totalForms = document.querySelector("#id_form-TOTAL_FORMS");
|
let totalForms = document.querySelector("#id_form-TOTAL_FORMS");
|
||||||
let cloneIndex = 0;
|
let cloneIndex = 0;
|
||||||
let formLabel = '';
|
let formLabel = '';
|
||||||
let isNameserversForm = false;
|
let isNameserversForm = document.title.includes("DNS name servers |");
|
||||||
if (document.title.includes("DNS name servers |")) {
|
if (isNameserversForm) {
|
||||||
isNameserversForm = true;
|
|
||||||
cloneIndex = 2;
|
cloneIndex = 2;
|
||||||
formLabel = "Name server";
|
formLabel = "Name server";
|
||||||
} else if ((document.title.includes("DS Data |")) || (document.title.includes("Key Data |"))) {
|
} else if ((document.title.includes("DS Data |")) || (document.title.includes("Key Data |"))) {
|
||||||
|
|
|
@ -54,6 +54,8 @@ class DomainNameserverForm(forms.Form):
|
||||||
self.clean_empty_strings(cleaned_data)
|
self.clean_empty_strings(cleaned_data)
|
||||||
server = cleaned_data.get("server", "")
|
server = cleaned_data.get("server", "")
|
||||||
ip = cleaned_data.get("ip", None)
|
ip = cleaned_data.get("ip", None)
|
||||||
|
# remove ANY spaces in the ip field
|
||||||
|
ip = ip.replace(" ", "")
|
||||||
domain = cleaned_data.get("domain", "")
|
domain = cleaned_data.get("domain", "")
|
||||||
|
|
||||||
ip_list = self.extract_ip_list(ip)
|
ip_list = self.extract_ip_list(ip)
|
||||||
|
|
|
@ -256,7 +256,6 @@ class Domain(TimeStampedModel, DomainHelper):
|
||||||
hostList = []
|
hostList = []
|
||||||
for host in hosts:
|
for host in hosts:
|
||||||
hostList.append((host["name"], host["addrs"]))
|
hostList.append((host["name"], host["addrs"]))
|
||||||
|
|
||||||
return hostList
|
return hostList
|
||||||
|
|
||||||
def _create_host(self, host, addrs):
|
def _create_host(self, host, addrs):
|
||||||
|
@ -278,7 +277,7 @@ class Domain(TimeStampedModel, DomainHelper):
|
||||||
return response.code
|
return response.code
|
||||||
except RegistryError as e:
|
except RegistryError as e:
|
||||||
logger.error("Error _create_host, code was %s error was %s" % (e.code, e))
|
logger.error("Error _create_host, code was %s error was %s" % (e.code, e))
|
||||||
return e.code
|
raise e
|
||||||
|
|
||||||
def _convert_list_to_dict(self, listToConvert: list[tuple[str, list]]):
|
def _convert_list_to_dict(self, listToConvert: list[tuple[str, list]]):
|
||||||
"""converts a list of hosts into a dictionary
|
"""converts a list of hosts into a dictionary
|
||||||
|
@ -1594,7 +1593,7 @@ class Domain(TimeStampedModel, DomainHelper):
|
||||||
return response.code
|
return response.code
|
||||||
except RegistryError as e:
|
except RegistryError as e:
|
||||||
logger.error("Error _update_host, code was %s error was %s" % (e.code, e))
|
logger.error("Error _update_host, code was %s error was %s" % (e.code, e))
|
||||||
return e.code
|
raise e
|
||||||
|
|
||||||
def addAndRemoveHostsFromDomain(
|
def addAndRemoveHostsFromDomain(
|
||||||
self, hostsToAdd: list[str], hostsToDelete: list[str]
|
self, hostsToAdd: list[str], hostsToDelete: list[str]
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
{% url 'domain-dns-nameservers' pk=domain.id as url %}
|
{% url 'domain-dns-nameservers' pk=domain.id as url %}
|
||||||
{% if domain.nameservers|length > 0 %}
|
{% if domain.nameservers|length > 0 %}
|
||||||
{% include "includes/summary_item.html" with title='DNS name servers' value=domain.nameservers list='true' edit_link=url %}
|
{% include "includes/summary_item.html" with title='DNS name servers' domains='true' value=domain.nameservers list='true' edit_link=url %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<h2 class="margin-top-neg-1"> DNS name servers </h2>
|
<h2 class="margin-top-neg-1"> DNS name servers </h2>
|
||||||
<p> No DNS name servers have been added yet. Before your domain can be used we’ll need information about your domain name servers.</p>
|
<p> No DNS name servers have been added yet. Before your domain can be used we’ll need information about your domain name servers.</p>
|
||||||
|
|
|
@ -43,7 +43,6 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
{% include "includes/contact.html" with contact=value %}
|
{% include "includes/contact.html" with contact=value %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<!-- TODO #687 add here another elif for nameservers to show item Ips -->
|
|
||||||
{% elif list %}
|
{% elif list %}
|
||||||
{% if value|length == 1 %}
|
{% if value|length == 1 %}
|
||||||
{% if users %}
|
{% if users %}
|
||||||
|
@ -56,6 +55,17 @@
|
||||||
{% for item in value %}
|
{% for item in value %}
|
||||||
{% if users %}
|
{% if users %}
|
||||||
<li>{{ item.user.email }}</li>
|
<li>{{ item.user.email }}</li>
|
||||||
|
{% elif domains %}
|
||||||
|
<li>
|
||||||
|
{{ item.0 }}
|
||||||
|
{% if item.1 %}
|
||||||
|
({% spaceless %}
|
||||||
|
{% for addr in item.1 %}
|
||||||
|
{{addr}}{% if not forloop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endspaceless %})
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li>{{ item }}</li>
|
<li>{{ item }}</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -738,6 +738,7 @@ class MockEppLib(TestCase):
|
||||||
"ns1.cats-are-superior3.com",
|
"ns1.cats-are-superior3.com",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
infoDomainNoHost = fakedEppObject(
|
infoDomainNoHost = fakedEppObject(
|
||||||
"my-nameserver.gov",
|
"my-nameserver.gov",
|
||||||
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
||||||
|
@ -793,7 +794,20 @@ class MockEppLib(TestCase):
|
||||||
infoDomainHasIP = fakedEppObject(
|
infoDomainHasIP = fakedEppObject(
|
||||||
"nameserverwithip.gov",
|
"nameserverwithip.gov",
|
||||||
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
||||||
contacts=[],
|
contacts=[
|
||||||
|
common.DomainContact(
|
||||||
|
contact="securityContact",
|
||||||
|
type=PublicContact.ContactTypeChoices.SECURITY,
|
||||||
|
),
|
||||||
|
common.DomainContact(
|
||||||
|
contact="technicalContact",
|
||||||
|
type=PublicContact.ContactTypeChoices.TECHNICAL,
|
||||||
|
),
|
||||||
|
common.DomainContact(
|
||||||
|
contact="adminContact",
|
||||||
|
type=PublicContact.ContactTypeChoices.ADMINISTRATIVE,
|
||||||
|
),
|
||||||
|
],
|
||||||
hosts=[
|
hosts=[
|
||||||
"ns1.nameserverwithip.gov",
|
"ns1.nameserverwithip.gov",
|
||||||
"ns2.nameserverwithip.gov",
|
"ns2.nameserverwithip.gov",
|
||||||
|
@ -802,6 +816,29 @@ class MockEppLib(TestCase):
|
||||||
addrs=[common.Ip(addr="1.2.3.4"), common.Ip(addr="2.3.4.5")],
|
addrs=[common.Ip(addr="1.2.3.4"), common.Ip(addr="2.3.4.5")],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
justNameserver = fakedEppObject(
|
||||||
|
"justnameserver.com",
|
||||||
|
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
||||||
|
contacts=[
|
||||||
|
common.DomainContact(
|
||||||
|
contact="securityContact",
|
||||||
|
type=PublicContact.ContactTypeChoices.SECURITY,
|
||||||
|
),
|
||||||
|
common.DomainContact(
|
||||||
|
contact="technicalContact",
|
||||||
|
type=PublicContact.ContactTypeChoices.TECHNICAL,
|
||||||
|
),
|
||||||
|
common.DomainContact(
|
||||||
|
contact="adminContact",
|
||||||
|
type=PublicContact.ContactTypeChoices.ADMINISTRATIVE,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
hosts=[
|
||||||
|
"ns1.justnameserver.com",
|
||||||
|
"ns2.justnameserver.com",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
infoDomainCheckHostIPCombo = fakedEppObject(
|
infoDomainCheckHostIPCombo = fakedEppObject(
|
||||||
"nameserversubdomain.gov",
|
"nameserversubdomain.gov",
|
||||||
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
cr_date=datetime.datetime(2023, 5, 25, 19, 45, 35),
|
||||||
|
@ -922,6 +959,7 @@ class MockEppLib(TestCase):
|
||||||
"threenameserversDomain.gov": (self.infoDomainThreeHosts, None),
|
"threenameserversDomain.gov": (self.infoDomainThreeHosts, None),
|
||||||
"defaultsecurity.gov": (self.InfoDomainWithDefaultSecurityContact, None),
|
"defaultsecurity.gov": (self.InfoDomainWithDefaultSecurityContact, None),
|
||||||
"defaulttechnical.gov": (self.InfoDomainWithDefaultTechnicalContact, None),
|
"defaulttechnical.gov": (self.InfoDomainWithDefaultTechnicalContact, None),
|
||||||
|
"justnameserver.com": (self.justNameserver, None),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Retrieve the corresponding values from the dictionary
|
# Retrieve the corresponding values from the dictionary
|
||||||
|
|
|
@ -1099,6 +1099,13 @@ class TestWithDomainPermissions(TestWithUser):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self.domain, _ = Domain.objects.get_or_create(name="igorville.gov")
|
self.domain, _ = Domain.objects.get_or_create(name="igorville.gov")
|
||||||
|
self.domain_with_ip, _ = Domain.objects.get_or_create(
|
||||||
|
name="nameserverwithip.gov"
|
||||||
|
)
|
||||||
|
self.domain_just_nameserver, _ = Domain.objects.get_or_create(
|
||||||
|
name="justnameserver.com"
|
||||||
|
)
|
||||||
|
|
||||||
self.domain_dsdata, _ = Domain.objects.get_or_create(name="dnssec-dsdata.gov")
|
self.domain_dsdata, _ = Domain.objects.get_or_create(name="dnssec-dsdata.gov")
|
||||||
self.domain_multdsdata, _ = Domain.objects.get_or_create(
|
self.domain_multdsdata, _ = Domain.objects.get_or_create(
|
||||||
name="dnssec-multdsdata.gov"
|
name="dnssec-multdsdata.gov"
|
||||||
|
@ -1108,9 +1115,11 @@ class TestWithDomainPermissions(TestWithUser):
|
||||||
self.domain_dnssec_none, _ = Domain.objects.get_or_create(
|
self.domain_dnssec_none, _ = Domain.objects.get_or_create(
|
||||||
name="dnssec-none.gov"
|
name="dnssec-none.gov"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.domain_information, _ = DomainInformation.objects.get_or_create(
|
self.domain_information, _ = DomainInformation.objects.get_or_create(
|
||||||
creator=self.user, domain=self.domain
|
creator=self.user, domain=self.domain
|
||||||
)
|
)
|
||||||
|
|
||||||
DomainInformation.objects.get_or_create(
|
DomainInformation.objects.get_or_create(
|
||||||
creator=self.user, domain=self.domain_dsdata
|
creator=self.user, domain=self.domain_dsdata
|
||||||
)
|
)
|
||||||
|
@ -1120,9 +1129,17 @@ class TestWithDomainPermissions(TestWithUser):
|
||||||
DomainInformation.objects.get_or_create(
|
DomainInformation.objects.get_or_create(
|
||||||
creator=self.user, domain=self.domain_dnssec_none
|
creator=self.user, domain=self.domain_dnssec_none
|
||||||
)
|
)
|
||||||
|
DomainInformation.objects.get_or_create(
|
||||||
|
creator=self.user, domain=self.domain_with_ip
|
||||||
|
)
|
||||||
|
DomainInformation.objects.get_or_create(
|
||||||
|
creator=self.user, domain=self.domain_just_nameserver
|
||||||
|
)
|
||||||
|
|
||||||
self.role, _ = UserDomainRole.objects.get_or_create(
|
self.role, _ = UserDomainRole.objects.get_or_create(
|
||||||
user=self.user, domain=self.domain, role=UserDomainRole.Roles.MANAGER
|
user=self.user, domain=self.domain, role=UserDomainRole.Roles.MANAGER
|
||||||
)
|
)
|
||||||
|
|
||||||
UserDomainRole.objects.get_or_create(
|
UserDomainRole.objects.get_or_create(
|
||||||
user=self.user, domain=self.domain_dsdata, role=UserDomainRole.Roles.MANAGER
|
user=self.user, domain=self.domain_dsdata, role=UserDomainRole.Roles.MANAGER
|
||||||
)
|
)
|
||||||
|
@ -1136,6 +1153,16 @@ class TestWithDomainPermissions(TestWithUser):
|
||||||
domain=self.domain_dnssec_none,
|
domain=self.domain_dnssec_none,
|
||||||
role=UserDomainRole.Roles.MANAGER,
|
role=UserDomainRole.Roles.MANAGER,
|
||||||
)
|
)
|
||||||
|
UserDomainRole.objects.get_or_create(
|
||||||
|
user=self.user,
|
||||||
|
domain=self.domain_with_ip,
|
||||||
|
role=UserDomainRole.Roles.MANAGER,
|
||||||
|
)
|
||||||
|
UserDomainRole.objects.get_or_create(
|
||||||
|
user=self.user,
|
||||||
|
domain=self.domain_just_nameserver,
|
||||||
|
role=UserDomainRole.Roles.MANAGER,
|
||||||
|
)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
try:
|
try:
|
||||||
|
@ -1219,6 +1246,37 @@ class TestDomainOverview(TestWithDomainPermissions, WebTest):
|
||||||
response = self.client.get(reverse("domain", kwargs={"pk": self.domain.id}))
|
response = self.client.get(reverse("domain", kwargs={"pk": self.domain.id}))
|
||||||
self.assertEqual(response.status_code, 403)
|
self.assertEqual(response.status_code, 403)
|
||||||
|
|
||||||
|
def test_domain_see_just_nameserver(self):
|
||||||
|
home_page = self.app.get("/")
|
||||||
|
self.assertContains(home_page, "justnameserver.com")
|
||||||
|
|
||||||
|
# View nameserver on Domain Overview page
|
||||||
|
detail_page = self.app.get(
|
||||||
|
reverse("domain", kwargs={"pk": self.domain_just_nameserver.id})
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertContains(detail_page, "justnameserver.com")
|
||||||
|
self.assertContains(detail_page, "ns1.justnameserver.com")
|
||||||
|
self.assertContains(detail_page, "ns2.justnameserver.com")
|
||||||
|
|
||||||
|
def test_domain_see_nameserver_and_ip(self):
|
||||||
|
home_page = self.app.get("/")
|
||||||
|
self.assertContains(home_page, "nameserverwithip.gov")
|
||||||
|
|
||||||
|
# View nameserver on Domain Overview page
|
||||||
|
detail_page = self.app.get(
|
||||||
|
reverse("domain", kwargs={"pk": self.domain_with_ip.id})
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertContains(detail_page, "nameserverwithip.gov")
|
||||||
|
|
||||||
|
self.assertContains(detail_page, "ns1.nameserverwithip.gov")
|
||||||
|
self.assertContains(detail_page, "ns2.nameserverwithip.gov")
|
||||||
|
self.assertContains(detail_page, "ns3.nameserverwithip.gov")
|
||||||
|
# Splitting IP addresses bc there is odd whitespace and can't strip text
|
||||||
|
self.assertContains(detail_page, "(1.2.3.4,")
|
||||||
|
self.assertContains(detail_page, "2.3.4.5)")
|
||||||
|
|
||||||
|
|
||||||
class TestDomainManagers(TestDomainOverview):
|
class TestDomainManagers(TestDomainOverview):
|
||||||
def test_domain_managers(self):
|
def test_domain_managers(self):
|
||||||
|
@ -1389,7 +1447,7 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
self.assertContains(page, "DNS name servers")
|
self.assertContains(page, "DNS name servers")
|
||||||
|
|
||||||
def test_domain_nameservers_form_submit_one_nameserver(self):
|
def test_domain_nameservers_form_submit_one_nameserver(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form submitted with one nameserver throws error.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
@ -1414,7 +1472,7 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_domain_nameservers_form_submit_subdomain_missing_ip(self):
|
def test_domain_nameservers_form_submit_subdomain_missing_ip(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form catches missing ip error on subdomain.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
@ -1440,7 +1498,7 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_domain_nameservers_form_submit_missing_host(self):
|
def test_domain_nameservers_form_submit_missing_host(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form catches error when host is missing.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
@ -1466,7 +1524,8 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_domain_nameservers_form_submit_glue_record_not_allowed(self):
|
def test_domain_nameservers_form_submit_glue_record_not_allowed(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form catches error when IP is present
|
||||||
|
but host not subdomain.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
@ -1497,7 +1556,7 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_domain_nameservers_form_submit_invalid_ip(self):
|
def test_domain_nameservers_form_submit_invalid_ip(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form catches invalid IP on submission.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
@ -1530,7 +1589,7 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_domain_nameservers_form_submits_successfully(self):
|
def test_domain_nameservers_form_submits_successfully(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form submits successfully with valid input.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
@ -1561,7 +1620,7 @@ class TestDomainNameservers(TestDomainOverview):
|
||||||
self.assertContains(page, "The name servers for this domain have been updated")
|
self.assertContains(page, "The name servers for this domain have been updated")
|
||||||
|
|
||||||
def test_domain_nameservers_form_invalid(self):
|
def test_domain_nameservers_form_invalid(self):
|
||||||
"""Can change domain's nameservers.
|
"""Nameserver form does not submit with invalid data.
|
||||||
|
|
||||||
Uses self.app WebTest because we need to interact with forms.
|
Uses self.app WebTest because we need to interact with forms.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -295,10 +295,6 @@ class DomainNameserversView(DomainFormBaseView):
|
||||||
if ip_string:
|
if ip_string:
|
||||||
# Split the string into a list using a comma as the delimiter
|
# 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 = (
|
as_tuple = (
|
||||||
form.cleaned_data["server"],
|
form.cleaned_data["server"],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue