Skip to content

Commit

Permalink
refactor(eligibility/confirm): simpler form context
Browse files Browse the repository at this point in the history
  • Loading branch information
thekaveman committed Aug 15, 2023
1 parent d4bf066 commit 80723e3
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 32 deletions.
7 changes: 3 additions & 4 deletions benefits/eligibility/templates/eligibility/confirm.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
{% extends "core/base.html" %}
{% load i18n %}

{% block page-title %}
{% translate title %}
{{ form.title }}
{% endblock page-title %}

{% block nav-buttons %}
Expand All @@ -12,12 +11,12 @@

{% block headline %}
<div class="col-lg-8">
<h1>{% translate headline %}</h1>
<h1>{{ form.headline }}</h1>
</div>
{% endblock headline %}

{% block explanatory-text %}
<p class="pt-4 pb-4 pb-lg-8">{% translate blurb %}</p>
<p class="pt-4 pb-4 pb-lg-8">{{ form.blurb }}</p>
{% endblock explanatory-text %}

{% block inner-content %}
Expand Down
12 changes: 4 additions & 8 deletions benefits/eligibility/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,10 @@ def confirm(request):
else:
return redirect(unverified_view)

form = verifier.form_instance()

# GET/POST for Eligibility API verification
context = {
"title": verifier.form_title,
"headline": verifier.form_headline,
"blurb": verifier.form_blurb,
"form": forms.EligibilityVerificationForm(auto_id=True, label_suffix="", verifier=verifier),
}
context = {"form": form}

# GET from an unverified user, present the form
if request.method == "GET":
Expand All @@ -126,12 +123,11 @@ def confirm(request):
elif request.method == "POST":
analytics.started_eligibility(request, types_to_verify)

form = forms.EligibilityVerificationForm(data=request.POST, verifier=verifier)
form = verifier.form_instance(data=request.POST)
# form was not valid, allow for correction/resubmission
if not form.is_valid():
if recaptcha.has_error(form):
messages.error(request, "Recaptcha failed. Please try again.")

context["form"] = form
return TemplateResponse(request, TEMPLATE_CONFIRM, context)

