mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-03 09:43:33 +02:00
cleanup and lint
This commit is contained in:
parent
f2b12e01d0
commit
3895a04879
3 changed files with 43 additions and 44 deletions
|
@ -17,6 +17,7 @@ from registrar.utility import errors
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class RegistrarForm(forms.Form):
|
class RegistrarForm(forms.Form):
|
||||||
"""
|
"""
|
||||||
A common set of methods and configuration.
|
A common set of methods and configuration.
|
||||||
|
@ -94,14 +95,14 @@ class RegistrarFormSet(forms.BaseFormSet):
|
||||||
Hint: Subclass should call `self._to_database(...)`.
|
Hint: Subclass should call `self._to_database(...)`.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def test_if_more_than_one_join(self, db_obj, rel, related_name):
|
def test_if_more_than_one_join(self, db_obj, rel, related_name):
|
||||||
"""Helper for finding whether an object is joined more than once."""
|
"""Helper for finding whether an object is joined more than once."""
|
||||||
# threshold is the number of related objects that are acceptable
|
# threshold is the number of related objects that are acceptable
|
||||||
# when determining if related objects exist. threshold is 0 for most
|
# when determining if related objects exist. threshold is 0 for most
|
||||||
# relationships. if the relationship is related_name, we know that
|
# relationships. if the relationship is related_name, we know that
|
||||||
# there is already exactly 1 acceptable relationship (the one we are
|
# there is already exactly 1 acceptable relationship (the one we are
|
||||||
# attempting to delete), so the threshold is 1
|
# attempting to delete), so the threshold is 1
|
||||||
threshold = 1 if rel == related_name else 0
|
threshold = 1 if rel == related_name else 0
|
||||||
|
|
||||||
# Raise a KeyError if rel is not a defined field on the db_obj model
|
# Raise a KeyError if rel is not a defined field on the db_obj model
|
||||||
|
@ -640,7 +641,7 @@ class OtherContactsForm(RegistrarForm):
|
||||||
label="Email",
|
label="Email",
|
||||||
error_messages={
|
error_messages={
|
||||||
"required": ("Enter an email address in the required format, like name@example.com."),
|
"required": ("Enter an email address in the required format, like name@example.com."),
|
||||||
"invalid": ("Enter an email address in the required format, like name@example.com.")
|
"invalid": ("Enter an email address in the required format, like name@example.com."),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
phone = PhoneNumberField(
|
phone = PhoneNumberField(
|
||||||
|
@ -659,7 +660,7 @@ class OtherContactsForm(RegistrarForm):
|
||||||
"""
|
"""
|
||||||
self.form_data_marked_for_deletion = False
|
self.form_data_marked_for_deletion = False
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.empty_permitted=False
|
self.empty_permitted = False
|
||||||
|
|
||||||
def mark_form_for_deletion(self):
|
def mark_form_for_deletion(self):
|
||||||
self.form_data_marked_for_deletion = True
|
self.form_data_marked_for_deletion = True
|
||||||
|
@ -668,8 +669,8 @@ class OtherContactsForm(RegistrarForm):
|
||||||
"""
|
"""
|
||||||
This method overrides the default behavior for forms.
|
This method overrides the default behavior for forms.
|
||||||
This cleans the form after field validation has already taken place.
|
This cleans the form after field validation has already taken place.
|
||||||
In this override, allow for a form which is deleted by user or marked for
|
In this override, allow for a form which is deleted by user or marked for
|
||||||
deletion by formset to be considered valid even though certain required fields have
|
deletion by formset to be considered valid even though certain required fields have
|
||||||
not passed field validation
|
not passed field validation
|
||||||
"""
|
"""
|
||||||
if self.form_data_marked_for_deletion or self.cleaned_data.get("DELETE"):
|
if self.form_data_marked_for_deletion or self.cleaned_data.get("DELETE"):
|
||||||
|
@ -694,9 +695,9 @@ class OtherContactsForm(RegistrarForm):
|
||||||
class BaseOtherContactsFormSet(RegistrarFormSet):
|
class BaseOtherContactsFormSet(RegistrarFormSet):
|
||||||
"""
|
"""
|
||||||
FormSet for Other Contacts
|
FormSet for Other Contacts
|
||||||
|
|
||||||
There are two conditions by which a form in the formset can be marked for deletion.
|
There are two conditions by which a form in the formset can be marked for deletion.
|
||||||
One is if the user clicks 'DELETE' button, and this is submitted in the form. The
|
One is if the user clicks 'DELETE' button, and this is submitted in the form. The
|
||||||
other is if the YesNo form, which is submitted with this formset, is set to No; in
|
other is if the YesNo form, which is submitted with this formset, is set to No; in
|
||||||
this case, all forms in formset are marked for deletion. Both of these conditions
|
this case, all forms in formset are marked for deletion. Both of these conditions
|
||||||
must co-exist.
|
must co-exist.
|
||||||
|
@ -705,6 +706,7 @@ class BaseOtherContactsFormSet(RegistrarFormSet):
|
||||||
tested and handled; this is configured with REVERSE_JOINS, which is an array of
|
tested and handled; this is configured with REVERSE_JOINS, which is an array of
|
||||||
strings representing the relationships between contact model and other models.
|
strings representing the relationships between contact model and other models.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
JOIN = "other_contacts"
|
JOIN = "other_contacts"
|
||||||
REVERSE_JOINS = [
|
REVERSE_JOINS = [
|
||||||
"user",
|
"user",
|
||||||
|
@ -718,7 +720,7 @@ class BaseOtherContactsFormSet(RegistrarFormSet):
|
||||||
|
|
||||||
def get_deletion_widget(self):
|
def get_deletion_widget(self):
|
||||||
return forms.HiddenInput(attrs={"class": "deletion"})
|
return forms.HiddenInput(attrs={"class": "deletion"})
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Override __init__ for RegistrarFormSet.
|
Override __init__ for RegistrarFormSet.
|
||||||
|
@ -737,14 +739,14 @@ class BaseOtherContactsFormSet(RegistrarFormSet):
|
||||||
Implements should_delete method from BaseFormSet.
|
Implements should_delete method from BaseFormSet.
|
||||||
"""
|
"""
|
||||||
return self.formset_data_marked_for_deletion or cleaned.get("DELETE", False)
|
return self.formset_data_marked_for_deletion or cleaned.get("DELETE", False)
|
||||||
|
|
||||||
def pre_create(self, db_obj, cleaned):
|
def pre_create(self, db_obj, cleaned):
|
||||||
"""Code to run before an item in the formset is created in the database."""
|
"""Code to run before an item in the formset is created in the database."""
|
||||||
# remove DELETE from cleaned
|
# remove DELETE from cleaned
|
||||||
if "DELETE" in cleaned:
|
if "DELETE" in cleaned:
|
||||||
cleaned.pop('DELETE')
|
cleaned.pop("DELETE")
|
||||||
return cleaned
|
return cleaned
|
||||||
|
|
||||||
def to_database(self, obj: DomainApplication):
|
def to_database(self, obj: DomainApplication):
|
||||||
self._to_database(obj, self.JOIN, self.REVERSE_JOINS, self.should_delete, self.pre_update, self.pre_create)
|
self._to_database(obj, self.JOIN, self.REVERSE_JOINS, self.should_delete, self.pre_update, self.pre_create)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ from django.test import Client, TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from registrar.forms.application_wizard import OtherContactsFormSet
|
|
||||||
from .common import MockEppLib, MockSESClient, completed_application, create_user # type: ignore
|
from .common import MockEppLib, MockSESClient, completed_application, create_user # type: ignore
|
||||||
from django_webtest import WebTest # type: ignore
|
from django_webtest import WebTest # type: ignore
|
||||||
import boto3_mocking # type: ignore
|
import boto3_mocking # type: ignore
|
||||||
|
@ -1083,7 +1082,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
|
||||||
|
|
||||||
def test_delete_other_contact(self):
|
def test_delete_other_contact(self):
|
||||||
"""Other contacts can be deleted after being saved to database.
|
"""Other contacts can be deleted after being saved to database.
|
||||||
|
|
||||||
This formset uses the DJANGO DELETE widget. We'll test that by setting 2 contacts on an application,
|
This formset uses the DJANGO DELETE widget. We'll test that by setting 2 contacts on an application,
|
||||||
loading the form and marking one contact up for deletion."""
|
loading the form and marking one contact up for deletion."""
|
||||||
# Populate the database with a domain application that
|
# Populate the database with a domain application that
|
||||||
|
@ -1148,7 +1147,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
other_contacts_form = other_contacts_page.forms[0]
|
other_contacts_form = other_contacts_page.forms[0]
|
||||||
|
|
||||||
# Minimal check to ensure the form is loaded with both other contacts
|
# Minimal check to ensure the form is loaded with both other contacts
|
||||||
self.assertEqual(other_contacts_form["other_contacts-0-first_name"].value, "Testy2")
|
self.assertEqual(other_contacts_form["other_contacts-0-first_name"].value, "Testy2")
|
||||||
self.assertEqual(other_contacts_form["other_contacts-1-first_name"].value, "Testy3")
|
self.assertEqual(other_contacts_form["other_contacts-1-first_name"].value, "Testy3")
|
||||||
|
@ -1159,12 +1158,12 @@ class DomainApplicationTests(TestWithUser, WebTest):
|
||||||
# Submit the form
|
# Submit the form
|
||||||
other_contacts_form.submit()
|
other_contacts_form.submit()
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
# Verify that the first dude was deleted
|
# Verify that the first dude was deleted
|
||||||
application = DomainApplication.objects.get()
|
application = DomainApplication.objects.get()
|
||||||
self.assertEqual(application.other_contacts.count(), 1)
|
self.assertEqual(application.other_contacts.count(), 1)
|
||||||
self.assertEqual(application.other_contacts.first().first_name, "Testy3")
|
self.assertEqual(application.other_contacts.first().first_name, "Testy3")
|
||||||
|
|
||||||
def test_delete_other_contact_does_not_allow_zero_contacts(self):
|
def test_delete_other_contact_does_not_allow_zero_contacts(self):
|
||||||
"""Delete Other Contact does not allow submission with zero contacts."""
|
"""Delete Other Contact does not allow submission with zero contacts."""
|
||||||
# Populate the database with a domain application that
|
# Populate the database with a domain application that
|
||||||
|
@ -1221,7 +1220,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
other_contacts_form = other_contacts_page.forms[0]
|
other_contacts_form = other_contacts_page.forms[0]
|
||||||
|
|
||||||
# Minimal check to ensure the form is loaded
|
# Minimal check to ensure the form is loaded
|
||||||
self.assertEqual(other_contacts_form["other_contacts-0-first_name"].value, "Testy2")
|
self.assertEqual(other_contacts_form["other_contacts-0-first_name"].value, "Testy2")
|
||||||
|
|
||||||
|
@ -1231,19 +1230,20 @@ class DomainApplicationTests(TestWithUser, WebTest):
|
||||||
# Submit the form
|
# Submit the form
|
||||||
other_contacts_form.submit()
|
other_contacts_form.submit()
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
# Verify that the contact was not deleted
|
# Verify that the contact was not deleted
|
||||||
application = DomainApplication.objects.get()
|
application = DomainApplication.objects.get()
|
||||||
self.assertEqual(application.other_contacts.count(), 1)
|
self.assertEqual(application.other_contacts.count(), 1)
|
||||||
self.assertEqual(application.other_contacts.first().first_name, "Testy2")
|
self.assertEqual(application.other_contacts.first().first_name, "Testy2")
|
||||||
|
|
||||||
|
@skip("Can't figure out how to make this work")
|
||||||
def test_delete_other_contact_sets_visible_empty_form_as_required_after_failed_submit(self):
|
def test_delete_other_contact_sets_visible_empty_form_as_required_after_failed_submit(self):
|
||||||
"""When you:
|
"""When you:
|
||||||
1. add an empty contact,
|
1. add an empty contact,
|
||||||
2. delete existing contacts,
|
2. delete existing contacts,
|
||||||
3. then submit,
|
3. then submit,
|
||||||
The forms on page reload shows all the required fields and their errors."""
|
The forms on page reload shows all the required fields and their errors."""
|
||||||
|
|
||||||
# Populate the database with a domain application that
|
# Populate the database with a domain application that
|
||||||
# has 1 "other contact" assigned to it
|
# has 1 "other contact" assigned to it
|
||||||
# We'll do it from scratch so we can reuse the other contact
|
# We'll do it from scratch so we can reuse the other contact
|
||||||
|
@ -1298,58 +1298,55 @@ class DomainApplicationTests(TestWithUser, WebTest):
|
||||||
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
other_contacts_form = other_contacts_page.forms[0]
|
other_contacts_form = other_contacts_page.forms[0]
|
||||||
|
|
||||||
|
|
||||||
# other_contacts_form["other_contacts-has_other_contacts"] = "True"
|
# other_contacts_form["other_contacts-has_other_contacts"] = "True"
|
||||||
# other_contacts_form.set("other_contacts-0-first_name", "")
|
# other_contacts_form.set("other_contacts-0-first_name", "")
|
||||||
# other_contacts_page = other_contacts_page.forms[0].submit()
|
# other_contacts_page = other_contacts_page.forms[0].submit()
|
||||||
# self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
# self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
# Print the content to inspect the HTML
|
# Print the content to inspect the HTML
|
||||||
# print(other_contacts_page.content.decode('utf-8'))
|
# print(other_contacts_page.content.decode('utf-8'))
|
||||||
|
|
||||||
# other_contacts_form = other_contacts_page.forms[0]
|
# other_contacts_form = other_contacts_page.forms[0]
|
||||||
|
|
||||||
# Access the "Add another contact" button and click it
|
# Access the "Add another contact" button and click it
|
||||||
# other_contacts_page = other_contacts_page.click('#add-form', index=0)
|
# other_contacts_page = other_contacts_page.click('#add-form', index=0)
|
||||||
|
|
||||||
# Minimal check to ensure the form is loaded
|
# Minimal check to ensure the form is loaded
|
||||||
self.assertEqual(other_contacts_form["other_contacts-0-first_name"].value, "Testy2")
|
self.assertEqual(other_contacts_form["other_contacts-0-first_name"].value, "Testy2")
|
||||||
|
|
||||||
# Get the formset from the response context
|
# Get the formset from the response context
|
||||||
formset = other_contacts_page.context['forms'][1] # Replace with the actual context variable name
|
formset = other_contacts_page.context["forms"][1] # Replace with the actual context variable name
|
||||||
|
|
||||||
# Check the initial number of forms in the formset
|
# Check the initial number of forms in the formset
|
||||||
initial_form_count = formset.total_form_count()
|
initial_form_count = formset.total_form_count()
|
||||||
|
|
||||||
print(f'initial_form_count {initial_form_count}')
|
print(f"initial_form_count {initial_form_count}")
|
||||||
|
|
||||||
# Add a new form to the formset data
|
# Add a new form to the formset data
|
||||||
formset_data = formset.management_form.initial
|
formset_data = formset.management_form.initial
|
||||||
formset_data['TOTAL_FORMS'] = initial_form_count + 1 # Increase the total form count
|
formset_data["TOTAL_FORMS"] = initial_form_count + 1 # Increase the total form count
|
||||||
|
|
||||||
print(f"initial_form_count {formset_data['TOTAL_FORMS']}")
|
print(f"initial_form_count {formset_data['TOTAL_FORMS']}")
|
||||||
|
|
||||||
formset.extra = 1
|
formset.extra = 1
|
||||||
|
|
||||||
other_contacts_form_0 = formset[0]
|
|
||||||
other_contacts_form_1 = formset[1]
|
other_contacts_form_1 = formset[1]
|
||||||
|
|
||||||
print(other_contacts_page.content.decode('utf-8'))
|
print(other_contacts_page.content.decode("utf-8"))
|
||||||
|
|
||||||
other_contacts_form_1.set("other_contacts-1-first_name", "Rachid")
|
other_contacts_form_1.set("other_contacts-1-first_name", "Rachid")
|
||||||
|
|
||||||
# self.assertEqual(other_contacts_form["other_contacts-1-first_name"].value, "")
|
# self.assertEqual(other_contacts_form["other_contacts-1-first_name"].value, "")
|
||||||
|
|
||||||
# # # Submit the form
|
# # # Submit the form
|
||||||
# # other_contacts_form.submit()
|
# # other_contacts_form.submit()
|
||||||
# # self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
# # self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
|
||||||
|
|
||||||
# # # Verify that the first dude was deleted
|
# # # Verify that the first dude was deleted
|
||||||
# # application = DomainApplication.objects.get()
|
# # application = DomainApplication.objects.get()
|
||||||
# # # self.assertEqual(application.other_contacts.count(), 1)
|
# # # self.assertEqual(application.other_contacts.count(), 1)
|
||||||
# # # self.assertEqual(application.other_contacts.first().first_name, "Testy3")
|
# # # self.assertEqual(application.other_contacts.first().first_name, "Testy3")
|
||||||
|
|
||||||
|
|
||||||
def test_application_about_your_organiztion_interstate(self):
|
def test_application_about_your_organiztion_interstate(self):
|
||||||
"""Special districts have to answer an additional question."""
|
"""Special districts have to answer an additional question."""
|
||||||
|
|
|
@ -486,7 +486,7 @@ class YourContact(ApplicationWizard):
|
||||||
class OtherContacts(ApplicationWizard):
|
class OtherContacts(ApplicationWizard):
|
||||||
template_name = "application_other_contacts.html"
|
template_name = "application_other_contacts.html"
|
||||||
forms = [forms.OtherContactsYesNoForm, forms.OtherContactsFormSet, forms.NoOtherContactsForm]
|
forms = [forms.OtherContactsYesNoForm, forms.OtherContactsFormSet, forms.NoOtherContactsForm]
|
||||||
|
|
||||||
def is_valid(self, forms: list) -> bool:
|
def is_valid(self, forms: list) -> bool:
|
||||||
"""Overrides default behavior defined in ApplicationWizard.
|
"""Overrides default behavior defined in ApplicationWizard.
|
||||||
Depending on value in other_contacts_yes_no_form, marks forms in
|
Depending on value in other_contacts_yes_no_form, marks forms in
|
||||||
|
@ -500,9 +500,9 @@ class OtherContacts(ApplicationWizard):
|
||||||
# set all the required other_contact fields as necessary since new forms
|
# set all the required other_contact fields as necessary since new forms
|
||||||
# were added through javascript
|
# were added through javascript
|
||||||
for form in forms[1].forms:
|
for form in forms[1].forms:
|
||||||
for _, field in form.fields.items():
|
for field_item, field in form.fields.items():
|
||||||
if field.required:
|
if field.required:
|
||||||
field.widget.attrs['required'] = 'required'
|
field.widget.attrs["required"] = "required"
|
||||||
|
|
||||||
all_forms_valid = True
|
all_forms_valid = True
|
||||||
# test first for yes_no_form validity
|
# test first for yes_no_form validity
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue