Tweaks for better PR

This commit is contained in:
Neil Martinsen-Burrell 2023-05-05 11:16:31 -05:00
parent 315e8ff0c5
commit ae2527f0ec
No known key found for this signature in database
GPG key ID: 6A3C818CC10D0184
4 changed files with 36 additions and 6 deletions

View file

@ -230,6 +230,12 @@ function handleValidationClick(e) {
})(); })();
/**
* An IIFE that attaches a click handler for our dynamic nameservers form
*
* Only does something on a single page, but it should be fast enough to run
* it everywhere.
*/
(function prepareForms() { (function prepareForms() {
let serverForm = document.querySelectorAll(".server-form") let serverForm = document.querySelectorAll(".server-form")
let container = document.querySelector("#form-container") let container = document.querySelector("#form-container")
@ -257,4 +263,3 @@ function handleValidationClick(e) {
totalForms.setAttribute('value', `${formNum+1}`) totalForms.setAttribute('value', `${formNum+1}`)
} }
})(); })();

View file

@ -218,7 +218,7 @@ class Domain(TimeStampedModel):
def __str__(self) -> str: def __str__(self) -> str:
return self.name return self.name
def nameservers(self): def nameservers(self) -> List[str]:
"""A list of the nameservers for this domain. """A list of the nameservers for this domain.
TODO: call EPP to get this info instead of returning fake data. TODO: call EPP to get this info instead of returning fake data.

View file

@ -4,6 +4,11 @@
{% block title %}Domain name servers | {{ domain.name }} | {% endblock %} {% block title %}Domain name servers | {{ domain.name }} | {% endblock %}
{% block domain_content %} {% block domain_content %}
{# this is right after the messages block in the parent template #}
{% for form in formset %}
{% include "includes/form_errors.html" with form=form %}
{% endfor %}
<h1>Domain name servers</h1> <h1>Domain name servers</h1>
<p>Before your domain can be used we'll need information about your domain <p>Before your domain can be used we'll need information about your domain
@ -19,7 +24,7 @@
{% for form in formset %} {% for form in formset %}
<div class="server-form"> <div class="server-form">
{% with sublabel_text="Example: ns"|concat:forloop.counter|concat:".nameserver.com" %} {% with sublabel_text="Example: ns"|concat:forloop.counter|concat:".example.com" %}
{% if forloop.counter <= 2 %} {% if forloop.counter <= 2 %}
{% with attr_required=True %} {% with attr_required=True %}
{% input_with_errors form.server %} {% input_with_errors form.server %}
@ -31,7 +36,7 @@
</div> </div>
{% endfor %} {% endfor %}
<button type="submit" name="submit_button" value="add_another" class="usa-button usa-button--unstyled display-block" id="add-form"> <button type="submit" name="submit_button" class="usa-button usa-button--unstyled display-block" id="add-form">
<svg class="usa-icon" aria-hidden="true" focusable="false" role="img" width="24" height="24"> <svg class="usa-icon" aria-hidden="true" focusable="false" role="img" width="24" height="24">
<use xlink:href="{%static 'img/sprite.svg'%}#add_circle"></use> <use xlink:href="{%static 'img/sprite.svg'%}#add_circle"></use>
</svg><span class="margin-left-05">Add another name server</span> </svg><span class="margin-left-05">Add another name server</span>

View file

@ -1234,14 +1234,14 @@ class TestDomainDetail(TestWithDomainPermissions, WebTest):
self.assertContains(home_page, self.domain.name) self.assertContains(home_page, self.domain.name)
def test_domain_nameservers(self): def test_domain_nameservers(self):
"""Can load domain's namerservers page.""" """Can load domain's nameservers page."""
page = self.client.get( page = self.client.get(
reverse("domain-nameservers", kwargs={"pk": self.domain.id}) reverse("domain-nameservers", kwargs={"pk": self.domain.id})
) )
self.assertContains(page, "Domain name servers") self.assertContains(page, "Domain name servers")
def test_domain_nameservers_form(self): def test_domain_nameservers_form(self):
"""Can change domain's namerservers. """Can change domain's nameservers.
Uses self.app WebTest because we need to interact with forms. Uses self.app WebTest because we need to interact with forms.
""" """
@ -1262,6 +1262,26 @@ class TestDomainDetail(TestWithDomainPermissions, WebTest):
page = result.follow() page = result.follow()
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):
"""Can change domain's nameservers.
Uses self.app WebTest because we need to interact with forms.
"""
nameservers_page = self.app.get(
reverse("domain-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)
# first two nameservers are required, so if we empty one out we should
# get a form error
nameservers_page.form["form-0-server"] = ""
with less_console_noise(): # swallow logged warning message
result = nameservers_page.form.submit()
# form submission was a post with an error, response should be a 200
# error text appears twice, once at the top of the page, once around
# the field.
self.assertContains(result, "This field is required", count=2, status_code=200)
class TestApplicationStatus(TestWithUser, WebTest): class TestApplicationStatus(TestWithUser, WebTest):
def setUp(self): def setUp(self):