Skip to content

Commit

Permalink
refactor(view): consolidate sending analytics event into success view
Browse files Browse the repository at this point in the history
this removes the need for any helper function
  • Loading branch information
angela-tran committed Apr 1, 2024
1 parent 86ea118 commit 8cb5e33
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 16 deletions.
18 changes: 8 additions & 10 deletions benefits/enrollment/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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(
Expand All @@ -127,19 +127,19 @@ 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)
else: # eligibility does not support expiration
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")
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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."""
Expand All @@ -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)
15 changes: 9 additions & 6 deletions tests/pytest/enrollment/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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()

0 comments on commit 8cb5e33

Please sign in to comment.