From 8cb5e3390ebeffbdbcd8e9983cee73ac1edace7f Mon Sep 17 00:00:00 2001 From: Angela Tran Date: Mon, 1 Apr 2024 22:31:47 +0000 Subject: [PATCH] refactor(view): consolidate sending analytics event into success view this removes the need for any helper function --- benefits/enrollment/views.py | 18 ++++++++---------- tests/pytest/enrollment/test_views.py | 15 +++++++++------ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/benefits/enrollment/views.py b/benefits/enrollment/views.py index 708edf0b4..c25bf92a8 100644 --- a/benefits/enrollment/views.py +++ b/benefits/enrollment/views.py @@ -104,7 +104,7 @@ def index(request): client.link_concession_group_funding_source( group_id=group_id, funding_source_id=funding_source.id, expiry_date=session.enrollment_expiry(request) ) - return _success(request, group_id) + return success(request) else: # already_enrolled if group_funding_source.concession_expiry is None: # update expiration of existing enrollment, return success @@ -113,7 +113,7 @@ def index(request): funding_source_id=funding_source.id, expiry_date=session.enrollment_expiry(request), ) - return _success(request, group_id) + return success(request) else: is_expired = _is_expired(group_funding_source.concession_expiry) is_within_reenrollment_window = _is_within_reenrollment_window( @@ -127,7 +127,7 @@ def index(request): funding_source_id=funding_source.id, expiry_date=session.enrollment_expiry(request), ) - return _success(request, group_id) + return success(request) else: # re-enrollment error, return enrollment error with expiration and reenrollment_date return reenrollment_error(request) @@ -135,11 +135,11 @@ def index(request): if not already_enrolled: # enroll user with no expiration date, return success client.link_concession_group_funding_source(group_id=group_id, funding_source_id=funding_source.id) - return _success(request, group_id) + return success(request) else: # already_enrolled if group_funding_source.concession_expiry is None: # no action, return success - return _success(request, group_id) + return success(request) else: # remove expiration date, return success raise NotImplementedError("Removing expiration date is currently not supported") @@ -172,11 +172,6 @@ def index(request): return TemplateResponse(request, eligibility.enrollment_index_template, context) -def _success(request, group_id): - analytics.returned_success(request, group_id) - return success(request) - - def _get_group_funding_source(client: Client, group_id, funding_source_id): group_funding_sources = client.get_concession_group_linked_funding_sources(group_id) matching_group_funding_source = None @@ -231,6 +226,7 @@ def retry(request): @pageview_decorator +@decorator_from_middleware(EligibleSessionRequired) @decorator_from_middleware(VerifierSessionRequired) def success(request): """View handler for the final success page.""" @@ -239,10 +235,12 @@ def success(request): agency = session.agency(request) verifier = session.verifier(request) + eligibility = session.eligibility(request) if session.logged_in(request) and verifier.auth_provider.supports_sign_out: # overwrite origin for a logged in user # if they click the logout button, they are taken to the new route session.update(request, origin=reverse(ROUTE_LOGGED_OUT)) + analytics.returned_success(request, eligibility.group_id) return TemplateResponse(request, agency.enrollment_success_template) diff --git a/tests/pytest/enrollment/test_views.py b/tests/pytest/enrollment/test_views.py index 62af609f7..bb5595117 100644 --- a/tests/pytest/enrollment/test_views.py +++ b/tests/pytest/enrollment/test_views.py @@ -666,8 +666,8 @@ def test_success_no_verifier(client): @pytest.mark.django_db -@pytest.mark.usefixtures("mocked_session_verifier_auth_required") -def test_success_authentication_logged_in(mocker, client, model_TransitAgency): +@pytest.mark.usefixtures("mocked_session_verifier_auth_required", "mocked_session_eligibility") +def test_success_authentication_logged_in(mocker, client, model_TransitAgency, mocked_analytics_module): mock_session = mocker.patch("benefits.enrollment.views.session") mock_session.logged_in.return_value = True mock_session.agency.return_value = model_TransitAgency @@ -678,11 +678,12 @@ def test_success_authentication_logged_in(mocker, client, model_TransitAgency): assert response.status_code == 200 assert response.template_name == TEMPLATE_SUCCESS assert {"origin": reverse(ROUTE_LOGGED_OUT)} in mock_session.update.call_args + mocked_analytics_module.returned_success.assert_called_once() @pytest.mark.django_db -@pytest.mark.usefixtures("mocked_session_verifier_auth_required") -def test_success_authentication_not_logged_in(mocker, client, model_TransitAgency): +@pytest.mark.usefixtures("mocked_session_verifier_auth_required", "mocked_session_eligibility") +def test_success_authentication_not_logged_in(mocker, client, model_TransitAgency, mocked_analytics_module): mock_session = mocker.patch("benefits.enrollment.views.session") mock_session.logged_in.return_value = False mock_session.agency.return_value = model_TransitAgency @@ -692,13 +693,15 @@ def test_success_authentication_not_logged_in(mocker, client, model_TransitAgenc assert response.status_code == 200 assert response.template_name == TEMPLATE_SUCCESS + mocked_analytics_module.returned_success.assert_called_once() @pytest.mark.django_db -@pytest.mark.usefixtures("mocked_session_agency", "mocked_session_verifier_auth_not_required") -def test_success_no_authentication(client): +@pytest.mark.usefixtures("mocked_session_agency", "mocked_session_verifier_auth_not_required", "mocked_session_eligibility") +def test_success_no_authentication(client, mocked_analytics_module): path = reverse(ROUTE_SUCCESS) response = client.get(path) assert response.status_code == 200 assert response.template_name == TEMPLATE_SUCCESS + mocked_analytics_module.returned_success.assert_called_once()