Merge pull request #323 from cisagov/sspj/review-application

Review application
This commit is contained in:
Seamus Johnston 2022-12-14 14:14:09 +00:00 committed by GitHub
commit 362c93b1f5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 289 additions and 93 deletions

View file

@ -79,17 +79,22 @@ class OrganizationContactForm(RegistrarForm):
required=False, required=False,
choices=DomainApplication.AGENCY_CHOICES, choices=DomainApplication.AGENCY_CHOICES,
) )
organization_name = forms.CharField(label="Organization name") organization_name = forms.CharField(label="Organization Name")
address_line1 = forms.CharField(label="Address line 1") address_line1 = forms.CharField(label="Street address")
address_line2 = forms.CharField( address_line2 = forms.CharField(
required=False, required=False,
label="Address line 2", label="Street address line 2",
) )
city = forms.CharField(label="City")
state_territory = forms.ChoiceField( state_territory = forms.ChoiceField(
label="State/territory", label="State, territory, or military post",
choices=[("", "--Select--")] + DomainApplication.StateTerritoryChoices.choices, choices=[("", "--Select--")] + DomainApplication.StateTerritoryChoices.choices,
) )
zipcode = forms.CharField(label="ZIP code") zipcode = forms.CharField(label="ZIP code")
urbanization = forms.CharField(
required=False,
label="Urbanization (Puerto Rico only)",
)
class AuthorizingOfficialForm(RegistrarForm): class AuthorizingOfficialForm(RegistrarForm):
@ -415,6 +420,10 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
context["form_titles"] = TITLES context["form_titles"] = TITLES
if self.steps.current == Step.ORGANIZATION_CONTACT: if self.steps.current == Step.ORGANIZATION_CONTACT:
context["is_federal"] = self._is_federal() context["is_federal"] = self._is_federal()
if self.steps.current == Step.REVIEW:
context["step_cls"] = Step
application = self.get_application_object()
context["application"] = application
return context return context
def get_application_object(self) -> DomainApplication: def get_application_object(self) -> DomainApplication:
@ -437,9 +446,7 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
self.storage.extra_data["application_id"] = application.id self.storage.extra_data["application_id"] = application.id
return application return application
def forms_to_database( def form_to_database(self, form: RegistrarForm) -> DomainApplication:
self, forms: dict = None, form: RegistrarForm = None
) -> DomainApplication:
""" """
Unpack the form responses onto the model object properties. Unpack the form responses onto the model object properties.
@ -447,16 +454,8 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
""" """
application = self.get_application_object() application = self.get_application_object()
if forms: if form is not None and hasattr(form, "to_database"):
itr = forms form.to_database(application)
elif form:
itr = {"form": form}
else:
raise TypeError("forms and form cannot both be None")
for form in itr.values():
if form is not None and hasattr(form, "to_database"):
form.to_database(application)
return application return application
@ -467,7 +466,7 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
Do not manipulate the form data here. Do not manipulate the form data here.
""" """
# save progress # save progress
self.forms_to_database(form=form) self.form_to_database(form=form)
return self.get_form_step_data(form) return self.get_form_step_data(form)
def get_form(self, step=None, data=None, files=None): def get_form(self, step=None, data=None, files=None):
@ -507,7 +506,7 @@ class ApplicationWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
def done(self, form_list, form_dict, **kwargs): def done(self, form_list, form_dict, **kwargs):
"""Called when the data for every form is submitted and validated.""" """Called when the data for every form is submitted and validated."""
application = self.forms_to_database(forms=form_dict) application = self.get_application_object()
application.submit() # change the status to submitted application.submit() # change the status to submitted
application.save() application.save()
logger.debug("Application object saved: %s", application.id) logger.debug("Application object saved: %s", application.id)

View file

@ -0,0 +1,30 @@
# Generated by Django 4.1.3 on 2022-12-12 21:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("registrar", "0004_domainapplication_federal_agency"),
]
operations = [
migrations.AddField(
model_name="domainapplication",
name="city",
field=models.TextField(blank=True, help_text="City", null=True),
),
migrations.AddField(
model_name="domainapplication",
name="urbanization",
field=models.TextField(blank=True, help_text="Urbanization", null=True),
),
migrations.AlterField(
model_name="domainapplication",
name="federal_agency",
field=models.TextField(
blank=True, help_text="Top level federal agency", null=True
),
),
]

View file

@ -40,9 +40,14 @@ class Contact(models.Model):
db_index=True, db_index=True,
) )
def get_formatted_name(self):
"""Returns the contact's name in Western order."""
names = [n for n in [self.first_name, self.middle_name, self.last_name] if n]
return " ".join(names) if names else "Unknown"
def __str__(self): def __str__(self):
if self.first_name or self.last_name: if self.first_name or self.last_name:
return f"{self.title or ''} {self.first_name or ''} {self.last_name or ''}" return self.get_formatted_name()
elif self.email: elif self.email:
return self.email return self.email
elif self.pk: elif self.pk:

View file

@ -28,62 +28,69 @@ class DomainApplication(TimeStampedModel):
] ]
class StateTerritoryChoices(models.TextChoices): class StateTerritoryChoices(models.TextChoices):
ALABAMA = "AL", "Alabama" ALABAMA = "AL", "Alabama (AL)"
ALASKA = "AK", "Alaska" ALASKA = "AK", "Alaska (AK)"
ARIZONA = "AZ", "Arizona" AMERICAN_SAMOA = "AS", "American Samoa (AS)"
ARKANSAS = "AR", "Arkansas" ARIZONA = "AZ", "Arizona (AZ)"
CALIFORNIA = "CA", "California" ARKANSAS = "AR", "Arkansas (AR)"
COLORADO = "CO", "Colorado" CALIFORNIA = "CA", "California (CA)"
CONNECTICUT = "CT", "Connecticut" COLORADO = "CO", "Colorado (CO)"
DELAWARE = "DE", "Delaware" CONNECTICUT = "CT", "Connecticut (CT)"
DISTRICT_OF_COLUMBIA = "DC", "District of Columbia" DELAWARE = "DE", "Delaware (DE)"
FLORIDA = "FL", "Florida" DISTRICT_OF_COLUMBIA = "DC", "District of Columbia (DC)"
GEORGIA = "GA", "Georgia" FLORIDA = "FL", "Florida (FL)"
HAWAII = "HI", "Hawaii" GEORGIA = "GA", "Georgia (GA)"
IDAHO = "ID", "Idaho" GUAM = "GU", "Guam (GU)"
ILLINOIS = "IL", "Illinois" HAWAII = "HI", "Hawaii (HI)"
INDIANA = "IN", "Indiana" IDAHO = "ID", "Idaho (ID)"
IOWA = "IA", "Iowa" ILLINOIS = "IL", "Illinois (IL)"
KANSAS = "KS", "Kansas" INDIANA = "IN", "Indiana (IN)"
KENTUCKY = "KY", "Kentucky" IOWA = "IA", "Iowa (IA)"
LOUISIANA = "LA", "Louisiana" KANSAS = "KS", "Kansas (KS)"
MAINE = "ME", "Maine" KENTUCKY = "KY", "Kentucky (KY)"
MARYLAND = "MD", "Maryland" LOUISIANA = "LA", "Louisiana (LA)"
MASSACHUSETTS = "MA", "Massachusetts" MAINE = "ME", "Maine (ME)"
MICHIGAN = "MI", "Michigan" MARYLAND = "MD", "Maryland (MD)"
MINNESOTA = "MN", "Minnesota" MASSACHUSETTS = "MA", "Massachusetts (MA)"
MISSISSIPPI = "MS", "Mississippi" MICHIGAN = "MI", "Michigan (MI)"
MISSOURI = "MO", "Missouri" MINNESOTA = "MN", "Minnesota (MN)"
MONTANA = "MT", "Montana" MISSISSIPPI = "MS", "Mississippi (MS)"
NEBRASKA = "NE", "Nebraska" MISSOURI = "MO", "Missouri (MO)"
NEVADA = "NV", "Nevada" MONTANA = "MT", "Montana (MT)"
NEW_HAMPSHIRE = "NH", "New Hampshire" NEBRASKA = "NE", "Nebraska (NE)"
NEW_JERSEY = "NJ", "New Jersey" NEVADA = "NV", "Nevada (NV)"
NEW_MEXICO = "NM", "New Mexico" NEW_HAMPSHIRE = "NH", "New Hampshire (NH)"
NEW_YORK = "NY", "New York" NEW_JERSEY = "NJ", "New Jersey (NJ)"
NORTH_CAROLINA = "NC", "North Carolina" NEW_MEXICO = "NM", "New Mexico (NM)"
NORTH_DAKOTA = "ND", "North Dakota" NEW_YORK = "NY", "New York (NY)"
OHIO = "OH", "Ohio" NORTH_CAROLINA = "NC", "North Carolina (NC)"
OKLAHOMA = "OK", "Oklahoma" NORTH_DAKOTA = "ND", "North Dakota (ND)"
OREGON = "OR", "Oregon" NORTHERN_MARIANA_ISLANDS = "MP", "Northern Mariana Islands (MP)"
PENNSYLVANIA = "PA", "Pennsylvania" OHIO = "OH", "Ohio (OH)"
RHODE_ISLAND = "RI", "Rhode Island" OKLAHOMA = "OK", "Oklahoma (OK)"
SOUTH_CAROLINA = "SC", "South Carolina" OREGON = "OR", "Oregon (OR)"
SOUTH_DAKOTA = "SD", "South Dakota" PENNSYLVANIA = "PA", "Pennsylvania (PA)"
TENNESSEE = "TN", "Tennessee" PUERTO_RICO = "PR", "Puerto Rico (PR)"
TEXAS = "TX", "Texas" RHODE_ISLAND = "RI", "Rhode Island (RI)"
UTAH = "UT", "Utah" SOUTH_CAROLINA = "SC", "South Carolina (SC)"
VERMONT = "VT", "Vermont" SOUTH_DAKOTA = "SD", "South Dakota (SD)"
VIRGINIA = "VA", "Virginia" TENNESSEE = "TN", "Tennessee (TN)"
WASHINGTON = "WA", "Washington" TEXAS = "TX", "Texas (TX)"
WEST_VIRGINIA = "WV", "West Virginia" UNITED_STATES_MINOR_OUTLYING_ISLANDS = (
WISCONSIN = "WI", "Wisconsin" "UM",
WYOMING = "WY", "Wyoming" "United States Minor Outlying Islands (UM)",
AMERICAN_SAMOA = "AS", "American Samoa" )
GUAM = "GU", "Guam" UTAH = "UT", "Utah (UT)"
NORTHERN_MARIANA_ISLANDS = "MP", "Northern Mariana Islands" VERMONT = "VT", "Vermont (VT)"
PUERTO_RICO = "PR", "Puerto Rico" VIRGIN_ISLANDS = "VI", "Virgin Islands (VI)"
VIRGIN_ISLANDS = "VI", "Virgin Islands" VIRGINIA = "VA", "Virginia (VA)"
WASHINGTON = "WA", "Washington (WA)"
WEST_VIRGINIA = "WV", "West Virginia (WV)"
WISCONSIN = "WI", "Wisconsin (WI)"
WYOMING = "WY", "Wyoming (WY)"
ARMED_FORCES_AA = "AA", "Armed Forces Americas (AA)"
ARMED_FORCES_AE = "AE", "Armed Forces Africa, Canada, Europe, Middle East (AE)"
ARMED_FORCES_AP = "AP", "Armed Forces Pacific (AP)"
class OrganizationChoices(models.TextChoices): class OrganizationChoices(models.TextChoices):
FEDERAL = "federal", "Federal: a federal agency" FEDERAL = "federal", "Federal: a federal agency"
@ -280,7 +287,7 @@ class DomainApplication(TimeStampedModel):
federal_agency = models.TextField( federal_agency = models.TextField(
null=True, null=True,
blank=False, blank=True,
help_text="Top level federal agency", help_text="Top level federal agency",
) )
@ -315,6 +322,11 @@ class DomainApplication(TimeStampedModel):
blank=True, blank=True,
help_text="Address line 2", help_text="Address line 2",
) )
city = models.TextField(
null=True,
blank=True,
help_text="City",
)
state_territory = models.CharField( state_territory = models.CharField(
max_length=2, max_length=2,
null=True, null=True,
@ -328,6 +340,11 @@ class DomainApplication(TimeStampedModel):
help_text="ZIP code", help_text="ZIP code",
db_index=True, db_index=True,
) )
urbanization = models.TextField(
null=True,
blank=True,
help_text="Urbanization",
)
authorizing_official = models.ForeignKey( authorizing_official = models.ForeignKey(
"registrar.Contact", "registrar.Contact",

View file

@ -34,10 +34,14 @@
{{ wizard.form.address_line1|add_class:"usa-input" }} {{ wizard.form.address_line1|add_class:"usa-input" }}
{{ wizard.form.address_line2|add_label_class:"usa-label" }} {{ wizard.form.address_line2|add_label_class:"usa-label" }}
{{ wizard.form.address_line2|add_class:"usa-input" }} {{ wizard.form.address_line2|add_class:"usa-input" }}
{{ wizard.form.city|add_label_class:"usa-label" }}
{{ wizard.form.city|add_class:"usa-input" }}
{{ wizard.form.state_territory|add_label_class:"usa-label" }} {{ wizard.form.state_territory|add_label_class:"usa-label" }}
{{ wizard.form.state_territory|add_class:"usa-select" }} {{ wizard.form.state_territory|add_class:"usa-select" }}
{{ wizard.form.zipcode|add_label_class:"usa-label" }} {{ wizard.form.zipcode|add_label_class:"usa-label" }}
{{ wizard.form.zipcode|add_class:"usa-input usa-input--small" }} {{ wizard.form.zipcode|add_class:"usa-input usa-input--small" }}
{{ wizard.form.urbanization|add_label_class:"usa-label" }}
{{ wizard.form.urbanization|add_class:"usa-input usa-input--small" }}
</fieldset> </fieldset>

View file

@ -8,16 +8,87 @@
{{ wizard.management_form }} {{ wizard.management_form }}
{% csrf_token %} {% csrf_token %}
{% for this_step in wizard.steps.all|slice:":-1" %} {% for step in wizard.steps.all|slice:":-1" %}
<div class="review__step margin-top-2"> <section class="review__step margin-top-205">
<hr />
<div class="review__step__title display-flex flex-justify"> <div class="review__step__title display-flex flex-justify">
<span class="review__step__name">{{ form_titles|get_item:this_step }}</span> <div class="review__step__value">
<a href="{% url wizard.url_name step=this_step %}">Edit </a> <div class="review__step__name">{{ form_titles|get_item:step }}</div>
<div>
{% if step == step_cls.ORGANIZATION_TYPE %}
{{ application.get_organization_type_display|default:"Incomplete" }}
{% endif %}
{% if step == step_cls.ORGANIZATION_FEDERAL %}
{{ application.get_federal_type_display|default:"Incomplete" }}
{% endif %}
{% if step == step_cls.ORGANIZATION_ELECTION %}
{{ application.is_election_board|yesno:"Yes,No,Incomplete" }}
{% endif %}
{% if step == step_cls.ORGANIZATION_CONTACT %}
{% if application.organization_name %}
{% include "includes/organization_address.html" with organization=application %}
{% else %}
Incomplete
{% endif %}
{% endif %}
{% if step == step_cls.AUTHORIZING_OFFICIAL %}
{% if application.authorizing_official %}
{% include "includes/contact.html" with contact=application.authorizing_official %}
{% else %}
Incomplete
{% endif %}
{% endif %}
{% if step == step_cls.CURRENT_SITES %}
<ul class="add-list-reset">
{% for site in application.current_websites.all %}
<li>{{ site.website }}</li>
{% empty %}
<li>None</li>
{% endfor %}
</ul>
{% endif %}
{% if step == step_cls.DOTGOV_DOMAIN %}
<ul class="add-list-reset">
<li>{{ application.requested_domain.name|default:"Incomplete" }}</li>
{% for site in application.alternative_domains.all %}
<li>{{ site.website }}</li>
{% endfor %}
</ul>
{% endif %}
{% if step == step_cls.PURPOSE %}
{{ application.purpose|default:"Incomplete" }}
{% endif %}
{% if step == step_cls.YOUR_CONTACT %}
{% if application.submitter %}
{% include "includes/contact.html" with contact=application.submitter %}
{% else %}
Incomplete
{% endif %}
{% endif %}
{% if step == step_cls.OTHER_CONTACTS %}
{% for other in application.other_contacts.all %}
{% include "includes/contact.html" with contact=other %}
{% empty %}
None
{% endfor %}
{% endif %}
{% if step == step_cls.SECURITY_EMAIL %}
{{ application.security_email|default:"None" }}
{% endif %}
{% if step == step_cls.ANYTHING_ELSE %}
{{ application.anything_else|default:"No" }}
{% endif %}
{% if step == step_cls.REQUIREMENTS %}
{{ application.is_policy_acknowledged|yesno:"Agree,Do not agree,Do not agree" }}
{% endif %}
</div>
</div>
<a
aria-describedby="review_step_title__{{step}}"
href="{% url wizard.url_name step=step %}"
>Edit<span class="sr-only"> {{ form_titles|get_item:step }}</span></a>
</div> </div>
<div class="review__step__value"> </section>
&lt;Answer value&gt;
</div>
</div>
{% endfor %} {% endfor %}
{{ block.super }} {{ block.super }}

View file

@ -0,0 +1,6 @@
<address>
{{ contact.get_formatted_name }}<br />
{% if contact.title %}{{ contact.title }}<br />{% endif %}
{% if contact.email %}{{ contact.email }}<br />{% endif %}
{% if contact.phone %}{{ contact.phone }}{% endif %}
</address>

View file

@ -0,0 +1,25 @@
<address>
{% if organization.organization_name %}
{{ organization.organization_name }}
{% endif %}
{% if organization.address_line1 %}
<br />{{ organization.address_line1 }}
{% endif %}
{% if organization.address_line2 %}
<br />{{ organization.address_line2 }}
{% endif %}
{% if organization.city %}
<br />{{ organization.city }}{% if organization.state_territory %},&nbsp;
{% else %}<br />
{% endif %}
{% endif %}
{% if organization.state_territory %}
{{ organization.state_territory }}
{% endif %}
{% if organization.zipcode %}
<br />{{ organization.zipcode }}
{% endif %}
{% if organization.urbanization %}
<br />{{ organization.urbanization }}
{% endif %}
</address>

View file

@ -183,8 +183,11 @@ class DomainApplicationTests(TestWithUser, WebTest):
org_contact_form = org_contact_page.form org_contact_form = org_contact_page.form
org_contact_form["organization_contact-organization_name"] = "Testorg" org_contact_form["organization_contact-organization_name"] = "Testorg"
org_contact_form["organization_contact-address_line1"] = "address 1" org_contact_form["organization_contact-address_line1"] = "address 1"
org_contact_form["organization_contact-address_line2"] = "address 2"
org_contact_form["organization_contact-city"] = "NYC"
org_contact_form["organization_contact-state_territory"] = "NY" org_contact_form["organization_contact-state_territory"] = "NY"
org_contact_form["organization_contact-zipcode"] = "10002" org_contact_form["organization_contact-zipcode"] = "10002"
org_contact_form["organization_contact-urbanization"] = "URB Royal Oaks"
# test saving the page # test saving the page
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
@ -195,8 +198,11 @@ class DomainApplicationTests(TestWithUser, WebTest):
application = DomainApplication.objects.get() # there's only one application = DomainApplication.objects.get() # there's only one
self.assertEquals(application.organization_name, "Testorg") self.assertEquals(application.organization_name, "Testorg")
self.assertEquals(application.address_line1, "address 1") self.assertEquals(application.address_line1, "address 1")
self.assertEquals(application.address_line2, "address 2")
self.assertEquals(application.city, "NYC")
self.assertEquals(application.state_territory, "NY") self.assertEquals(application.state_territory, "NY")
self.assertEquals(application.zipcode, "10002") self.assertEquals(application.zipcode, "10002")
self.assertEquals(application.urbanization, "URB Royal Oaks")
# test next button # test next button
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
@ -212,8 +218,8 @@ class DomainApplicationTests(TestWithUser, WebTest):
# Follow the redirect to the next form page # Follow the redirect to the next form page
ao_page = org_contact_result.follow() ao_page = org_contact_result.follow()
ao_form = ao_page.form ao_form = ao_page.form
ao_form["authorizing_official-first_name"] = "Testy" ao_form["authorizing_official-first_name"] = "Testy ATO"
ao_form["authorizing_official-last_name"] = "Tester" ao_form["authorizing_official-last_name"] = "Tester ATO"
ao_form["authorizing_official-title"] = "Chief Tester" ao_form["authorizing_official-title"] = "Chief Tester"
ao_form["authorizing_official-email"] = "testy@town.com" ao_form["authorizing_official-email"] = "testy@town.com"
ao_form["authorizing_official-phone"] = "(555) 555 5555" ao_form["authorizing_official-phone"] = "(555) 555 5555"
@ -225,8 +231,8 @@ class DomainApplicationTests(TestWithUser, WebTest):
self.assertEquals(result["Location"], "/register/authorizing_official/") self.assertEquals(result["Location"], "/register/authorizing_official/")
# should see results in db # should see results in db
application = DomainApplication.objects.get() # there's only one application = DomainApplication.objects.get() # there's only one
self.assertEquals(application.authorizing_official.first_name, "Testy") self.assertEquals(application.authorizing_official.first_name, "Testy ATO")
self.assertEquals(application.authorizing_official.last_name, "Tester") self.assertEquals(application.authorizing_official.last_name, "Tester ATO")
self.assertEquals(application.authorizing_official.title, "Chief Tester") self.assertEquals(application.authorizing_official.title, "Chief Tester")
self.assertEquals(application.authorizing_official.email, "testy@town.com") self.assertEquals(application.authorizing_official.email, "testy@town.com")
self.assertEquals(application.authorizing_official.phone, "(555) 555 5555") self.assertEquals(application.authorizing_official.phone, "(555) 555 5555")
@ -294,7 +300,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
# Follow the redirect to the next form page # Follow the redirect to the next form page
purpose_page = dotgov_result.follow() purpose_page = dotgov_result.follow()
purpose_form = purpose_page.form purpose_form = purpose_page.form
purpose_form["purpose-purpose"] = "Purpose of the site" purpose_form["purpose-purpose"] = "For all kinds of things."
# test saving the page # test saving the page
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
@ -303,7 +309,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
self.assertEquals(result["Location"], "/register/purpose/") self.assertEquals(result["Location"], "/register/purpose/")
# should see results in db # should see results in db
application = DomainApplication.objects.get() # there's only one application = DomainApplication.objects.get() # there's only one
self.assertEquals(application.purpose, "Purpose of the site") self.assertEquals(application.purpose, "For all kinds of things.")
# test next button # test next button
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
@ -413,7 +419,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
anything_else_page = security_email_result.follow() anything_else_page = security_email_result.follow()
anything_else_form = anything_else_page.form anything_else_form = anything_else_page.form
anything_else_form["anything_else-anything_else"] = "No" anything_else_form["anything_else-anything_else"] = "Nothing else."
# test saving the page # test saving the page
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
@ -422,7 +428,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
self.assertEquals(result["Location"], "/register/anything_else/") self.assertEquals(result["Location"], "/register/anything_else/")
# should see results in db # should see results in db
application = DomainApplication.objects.get() # there's only one application = DomainApplication.objects.get() # there's only one
self.assertEquals(application.anything_else, "No") self.assertEquals(application.anything_else, "Nothing else.")
# test next button # test next button
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
@ -458,9 +464,42 @@ class DomainApplicationTests(TestWithUser, WebTest):
# ---- REVIEW AND FINSIHED PAGES ---- # ---- REVIEW AND FINSIHED PAGES ----
# Follow the redirect to the next form page # Follow the redirect to the next form page
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
review_page = requirements_result.follow() review_page = requirements_result.follow()
review_form = review_page.form review_form = review_page.form
# Review page contains all the previously entered data
self.assertContains(review_page, "Federal")
self.assertContains(review_page, "Executive")
self.assertContains(review_page, "Testorg")
self.assertContains(review_page, "address 1")
self.assertContains(review_page, "address 2")
self.assertContains(review_page, "NYC")
self.assertContains(review_page, "NY")
self.assertContains(review_page, "10002")
self.assertContains(review_page, "URB Royal Oaks")
self.assertContains(review_page, "Testy ATO")
self.assertContains(review_page, "Tester ATO")
self.assertContains(review_page, "Chief Tester")
self.assertContains(review_page, "testy@town.com")
self.assertContains(review_page, "(555) 555 5555")
self.assertContains(review_page, "city.com")
self.assertContains(review_page, "city.gov")
self.assertContains(review_page, "city1.gov")
self.assertContains(review_page, "For all kinds of things.")
self.assertContains(review_page, "Testy you")
self.assertContains(review_page, "Tester you")
self.assertContains(review_page, "Admin Tester")
self.assertContains(review_page, "testy-admin@town.com")
self.assertContains(review_page, "(555) 555 5556")
self.assertContains(review_page, "Testy2")
self.assertContains(review_page, "Tester2")
self.assertContains(review_page, "Another Tester")
self.assertContains(review_page, "testy2@town.com")
self.assertContains(review_page, "(555) 555 5557")
self.assertContains(review_page, "security@city.com")
self.assertContains(review_page, "Nothing else.")
# test saving the page # test saving the page
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id) self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
result = review_page.form.submit("submit_button", value="save") result = review_page.form.submit("submit_button", value="save")