mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-13 13:09:41 +02:00
Unit test skeleton
This commit is contained in:
parent
4e4d0d0f1e
commit
4c4d5d758e
5 changed files with 140 additions and 7 deletions
|
@ -920,9 +920,11 @@ function hideDeletedForms() {
|
||||||
|
|
||||||
function showInputOnErrorFields(){
|
function showInputOnErrorFields(){
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
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
|
// 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) {
|
if (!inputs) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -931,6 +933,7 @@ function hideDeletedForms() {
|
||||||
inputs.forEach(function(input) {
|
inputs.forEach(function(input) {
|
||||||
let fieldName = input.name;
|
let fieldName = input.name;
|
||||||
let errorMessage = document.querySelector(`#id_${fieldName}__error-message`);
|
let errorMessage = document.querySelector(`#id_${fieldName}__error-message`);
|
||||||
|
console.log(`fieldName: ${inputs} vs err message ${errorMessage}`)
|
||||||
if (!fieldName || !errorMessage) {
|
if (!fieldName || !errorMessage) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
</h3>
|
</h3>
|
||||||
<div class="usa-summary-box__text">
|
<div class="usa-summary-box__text">
|
||||||
<ul>
|
<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>Organization email: <b>{{ user.contact.email }}</b></li>
|
||||||
<li>Title or role in your organization: <b>{{ user.contact.title }}</b></li>
|
<li>Title or role in your organization: <b>{{ user.contact.title }}</b></li>
|
||||||
<li>Phone: <b>{{ user.contact.phone }}</b></li>
|
<li>Phone: <b>{{ user.contact.phone }}</b></li>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<div class="grid-container">
|
<div class="grid-container">
|
||||||
<div class="grid-row grid-gap">
|
<div class="grid-row grid-gap">
|
||||||
<div class="tablet:grid-col">
|
<div class="tablet:grid-col">
|
||||||
<main id="main-content-finish-profile" class="grid-container">
|
<main id="main-content" class="grid-container">
|
||||||
|
|
||||||
{% comment %}
|
{% comment %}
|
||||||
Form success messages.
|
Form success messages.
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
</p>
|
</p>
|
||||||
{# We use a var called 'remove_margin_top' rather than 'add_margin_top' because most fields use this #}
|
{# 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 %}
|
{% 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 %}
|
{% csrf_token %}
|
||||||
<fieldset class="usa-fieldset">
|
<fieldset class="usa-fieldset">
|
||||||
<legend class="usa-sr-only">
|
<legend class="usa-sr-only">
|
||||||
|
|
|
@ -20,6 +20,7 @@ from django.urls import reverse
|
||||||
from registrar.models import (
|
from registrar.models import (
|
||||||
DomainRequest,
|
DomainRequest,
|
||||||
DomainInformation,
|
DomainInformation,
|
||||||
|
Website,
|
||||||
)
|
)
|
||||||
from waffle.testutils import override_flag
|
from waffle.testutils import override_flag
|
||||||
import logging
|
import logging
|
||||||
|
@ -55,7 +56,14 @@ class TestWithUser(MockEppLib):
|
||||||
last_name = "Last"
|
last_name = "Last"
|
||||||
email = "info@example.com"
|
email = "info@example.com"
|
||||||
self.user = get_user_model().objects.create(
|
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):
|
def tearDown(self):
|
||||||
|
@ -64,6 +72,7 @@ class TestWithUser(MockEppLib):
|
||||||
DomainRequest.objects.all().delete()
|
DomainRequest.objects.all().delete()
|
||||||
DomainInformation.objects.all().delete()
|
DomainInformation.objects.all().delete()
|
||||||
self.user.delete()
|
self.user.delete()
|
||||||
|
self.incomplete_user.delete()
|
||||||
|
|
||||||
|
|
||||||
class TestEnvironmentVariablesEffects(TestCase):
|
class TestEnvironmentVariablesEffects(TestCase):
|
||||||
|
@ -511,6 +520,126 @@ class HomeTests(TestWithUser):
|
||||||
self.assertEqual(response.status_code, 403)
|
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 we’ll 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 we’ll reach you")
|
||||||
|
self.assertContains(response, "Your contact information")
|
||||||
|
|
||||||
|
|
||||||
class UserProfileTests(TestWithUser, WebTest):
|
class UserProfileTests(TestWithUser, WebTest):
|
||||||
"""A series of tests that target your profile functionality"""
|
"""A series of tests that target your profile functionality"""
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@ class FinishProfileSetupView(UserProfileView):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Update redirect type based on the query parameter if present
|
# 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]
|
all_redirect_types = [r.value for r in self.RedirectType]
|
||||||
if redirect_type in all_redirect_types:
|
if redirect_type in all_redirect_types:
|
||||||
|
@ -240,6 +240,7 @@ class FinishProfileSetupView(UserProfileView):
|
||||||
# We only allow this session value to use viewnames,
|
# We only allow this session value to use viewnames,
|
||||||
# because this restricts what can be redirected to.
|
# because this restricts what can be redirected to.
|
||||||
desired_view = self.session["redirect_viewname"]
|
desired_view = self.session["redirect_viewname"]
|
||||||
|
self.session.pop("redirect_viewname")
|
||||||
base_url = reverse(desired_view)
|
base_url = reverse(desired_view)
|
||||||
else:
|
else:
|
||||||
base_url = reverse("home")
|
base_url = reverse("home")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue