Unit test skeleton

This commit is contained in:
zandercymatics 2024-05-20 16:08:51 -06:00
parent 4e4d0d0f1e
commit 4c4d5d758e
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
5 changed files with 140 additions and 7 deletions

View file

@ -920,9 +920,11 @@ function hideDeletedForms() {
function showInputOnErrorFields(){
document.addEventListener('DOMContentLoaded', function() {
let form = document.querySelector('.main-content-finish-profile');
let form = document.querySelector("#finish-profile-setup-form");
console.log(`form: ${form}`)
// Get all input elements within the form
let inputs = form ? form.querySelectorAll('input') : null;
let inputs = form ? form.querySelectorAll("input") : null;
console.log(`look: ${inputs}`)
if (!inputs) {
return null;
}
@ -931,6 +933,7 @@ function hideDeletedForms() {
inputs.forEach(function(input) {
let fieldName = input.name;
let errorMessage = document.querySelector(`#id_${fieldName}__error-message`);
console.log(`fieldName: ${inputs} vs err message ${errorMessage}`)
if (!fieldName || !errorMessage) {
return null;
}

View file

@ -33,7 +33,7 @@
</h3>
<div class="usa-summary-box__text">
<ul>
<li>Full name: <b>{{ user.contact.full_name }}</b></li>
<li>Full name: <b>{{ user.contact.get_formatted_name }}</b></li>
<li>Organization email: <b>{{ user.contact.email }}</b></li>
<li>Title or role in your organization: <b>{{ user.contact.title }}</b></li>
<li>Phone: <b>{{ user.contact.phone }}</b></li>

View file

@ -11,7 +11,7 @@
<div class="grid-container">
<div class="grid-row grid-gap">
<div class="tablet:grid-col">
<main id="main-content-finish-profile" class="grid-container">
<main id="main-content" class="grid-container">
{% comment %}
Form success messages.
@ -56,7 +56,7 @@
</p>
{# We use a var called 'remove_margin_top' rather than 'add_margin_top' because most fields use this #}
{% include "includes/required_fields.html" with remove_margin_top=True %}
<form id="step__{{steps.current}}" class="usa-form usa-form--largest" method="post" novalidate>
<form id="finish-profile-setup-form" class="usa-form usa-form--largest" method="post" novalidate>
{% csrf_token %}
<fieldset class="usa-fieldset">
<legend class="usa-sr-only">

View file

@ -20,6 +20,7 @@ from django.urls import reverse
from registrar.models import (
DomainRequest,
DomainInformation,
Website,
)
from waffle.testutils import override_flag
import logging
@ -55,7 +56,14 @@ class TestWithUser(MockEppLib):
last_name = "Last"
email = "info@example.com"
self.user = get_user_model().objects.create(
username=username, first_name=first_name, last_name=last_name, email=email
username=username, first_name=first_name, last_name=last_name, email=email, finished_setup=True
)
username_incomplete = "test_user_incomplete"
first_name_2 = "Incomplete"
email_2 = "unicorn@igorville.com"
self.incomplete_user = get_user_model().objects.create(
username=username_incomplete, first_name=first_name_2, email=email_2, finished_setup=False
)
def tearDown(self):
@ -64,6 +72,7 @@ class TestWithUser(MockEppLib):
DomainRequest.objects.all().delete()
DomainInformation.objects.all().delete()
self.user.delete()
self.incomplete_user.delete()
class TestEnvironmentVariablesEffects(TestCase):
@ -511,6 +520,126 @@ class HomeTests(TestWithUser):
self.assertEqual(response.status_code, 403)
class FinishUserProfileTests(TestWithUser, WebTest):
"""A series of tests that target the finish setup page for user profile"""
def setUp(self):
super().setUp()
self.user.title = None
self.user.finished_setup = False
self.user.save()
self.client.force_login(self.user)
self.domain, _ = Domain.objects.get_or_create(name="sampledomain.gov", state=Domain.State.READY)
self.role, _ = UserDomainRole.objects.get_or_create(
user=self.user, domain=self.domain, role=UserDomainRole.Roles.MANAGER
)
def tearDown(self):
super().tearDown()
PublicContact.objects.filter(domain=self.domain).delete()
self.role.delete()
self.domain.delete()
Domain.objects.all().delete()
Website.objects.all().delete()
Contact.objects.all().delete()
def _set_session_cookie(self):
session_id = self.app.cookies[settings.SESSION_COOKIE_NAME]
self.app.set_cookie(settings.SESSION_COOKIE_NAME, session_id)
def _submit_form_webtest(self, form, **kwargs):
page = form.submit(**kwargs)
self._set_session_cookie()
return page
@less_console_noise_decorator
def test_new_user_with_profile_feature_on(self):
"""Tests that a new user is redirected to the profile setup page when profile_feature is on"""
self.app.set_user(self.incomplete_user.username)
with override_flag("profile_feature", active=True):
# This will redirect the user to the setup page
finish_setup_page = self.app.get(reverse("home")).follow()
self._set_session_cookie()
# Assert that we're on the right page
self.assertContains(finish_setup_page, "Finish setting up your profile")
finish_setup_page = self._submit_form_webtest(finish_setup_page.form)
self.assertEqual(finish_setup_page.status_code, 200)
# We're missing a phone number, so the page should tell us that
self.assertContains(finish_setup_page, "Enter your phone number.")
# Check for the name of the save button
self.assertContains(finish_setup_page, "contact_setup_save_button")
# Add a phone number
finish_setup_form = finish_setup_page.form
finish_setup_form["phone"] = "(201) 555-0123"
finish_setup_form["title"] = "CEO"
finish_setup_form["last_name"] = "example"
#complete_setup_page = self._submit_form_webtest(finish_setup_form).follow()
# Click the "Save" button
complete_setup_page = finish_setup_form.submit(name="contact_setup_save_button").follow()
self._set_session_cookie()
self.assertEqual(complete_setup_page.status_code, 200)
self.assertContains(complete_setup_page, "Manage your domains")
@less_console_noise_decorator
def test_new_user_goes_to_domain_request_with_profile_feature_on(self):
"""Tests that a new user is redirected to the domain request page when profile_feature is on"""
self.app.set_user(self.incomplete_user.username)
with override_flag("profile_feature", active=True):
# This will redirect the user to the setup page
finish_setup_page = self.app.get(reverse("domain-request:")).follow()
self._set_session_cookie()
# Assert that we're on the right page
self.assertContains(finish_setup_page, "Finish setting up your profile")
finish_setup_page = self._submit_form_webtest(finish_setup_page.form)
self.assertEqual(finish_setup_page.status_code, 200)
# We're missing a phone number, so the page should tell us that
self.assertContains(finish_setup_page, "Enter your phone number.")
# Check for the name of the save button
self.assertContains(finish_setup_page, "contact_setup_save_button")
# Add a phone number
finish_setup_form = finish_setup_page.form
finish_setup_form["phone"] = "(201) 555-0123"
finish_setup_form["title"] = "CEO"
finish_setup_form["last_name"] = "example"
complete_setup_page = self._submit_form_webtest(finish_setup_form).follow()
self.assertEqual(complete_setup_page.status_code, 200)
# Assert that we're on the domain request page
self.assertContains(complete_setup_page, "How well reach you")
self.assertContains(complete_setup_page, "Your contact information")
@less_console_noise_decorator
def test_new_user_with_profile_feature_off(self):
"""Tests that a new user is not redirected to the profile setup page when profile_feature is off"""
with override_flag("profile_feature", active=False):
response = self.client.get("/")
self.assertNotContains(response, "Finish setting up your profile")
@less_console_noise_decorator
def test_new_user_goes_to_domain_request_with_profile_feature_off(self):
"""Tests that a new user is redirected to the domain request page
when profile_feature is off but not the setup page"""
with override_flag("profile_feature", active=False):
response = self.client.get("/request/")
self.assertContains(response, "How well reach you")
self.assertContains(response, "Your contact information")
class UserProfileTests(TestWithUser, WebTest):
"""A series of tests that target your profile functionality"""

View file

@ -154,7 +154,7 @@ class FinishProfileSetupView(UserProfileView):
"""
# Update redirect type based on the query parameter if present
redirect_type = request.GET.get("redirect", self.RedirectType.BACK_TO_SELF)
redirect_type = request.GET.get("redirect", str(self.RedirectType.BACK_TO_SELF))
all_redirect_types = [r.value for r in self.RedirectType]
if redirect_type in all_redirect_types:
@ -240,6 +240,7 @@ class FinishProfileSetupView(UserProfileView):
# We only allow this session value to use viewnames,
# because this restricts what can be redirected to.
desired_view = self.session["redirect_viewname"]
self.session.pop("redirect_viewname")
base_url = reverse(desired_view)
else:
base_url = reverse("home")