Expand Down
69 changes: 49 additions & 20 deletions tests/pytest/eligibility/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from benefits.core.middleware import TEMPLATE_USER_ERROR
import benefits.core.session
from benefits.eligibility.forms import EligibilityVerifierSelectionForm
from benefits.eligibility.forms import EligibilityVerifierSelectionForm, EligibilityVerificationForm
from benefits.eligibility.views import (
ROUTE_INDEX,
ROUTE_START,
Expand All @@ -18,16 +18,6 @@
import benefits.eligibility.views


@pytest.fixture
def form_data():
return {"sub": "A1234567", "name": "Person"}


@pytest.fixture
def invalid_form_data():
return {"invalid": "data"}


@pytest.fixture
def mocked_analytics_module(mocked_analytics_module):
return mocked_analytics_module(benefits.eligibility.views)
Expand All @@ -48,11 +38,46 @@ def session_logout_spy(mocker):


@pytest.fixture
def mocked_verifier_form(mocker):
def mocked_verifier_selection_form(mocker):
mock_form = mocker.Mock(spec=EligibilityVerifierSelectionForm)
mocker.patch("benefits.eligibility.views.forms.EligibilityVerifierSelectionForm", return_value=mock_form)


@pytest.fixture
def form_data():
return {"sub": "A1234567", "name": "Person"}


@pytest.fixture
def invalid_form_data():
return {"invalid": "data"}


class TestVerificationForm(EligibilityVerificationForm):
def __init__(self, *args, **kwargs):
super().__init__(
"title",
"headline",
"blurb",
"name_label",
"name_placeholder",
"name_help_text",
"sub_label",
"sub_placeholder",
"sub_help_text",
*args,
**kwargs,
)


@pytest.fixture
def model_EligibilityVerifier_with_form_class(mocker, model_EligibilityVerifier):
model_EligibilityVerifier.form_class = f"{__name__}.TestVerificationForm"
model_EligibilityVerifier.save()
mocker.patch("benefits.eligibility.views.session.verifier", return_value=model_EligibilityVerifier)
return model_EligibilityVerifier


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_session_agency")
def test_index_get_agency_multiple_verifiers(
Expand Down Expand Up @@ -141,7 +166,7 @@ def test_index_calls_session_logout(client, session_logout_spy):


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_session_agency", "mocked_verifier_form", "mocked_session_verifier_auth_required")
@pytest.mark.usefixtures("mocked_session_agency", "mocked_verifier_selection_form", "mocked_session_verifier_auth_required")
def test_start_verifier_auth_required_logged_in(mocker, client):
mock_session = mocker.patch("benefits.eligibility.views.session")
mock_session.logged_in.return_value = True
Expand All @@ -153,7 +178,7 @@ def test_start_verifier_auth_required_logged_in(mocker, client):


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_session_agency", "mocked_verifier_form", "mocked_session_verifier_auth_required")
@pytest.mark.usefixtures("mocked_session_agency", "mocked_verifier_selection_form", "mocked_session_verifier_auth_required")
def test_start_verifier_auth_required_not_logged_in(mocker, client):
mock_session = mocker.patch("benefits.eligibility.views.session")
mock_session.logged_in.return_value = False
Expand All @@ -165,7 +190,9 @@ def test_start_verifier_auth_required_not_logged_in(mocker, client):


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_session_agency", "mocked_verifier_form", "mocked_session_verifier_auth_not_required")
@pytest.mark.usefixtures(
"mocked_session_agency", "mocked_verifier_selection_form", "mocked_session_verifier_auth_not_required"
)
def test_start_verifier_auth_not_required(client):
path = reverse(ROUTE_START)
response = client.get(path)
Expand Down Expand Up @@ -233,7 +260,7 @@ def test_confirm_get_oauth_unverified(mocker, client):


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_eligibility_auth_request")
@pytest.mark.usefixtures("mocked_eligibility_auth_request", "model_EligibilityVerifier_with_form_class")
def test_confirm_post_invalid_form(client, invalid_form_data, mocked_analytics_module):
path = reverse(ROUTE_CONFIRM)
response = client.post(path, invalid_form_data)
Expand All @@ -244,7 +271,9 @@ def test_confirm_post_invalid_form(client, invalid_form_data, mocked_analytics_m


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_analytics_module", "mocked_eligibility_auth_request")
@pytest.mark.usefixtures(
"mocked_analytics_module", "mocked_eligibility_auth_request", "model_EligibilityVerifier_with_form_class"
)
def test_confirm_post_recaptcha_fail(mocker, client, invalid_form_data):
mocker.patch("benefits.eligibility.views.recaptcha.has_error", return_value=True)
messages = mocker.spy(benefits.eligibility.views, "messages")
Expand All @@ -258,7 +287,7 @@ def test_confirm_post_recaptcha_fail(mocker, client, invalid_form_data):


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_eligibility_auth_request")
@pytest.mark.usefixtures("mocked_eligibility_auth_request", "model_EligibilityVerifier_with_form_class")
def test_confirm_post_valid_form_eligibility_error(mocker, client, form_data, mocked_analytics_module):
mocker.patch("benefits.eligibility.verify.eligibility_from_api", return_value=None)

Expand All @@ -271,7 +300,7 @@ def test_confirm_post_valid_form_eligibility_error(mocker, client, form_data, mo


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_eligibility_auth_request")
@pytest.mark.usefixtures("mocked_eligibility_auth_request", "model_EligibilityVerifier_with_form_class")
def test_confirm_post_valid_form_eligibility_unverified(mocker, client, form_data):
mocker.patch("benefits.eligibility.verify.eligibility_from_api", return_value=[])

Expand All @@ -283,7 +312,7 @@ def test_confirm_post_valid_form_eligibility_unverified(mocker, client, form_dat


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_eligibility_auth_request")
@pytest.mark.usefixtures("mocked_eligibility_auth_request", "model_EligibilityVerifier_with_form_class")
def test_confirm_post_valid_form_eligibility_verified(
mocker, client, form_data, mocked_session_eligibility, mocked_session_update, mocked_analytics_module
):
Expand Down

0 comments on commit 80723e3

Please sign in to comment.