Skip to content

Commit

Permalink
test: add specs for flows filtered by supported method
Browse files Browse the repository at this point in the history
  • Loading branch information
machikoyasuda committed Oct 1, 2024
1 parent a32e5cb commit 00e1ea3
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
36 changes: 36 additions & 0 deletions tests/pytest/eligibility/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import pytest

from benefits.core import models
from benefits.routes import routes
from benefits.core.middleware import TEMPLATE_USER_ERROR
import benefits.core.session
Expand Down Expand Up @@ -71,6 +72,39 @@ def model_EnrollmentFlow_with_form_class(mocker, model_EnrollmentFlow):
return model_EnrollmentFlow


@pytest.mark.django_db
def test_eligibility_logged_in_filtering_flows(mocker, model_TransitAgency, client):
model_TransitAgency.pk = None
model_TransitAgency.save()
digital = models.EnrollmentFlow.objects.create(
transit_agency=model_TransitAgency,
supported_enrollment_methods=[models.EnrollmentMethods.DIGITAL],
label="Digital",
selection_label_template="eligibility/includes/selection-label.html",
)
in_person = models.EnrollmentFlow.objects.create(
transit_agency=model_TransitAgency,
supported_enrollment_methods=[models.EnrollmentMethods.IN_PERSON],
label="In-Person",
selection_label_template="eligibility/includes/selection-label.html",
)
both = models.EnrollmentFlow.objects.create(
transit_agency=model_TransitAgency,
supported_enrollment_methods=[models.EnrollmentMethods.DIGITAL, models.EnrollmentMethods.IN_PERSON],
label="Both",
selection_label_template="eligibility/includes/selection-label.html",
)
model_TransitAgency.save()
model_TransitAgency.enrollment_flows.add(digital, in_person, both)
mocker.patch("benefits.core.session.agency", autospec=True, return_value=model_TransitAgency)

path = reverse(routes.ELIGIBILITY_INDEX)
response = client.get(path)

assert model_TransitAgency.enrollment_flows.count() == 3
assert len(response.context_data["form"].fields["flow"].choices) == 2


@pytest.mark.django_db
def test_index_get_agency_multiple_flows(mocker, model_TransitAgency, model_EnrollmentFlow, mocked_session_agency, client):
# override the mocked session agency with a mock agency that has multiple flows
Expand All @@ -80,6 +114,7 @@ def test_index_get_agency_multiple_flows(mocker, model_TransitAgency, model_Enro
mock_manager = mocker.Mock()
mock_manager.all.return_value = [model_EnrollmentFlow, model_EnrollmentFlow]
type(mock_agency).enrollment_flows = mocker.PropertyMock(return_value=mock_manager)
type(mock_agency).enrollment_flows.filter.return_value = [model_EnrollmentFlow, model_EnrollmentFlow]

mock_agency.index_url = "/agency"
mock_agency.eligibility_index_template = "eligibility/index.html"
Expand All @@ -103,6 +138,7 @@ def test_index_get_agency_single_flow(mocker, model_TransitAgency, model_Enrollm
mock_manager = mocker.Mock()
mock_manager.all.return_value = [model_EnrollmentFlow]
type(mock_agency).enrollment_flows = mocker.PropertyMock(return_value=mock_manager)
type(mock_agency).enrollment_flows.filter.return_value = [model_EnrollmentFlow]

mock_agency.index_url = "/agency"
mock_agency.eligibility_index_template = "eligibility/index.html"
Expand Down
30 changes: 30 additions & 0 deletions tests/pytest/in_person/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,36 @@ def test_view_not_logged_in(client, viewname):
assert response.url == "/admin/login/?next=" + path


@pytest.mark.django_db
def test_eligibility_logged_in_filtering_flows(mocker, model_TransitAgency, admin_client):
model_TransitAgency.pk = None
model_TransitAgency.save()

digital = models.EnrollmentFlow.objects.create(
transit_agency=model_TransitAgency, supported_enrollment_methods=[models.EnrollmentMethods.DIGITAL], label="Digital"
)
in_person = models.EnrollmentFlow.objects.create(
transit_agency=model_TransitAgency,
supported_enrollment_methods=[models.EnrollmentMethods.IN_PERSON],
label="In-Person",
)
both = models.EnrollmentFlow.objects.create(
transit_agency=model_TransitAgency,
supported_enrollment_methods=[models.EnrollmentMethods.DIGITAL, models.EnrollmentMethods.IN_PERSON],
label="Both",
)
model_TransitAgency.enrollment_flows.add(digital, in_person, both)
mocker.patch("benefits.core.session.agency", autospec=True, return_value=model_TransitAgency)

path = reverse(routes.IN_PERSON_ELIGIBILITY)
response = admin_client.get(path)

assert model_TransitAgency.enrollment_flows.count() == 3
assert len(response.context_data["form"].fields["flow"].choices) == 2
assert response.context_data["form"].fields["flow"].choices[0][1] == "In-Person"
assert response.context_data["form"].fields["flow"].choices[1][1] == "Both"


# admin_client is a fixture from pytest
# https://pytest-django.readthedocs.io/en/latest/helpers.html#admin-client-django-test-client-logged-in-as-admin
@pytest.mark.django_db
Expand Down

0 comments on commit 00e1ea3

Please sign in to comment.