From 23672f426510ef4d44acfa388ad6159f25a72599 Mon Sep 17 00:00:00 2001 From: rachidatecs Date: Fri, 19 May 2023 10:57:24 -0400 Subject: [PATCH 1/9] url confid for contact information --- src/registrar/config/urls.py | 7 ++++++- src/zap.conf | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/registrar/config/urls.py b/src/registrar/config/urls.py index bd5b22da7..2cecd6492 100644 --- a/src/registrar/config/urls.py +++ b/src/registrar/config/urls.py @@ -84,7 +84,12 @@ urlpatterns = [ name="domain-nameservers", ), path( - "domain//securityemail", + "domain//contact-information", + views.DomainSecurityEmailView.as_view(), + name="domain-contact-information", + ), + path( + "domain//security-email", views.DomainSecurityEmailView.as_view(), name="domain-security-email", ), diff --git a/src/zap.conf b/src/zap.conf index bb86d60b7..ee92e8a1c 100644 --- a/src/zap.conf +++ b/src/zap.conf @@ -52,7 +52,7 @@ 10038 OUTOFSCOPE http://app:8080/users 10038 OUTOFSCOPE http://app:8080/users/add 10038 OUTOFSCOPE http://app:8080/nameservers -10038 OUTOFSCOPE http://app:8080/securityemail +10038 OUTOFSCOPE http://app:8080/security-email 10038 OUTOFSCOPE http://app:8080/delete 10038 OUTOFSCOPE http://app:8080/withdraw 10038 OUTOFSCOPE http://app:8080/withdrawconfirmed From 659941368a0536dff375fd142d7bcd4511e20194 Mon Sep 17 00:00:00 2001 From: rachidatecs Date: Mon, 22 May 2023 14:35:01 -0400 Subject: [PATCH 2/9] Vie, Form, Template for Contact Info --- src/registrar/forms/__init__.py | 2 +- src/registrar/forms/domain.py | 43 ++++++++++++ src/registrar/models/contact.py | 3 + src/registrar/templates/domain_sidebar.html | 2 +- .../domain_your_contact_information.html | 35 ++++++++++ src/registrar/views/__init__.py | 1 + src/registrar/views/domain.py | 68 +++++++++++++++++-- src/zap.conf | 1 + 8 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 src/registrar/templates/domain_your_contact_information.html diff --git a/src/registrar/forms/__init__.py b/src/registrar/forms/__init__.py index 6cfe07818..7571ee763 100644 --- a/src/registrar/forms/__init__.py +++ b/src/registrar/forms/__init__.py @@ -1,2 +1,2 @@ from .application_wizard import * -from .domain import DomainAddUserForm, NameserverFormset, DomainSecurityEmailForm +from .domain import DomainAddUserForm, NameserverFormset, DomainSecurityEmailForm, ContactForm diff --git a/src/registrar/forms/domain.py b/src/registrar/forms/domain.py index 83e13b685..f8e195360 100644 --- a/src/registrar/forms/domain.py +++ b/src/registrar/forms/domain.py @@ -3,6 +3,10 @@ from django import forms from django.forms import formset_factory +from phonenumber_field.widgets import RegionalPhoneNumberWidget + +from ..models import Contact + class DomainAddUserForm(forms.Form): @@ -29,3 +33,42 @@ class DomainSecurityEmailForm(forms.Form): """Form for adding or editing a security email to a domain.""" security_email = forms.EmailField(label="Security email") + + +class ContactForm(forms.ModelForm): + + """Form for updating contacts.""" + + class Meta: + model = Contact + fields = ["first_name", "middle_name", "last_name", "title", "email", "phone"] + widgets = { + "first_name": forms.TextInput, + "middle_name": forms.TextInput, + "last_name": forms.TextInput, + "title": forms.TextInput, + "email": forms.EmailInput, + "phone": RegionalPhoneNumberWidget, + } + + # the database fields have blank=True so ModelForm doesn't create + # required fields by default. Use this list in __init__ to mark each + # of these fields as required + required = [ + "first_name", + "last_name", + "title", + "email", + "phone" + ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # take off maxlength attribute for the phone number field + # which interferes with out input_with_errors template tag + self.fields['phone'].widget.attrs.pop('maxlength', None) + + for field_name in self.required: + self.fields[field_name].required = True + + diff --git a/src/registrar/models/contact.py b/src/registrar/models/contact.py index d5d32a7ae..cbfde7a23 100644 --- a/src/registrar/models/contact.py +++ b/src/registrar/models/contact.py @@ -20,6 +20,7 @@ class Contact(TimeStampedModel): null=True, blank=True, help_text="First name", + verbose_name="first name / given name", db_index=True, ) middle_name = models.TextField( @@ -31,12 +32,14 @@ class Contact(TimeStampedModel): null=True, blank=True, help_text="Last name", + verbose_name="last name / family name", db_index=True, ) title = models.TextField( null=True, blank=True, help_text="Title", + verbose_name="title or role in your organization", ) email = models.TextField( null=True, diff --git a/src/registrar/templates/domain_sidebar.html b/src/registrar/templates/domain_sidebar.html index 46a87ba76..939c925cc 100644 --- a/src/registrar/templates/domain_sidebar.html +++ b/src/registrar/templates/domain_sidebar.html @@ -40,7 +40,7 @@
  • - {% url 'todo' as url %} + {% url 'domain-your-contact-information' pk=domain.id as url %} diff --git a/src/registrar/templates/domain_your_contact_information.html b/src/registrar/templates/domain_your_contact_information.html new file mode 100644 index 000000000..e18deeb50 --- /dev/null +++ b/src/registrar/templates/domain_your_contact_information.html @@ -0,0 +1,35 @@ +{% extends "domain_base.html" %} +{% load static field_helpers %} + +{% block title %}Domain contact information | {{ domain.name }} | {% endblock %} + +{% block domain_content %} + +

    Domain contact information

    + +

    If you’d like us to use a different name, email, or phone number you can make those changes below. Changing your contact information here won’t affect your Login.gov account information.

    + + {% include "includes/required_fields.html" %} + +
    + {% csrf_token %} + + {% input_with_errors form.first_name %} + + {% input_with_errors form.middle_name %} + + {% input_with_errors form.last_name %} + + {% input_with_errors form.title %} + + {% input_with_errors form.email %} + + {% input_with_errors form.phone %} + + +
    + +{% endblock %} {# domain_content #} diff --git a/src/registrar/views/__init__.py b/src/registrar/views/__init__.py index 820d0295d..758d04d72 100644 --- a/src/registrar/views/__init__.py +++ b/src/registrar/views/__init__.py @@ -2,6 +2,7 @@ from .application import * from .domain import ( DomainView, DomainNameserversView, + DomainYourContactInformationView, DomainSecurityEmailView, DomainUsersView, DomainAddUserView, diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py index d0fa8952e..ec720ed25 100644 --- a/src/registrar/views/domain.py +++ b/src/registrar/views/domain.py @@ -10,9 +10,9 @@ from django.urls import reverse from django.views.generic import DetailView from django.views.generic.edit import DeleteView, FormMixin -from registrar.models import Domain, DomainInvitation, User, UserDomainRole +from registrar.models import Domain, DomainInvitation, User, UserDomainRole, DomainInformation -from ..forms import DomainAddUserForm, NameserverFormset, DomainSecurityEmailForm +from ..forms import DomainAddUserForm, NameserverFormset, DomainSecurityEmailForm, ContactForm from ..utility.email import send_templated_email, EmailSendingError from .utility import DomainPermission @@ -44,7 +44,7 @@ class DomainNameserversView(DomainPermission, FormMixin, DetailView): return [{"server": server} for server in domain.nameservers()] def get_success_url(self): - """Redirect to the overview page for the domain.""" + """Redirect to the nameservers page for the domain.""" return reverse("domain-nameservers", kwargs={"pk": self.object.pk}) def get_context_data(self, **kwargs): @@ -94,6 +94,64 @@ class DomainNameserversView(DomainPermission, FormMixin, DetailView): ) # superclass has the redirect return super().form_valid(formset) + + +class DomainYourContactInformationView(DomainPermission, FormMixin, DetailView): + + """Domain your contact information editing view.""" + + model = Domain + template_name = "domain_your_contact_information.html" + context_object_name = "domain" + form_class = ContactForm + + # def get_initial(self): + # """The initial value for the form.""" + # domainInformation = self.get_object() + # initial = super().get_initial() + # initial["first_name"] = domainInformation.submitter.first_name + # initial["middle_name"] = domainInformation.submitter.middle_name + # initial["last_name"] = domainInformation.submitter.last_name + # initial["title"] = domainInformation.submitter.title + # initial["email"] = domainInformation.submitter.email + # initial["phone"] = domainInformation.submitter.phone + # return initial + + def get_form_kwargs(self, *args, **kwargs): + """Add domain_info.submitter instance to make a bound form.""" + form_kwargs = super().get_form_kwargs(*args, **kwargs) + form_kwargs["instance"] = self.get_object().domain_info.submitter + return form_kwargs + + def get_success_url(self): + """Redirect to the your contact information for the domain.""" + return reverse("domain-your-contact-information", kwargs={"pk": self.object.pk}) + + def post(self, request, *args, **kwargs): + """Form submission posts to this view.""" + self.object = self.get_object() + form = self.get_form() + if form.is_valid(): + # there is a valid email address in the form + return self.form_valid(form) + else: + return self.form_invalid(form) + + def form_valid(self, form): + """The form is valid, call setter in model.""" + + # Post to DB using values from the form + # new_email = form.cleaned_data["security_email"] + # domain = self.get_object() + # domain.set_security_email(new_email) + domain = self.get_object() + form.save() + + messages.success( + self.request, "Your contact information for this domain have been updated." + ) + # superclass has the redirect + return super().form_valid(form) class DomainSecurityEmailView(DomainPermission, FormMixin, DetailView): @@ -113,11 +171,11 @@ class DomainSecurityEmailView(DomainPermission, FormMixin, DetailView): return initial def get_success_url(self): - """Redirect to the overview page for the domain.""" + """Redirect to the security email page for the domain.""" return reverse("domain-security-email", kwargs={"pk": self.object.pk}) def post(self, request, *args, **kwargs): - """Formset submission posts to this view.""" + """Form submission posts to this view.""" self.object = self.get_object() form = self.get_form() if form.is_valid(): diff --git a/src/zap.conf b/src/zap.conf index ee92e8a1c..6a5e9bf77 100644 --- a/src/zap.conf +++ b/src/zap.conf @@ -52,6 +52,7 @@ 10038 OUTOFSCOPE http://app:8080/users 10038 OUTOFSCOPE http://app:8080/users/add 10038 OUTOFSCOPE http://app:8080/nameservers +10038 OUTOFSCOPE http://app:8080/your-contact-information 10038 OUTOFSCOPE http://app:8080/security-email 10038 OUTOFSCOPE http://app:8080/delete 10038 OUTOFSCOPE http://app:8080/withdraw From 1876f08ca655001c60c2bad01368a18678ce1cc2 Mon Sep 17 00:00:00 2001 From: rachidatecs Date: Mon, 22 May 2023 14:48:50 -0400 Subject: [PATCH 3/9] Fix view assignment in urls config --- src/registrar/config/urls.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/registrar/config/urls.py b/src/registrar/config/urls.py index 2cecd6492..1b47a362f 100644 --- a/src/registrar/config/urls.py +++ b/src/registrar/config/urls.py @@ -84,9 +84,9 @@ urlpatterns = [ name="domain-nameservers", ), path( - "domain//contact-information", - views.DomainSecurityEmailView.as_view(), - name="domain-contact-information", + "domain//your-contact-information", + views.DomainYourContactInformationView.as_view(), + name="domain-your-contact-information", ), path( "domain//security-email", From b3d4631d45346379dd7b84c5a403f584dc20aaf8 Mon Sep 17 00:00:00 2001 From: rachidatecs Date: Tue, 23 May 2023 18:51:52 -0400 Subject: [PATCH 4/9] Clean up and add unit tests --- src/registrar/forms/__init__.py | 7 ++- src/registrar/forms/domain.py | 16 ++---- src/registrar/tests/test_views.py | 90 ++++++++++++++++--------------- src/registrar/views/domain.py | 36 ++++++------- 4 files changed, 73 insertions(+), 76 deletions(-) diff --git a/src/registrar/forms/__init__.py b/src/registrar/forms/__init__.py index 7571ee763..364740211 100644 --- a/src/registrar/forms/__init__.py +++ b/src/registrar/forms/__init__.py @@ -1,2 +1,7 @@ from .application_wizard import * -from .domain import DomainAddUserForm, NameserverFormset, DomainSecurityEmailForm, ContactForm +from .domain import ( + DomainAddUserForm, + NameserverFormset, + DomainSecurityEmailForm, + ContactForm, +) diff --git a/src/registrar/forms/domain.py b/src/registrar/forms/domain.py index f8e195360..be26296f4 100644 --- a/src/registrar/forms/domain.py +++ b/src/registrar/forms/domain.py @@ -33,8 +33,8 @@ class DomainSecurityEmailForm(forms.Form): """Form for adding or editing a security email to a domain.""" security_email = forms.EmailField(label="Security email") - - + + class ContactForm(forms.ModelForm): """Form for updating contacts.""" @@ -54,21 +54,13 @@ class ContactForm(forms.ModelForm): # the database fields have blank=True so ModelForm doesn't create # required fields by default. Use this list in __init__ to mark each # of these fields as required - required = [ - "first_name", - "last_name", - "title", - "email", - "phone" - ] + required = ["first_name", "last_name", "title", "email", "phone"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # take off maxlength attribute for the phone number field # which interferes with out input_with_errors template tag - self.fields['phone'].widget.attrs.pop('maxlength', None) + self.fields["phone"].widget.attrs.pop("maxlength", None) for field_name in self.required: self.fields[field_name].required = True - - diff --git a/src/registrar/tests/test_views.py b/src/registrar/tests/test_views.py index ee83034e1..d1ef2b41d 100644 --- a/src/registrar/tests/test_views.py +++ b/src/registrar/tests/test_views.py @@ -13,6 +13,7 @@ import boto3_mocking # type: ignore from registrar.models import ( DomainApplication, Domain, + DomainInformation, DomainInvitation, Contact, Website, @@ -1029,12 +1030,16 @@ class TestWithDomainPermissions(TestWithUser): def setUp(self): super().setUp() self.domain, _ = Domain.objects.get_or_create(name="igorville.gov") + self.domain_information, _ = DomainInformation.objects.get_or_create( + creator=self.user, domain=self.domain + ) self.role, _ = UserDomainRole.objects.get_or_create( user=self.user, domain=self.domain, role=UserDomainRole.Roles.ADMIN ) def tearDown(self): try: + self.domain_information.delete() self.domain.delete() self.role.delete() except ValueError: # pass if already deleted @@ -1045,55 +1050,37 @@ class TestWithDomainPermissions(TestWithUser): class TestDomainPermissions(TestWithDomainPermissions): def test_not_logged_in(self): """Not logged in gets a redirect to Login.""" - response = self.client.get(reverse("domain", kwargs={"pk": self.domain.id})) - self.assertEqual(response.status_code, 302) - - response = self.client.get( - reverse("domain-users", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 302) - - response = self.client.get( - reverse("domain-users-add", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 302) - - response = self.client.get( - reverse("domain-nameservers", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 302) - - response = self.client.get( - reverse("domain-security-email", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 302) + for view_name in [ + "domain", + "domain-users", + "domain-users-add", + "domain-nameservers", + "domain-your-contact-information" "domain-security-email", + ]: + with self.subTest(view_name=view_name): + response = self.client.get( + reverse(view_name, kwargs={"pk": self.domain.id}) + ) + self.assertEqual(response.status_code, 302) def test_no_domain_role(self): """Logged in but no role gets 403 Forbidden.""" self.client.force_login(self.user) self.role.delete() # user no longer has a role on this domain - with less_console_noise(): - response = self.client.get(reverse("domain", kwargs={"pk": self.domain.id})) - self.assertEqual(response.status_code, 403) - - with less_console_noise(): - response = self.client.get( - reverse("domain-users", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 403) - - with less_console_noise(): - response = self.client.get( - reverse("domain-users-add", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 403) - - with less_console_noise(): - response = self.client.get( - reverse("domain-nameservers", kwargs={"pk": self.domain.id}) - ) - self.assertEqual(response.status_code, 403) + for view_name in [ + "domain", + "domain-users", + "domain-users-add", + "domain-nameservers", + "domain-your-contact-information" "domain-security-email", + ]: + with self.subTest(view_name=view_name): + with less_console_noise(): + response = self.client.get( + reverse(view_name, kwargs={"pk": self.domain.id}) + ) + self.assertEqual(response.status_code, 403) class TestDomainDetail(TestWithDomainPermissions, WebTest): @@ -1287,6 +1274,23 @@ class TestDomainDetail(TestWithDomainPermissions, WebTest): # the field. self.assertContains(result, "This field is required", count=2, status_code=200) + def test_domain_your_contact_information(self): + """Can load domain's your contact information page.""" + page = self.client.get( + reverse("domain-your-contact-information", kwargs={"pk": self.domain.id}) + ) + self.assertContains(page, "Domain contact information") + + def test_domain_your_contact_information(self): + """Your contact information appears on the page.""" + self.domain_information.submitter = Contact(first_name="Testy") + self.domain_information.submitter.save() + self.domain_information.save() + page = self.app.get( + reverse("domain-your-contact-information", kwargs={"pk": self.domain.id}) + ) + self.assertContains(page, "Testy") + def test_domain_security_email(self): """Can load domain's security email page.""" page = self.client.get( diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py index ec720ed25..f0337a36c 100644 --- a/src/registrar/views/domain.py +++ b/src/registrar/views/domain.py @@ -10,9 +10,20 @@ from django.urls import reverse from django.views.generic import DetailView from django.views.generic.edit import DeleteView, FormMixin -from registrar.models import Domain, DomainInvitation, User, UserDomainRole, DomainInformation +from registrar.models import ( + Domain, + DomainInvitation, + User, + UserDomainRole, + DomainInformation, +) -from ..forms import DomainAddUserForm, NameserverFormset, DomainSecurityEmailForm, ContactForm +from ..forms import ( + DomainAddUserForm, + NameserverFormset, + DomainSecurityEmailForm, + ContactForm, +) from ..utility.email import send_templated_email, EmailSendingError from .utility import DomainPermission @@ -94,8 +105,8 @@ class DomainNameserversView(DomainPermission, FormMixin, DetailView): ) # superclass has the redirect return super().form_valid(formset) - - + + class DomainYourContactInformationView(DomainPermission, FormMixin, DetailView): """Domain your contact information editing view.""" @@ -104,19 +115,7 @@ class DomainYourContactInformationView(DomainPermission, FormMixin, DetailView): template_name = "domain_your_contact_information.html" context_object_name = "domain" form_class = ContactForm - - # def get_initial(self): - # """The initial value for the form.""" - # domainInformation = self.get_object() - # initial = super().get_initial() - # initial["first_name"] = domainInformation.submitter.first_name - # initial["middle_name"] = domainInformation.submitter.middle_name - # initial["last_name"] = domainInformation.submitter.last_name - # initial["title"] = domainInformation.submitter.title - # initial["email"] = domainInformation.submitter.email - # initial["phone"] = domainInformation.submitter.phone - # return initial - + def get_form_kwargs(self, *args, **kwargs): """Add domain_info.submitter instance to make a bound form.""" form_kwargs = super().get_form_kwargs(*args, **kwargs) @@ -141,9 +140,6 @@ class DomainYourContactInformationView(DomainPermission, FormMixin, DetailView): """The form is valid, call setter in model.""" # Post to DB using values from the form - # new_email = form.cleaned_data["security_email"] - # domain = self.get_object() - # domain.set_security_email(new_email) domain = self.get_object() form.save() From 9453c6dae166d8c45238b46189611beb6da07b1b Mon Sep 17 00:00:00 2001 From: rachidatecs Date: Tue, 23 May 2023 18:59:14 -0400 Subject: [PATCH 5/9] migrations --- ...t_name_alter_contact_last_name_and_more.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py diff --git a/src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py b/src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py new file mode 100644 index 000000000..355ab2748 --- /dev/null +++ b/src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2 on 2023-05-23 22:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("registrar", "0020_remove_domaininformation_security_email"), + ] + + operations = [ + migrations.AlterField( + model_name="contact", + name="first_name", + field=models.TextField( + blank=True, + db_index=True, + help_text="First name", + null=True, + verbose_name="first name / given name", + ), + ), + migrations.AlterField( + model_name="contact", + name="last_name", + field=models.TextField( + blank=True, + db_index=True, + help_text="Last name", + null=True, + verbose_name="last name / family name", + ), + ), + migrations.AlterField( + model_name="contact", + name="title", + field=models.TextField( + blank=True, + help_text="Title", + null=True, + verbose_name="title or role in your organization", + ), + ), + ] From 968d1818e5ab1537c0bce760c8ff0916a7730f34 Mon Sep 17 00:00:00 2001 From: rachidatecs Date: Tue, 23 May 2023 19:11:51 -0400 Subject: [PATCH 6/9] Clean up --- src/registrar/tests/test_views.py | 8 +++++--- src/registrar/views/domain.py | 2 -- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/registrar/tests/test_views.py b/src/registrar/tests/test_views.py index 887082b0b..1a0c5171b 100644 --- a/src/registrar/tests/test_views.py +++ b/src/registrar/tests/test_views.py @@ -1055,7 +1055,8 @@ class TestDomainPermissions(TestWithDomainPermissions): "domain-users", "domain-users-add", "domain-nameservers", - "domain-your-contact-information" "domain-security-email", + "domain-your-contact-information", + "domain-security-email", ]: with self.subTest(view_name=view_name): response = self.client.get( @@ -1073,7 +1074,8 @@ class TestDomainPermissions(TestWithDomainPermissions): "domain-users", "domain-users-add", "domain-nameservers", - "domain-your-contact-information" "domain-security-email", + "domain-your-contact-information", + "domain-security-email", ]: with self.subTest(view_name=view_name): with less_console_noise(): @@ -1287,7 +1289,7 @@ class TestDomainDetail(TestWithDomainPermissions, WebTest): ) self.assertContains(page, "Domain contact information") - def test_domain_your_contact_information(self): + def test_domain_your_contact_information_content(self): """Your contact information appears on the page.""" self.domain_information.submitter = Contact(first_name="Testy") self.domain_information.submitter.save() diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py index 178475afd..33ce8d8eb 100644 --- a/src/registrar/views/domain.py +++ b/src/registrar/views/domain.py @@ -15,7 +15,6 @@ from registrar.models import ( DomainInvitation, User, UserDomainRole, - DomainInformation, ) from ..forms import ( @@ -140,7 +139,6 @@ class DomainYourContactInformationView(DomainPermission, FormMixin, DetailView): """The form is valid, call setter in model.""" # Post to DB using values from the form - domain = self.get_object() form.save() messages.success( From cd7b08ccdacb0093826c41031e67fc5464f9a998 Mon Sep 17 00:00:00 2001 From: Alysia Broddrick Date: Wed, 31 May 2023 11:41:40 -0700 Subject: [PATCH 7/9] fixed typos --- src/registrar/forms/domain.py | 2 +- src/registrar/views/domain.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/registrar/forms/domain.py b/src/registrar/forms/domain.py index be26296f4..3668c3018 100644 --- a/src/registrar/forms/domain.py +++ b/src/registrar/forms/domain.py @@ -59,7 +59,7 @@ class ContactForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # take off maxlength attribute for the phone number field - # which interferes with out input_with_errors template tag + # which interferes with our input_with_errors template tag self.fields["phone"].widget.attrs.pop("maxlength", None) for field_name in self.required: diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py index 33ce8d8eb..c5d6b1721 100644 --- a/src/registrar/views/domain.py +++ b/src/registrar/views/domain.py @@ -142,7 +142,7 @@ class DomainYourContactInformationView(DomainPermission, FormMixin, DetailView): form.save() messages.success( - self.request, "Your contact information for this domain have been updated." + self.request, "Your contact information for this domain has been updated." ) # superclass has the redirect return super().form_valid(form) From 32545ab75cc99a22db8994c41db4aeb5901d6109 Mon Sep 17 00:00:00 2001 From: Alysia Broddrick Date: Wed, 31 May 2023 16:11:28 -0700 Subject: [PATCH 8/9] resolved migrations with non-sequential numbering --- ...er_contact_first_name_alter_contact_last_name_and_more.py} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/registrar/migrations/{0021_alter_contact_first_name_alter_contact_last_name_and_more.py => 0023_alter_contact_first_name_alter_contact_last_name_and_more.py} (89%) diff --git a/src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py b/src/registrar/migrations/0023_alter_contact_first_name_alter_contact_last_name_and_more.py similarity index 89% rename from src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py rename to src/registrar/migrations/0023_alter_contact_first_name_alter_contact_last_name_and_more.py index 355ab2748..b2259f650 100644 --- a/src/registrar/migrations/0021_alter_contact_first_name_alter_contact_last_name_and_more.py +++ b/src/registrar/migrations/0023_alter_contact_first_name_alter_contact_last_name_and_more.py @@ -1,11 +1,11 @@ -# Generated by Django 4.2 on 2023-05-23 22:54 +# Generated by Django 4.2.1 on 2023-05-31 23:09 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ("registrar", "0020_remove_domaininformation_security_email"), + ("registrar", "0022_draftdomain_domainapplication_approved_domain_and_more"), ] operations = [ From d4b4cc6ea78d1f651c3a38080d2d30fc731282f1 Mon Sep 17 00:00:00 2001 From: Alysia Broddrick Date: Wed, 31 May 2023 16:18:30 -0700 Subject: [PATCH 9/9] removed unused import from merge --- src/registrar/views/domain.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py index b9231e846..d101b46b7 100644 --- a/src/registrar/views/domain.py +++ b/src/registrar/views/domain.py @@ -15,7 +15,6 @@ from django.urls import reverse from django.views.generic.edit import FormMixin from registrar.models import ( - Domain, DomainInvitation, User, UserDomainRole, @@ -109,7 +108,7 @@ class DomainNameserversView(DomainPermissionView, FormMixin): class DomainYourContactInformationView(DomainPermissionView, FormMixin): """Domain your contact information editing view.""" - + template_name = "domain_your_contact_information.html" form_class = ContactForm