Skip to content

Commit

Permalink
refactor(enrollment): move usage of analytics and sentry back to view
Browse files Browse the repository at this point in the history
it was easier for me to leave this until the end of all the refactoring
  • Loading branch information
angela-tran committed Sep 5, 2024
1 parent a6863d2 commit 94f383a
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 27 deletions.
7 changes: 0 additions & 7 deletions benefits/enrollment/enrollment.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
from django.utils import timezone
from littlepay.api.client import Client
from requests.exceptions import HTTPError
import sentry_sdk

from benefits.core import session
from . import analytics


class Status(Enum):
Expand Down Expand Up @@ -100,16 +98,11 @@ def enroll(request, card_token):

except HTTPError as e:
if e.response.status_code >= 500:
analytics.returned_error(request, str(e))
sentry_sdk.capture_exception(e)

status = Status.SYSTEM_ERROR
else:
analytics.returned_error(request, str(e))
status = Status.EXCEPTION
exception = Exception(f"{e}: {e.response.json()}")
except Exception as e:
analytics.returned_error(request, str(e))
status = Status.EXCEPTION
exception = e

Expand Down
6 changes: 6 additions & 0 deletions benefits/enrollment/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,16 @@ def index(request):
match (status):
case Status.SUCCESS:
return success(request)

case Status.SYSTEM_ERROR:
analytics.returned_error(request, str(exception))
sentry_sdk.capture_exception(exception)
return system_error(request)

case Status.EXCEPTION:
analytics.returned_error(request, str(exception))
raise exception

case Status.REENROLLMENT_ERROR:
return reenrollment_error(request)

Expand Down
19 changes: 0 additions & 19 deletions tests/pytest/enrollment/test_enrollment.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from littlepay.api.groups import GroupFundingSourceResponse
from requests import HTTPError

import benefits.enrollment.enrollment
from benefits.enrollment.enrollment import (
Status,
enroll,
Expand All @@ -17,16 +16,6 @@
)


@pytest.fixture
def mocked_analytics_module(mocked_analytics_module):
return mocked_analytics_module(benefits.enrollment.enrollment)


@pytest.fixture
def mocked_sentry_sdk_module(mocker):
return mocker.patch.object(benefits.enrollment.enrollment, "sentry_sdk")


@pytest.fixture
def mocked_funding_source():
return FundingSourceResponse(
Expand Down Expand Up @@ -237,8 +226,6 @@ def test_enroll_system_error(
status_code,
app_request,
card_token,
mocked_analytics_module,
mocked_sentry_sdk_module,
):
mock_client_cls = mocker.patch("benefits.enrollment.enrollment.Client")
mock_client = mock_client_cls.return_value
Expand All @@ -254,8 +241,6 @@ def test_enroll_system_error(

assert status is Status.SYSTEM_ERROR
assert exception is None
mocked_analytics_module.returned_error.assert_called_once()
mocked_sentry_sdk_module.capture_exception.assert_called_once()


@pytest.mark.django_db
Expand All @@ -264,7 +249,6 @@ def test_enroll_exception_http_error_400(
mocker,
app_request,
card_token,
mocked_analytics_module,
):
mock_client_cls = mocker.patch("benefits.enrollment.enrollment.Client")
mock_client = mock_client_cls.return_value
Expand All @@ -282,7 +266,6 @@ def test_enroll_exception_http_error_400(
assert status is Status.EXCEPTION
assert isinstance(exception, Exception)
assert exception.args[0] == f"{http_error}: {http_error.response.json()}"
mocked_analytics_module.returned_error.assert_called_once()


@pytest.mark.django_db
Expand All @@ -291,7 +274,6 @@ def test_enroll_exception_non_http_error(
mocker,
app_request,
card_token,
mocked_analytics_module,
):
mock_client_cls = mocker.patch("benefits.enrollment.enrollment.Client")
mock_client = mock_client_cls.return_value
Expand All @@ -303,7 +285,6 @@ def test_enroll_exception_non_http_error(
assert status is Status.EXCEPTION
assert isinstance(exception, Exception)
assert exception.args[0] == "some other exception"
mocked_analytics_module.returned_error.assert_called_once()


@pytest.mark.django_db
Expand Down
9 changes: 8 additions & 1 deletion tests/pytest/enrollment/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@ def test_index_eligible_post_valid_form_system_error(
model_EnrollmentFlow_does_not_support_expiration,
card_tokenize_form_data,
status_code,
mocked_analytics_module,
mocked_sentry_sdk_module,
):
mock_session = mocker.patch("benefits.enrollment.views.session")
mock_session.agency.return_value = mocked_session_agency.return_value
Expand All @@ -253,11 +255,13 @@ def test_index_eligible_post_valid_form_system_error(
assert response.status_code == 200
assert response.template_name == TEMPLATE_SYSTEM_ERROR
assert {"origin": mocked_session_agency.return_value.index_url} in mock_session.update.call_args
mocked_analytics_module.returned_error.assert_called_once()
mocked_sentry_sdk_module.capture_exception.assert_called_once()


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_session_agency", "mocked_session_flow", "mocked_session_eligible")
def test_index_eligible_post_valid_form_exception(mocker, client, card_tokenize_form_data):
def test_index_eligible_post_valid_form_exception(mocker, client, card_tokenize_form_data, mocked_analytics_module):
mocker.patch(
"benefits.enrollment.views.enroll",
return_value=(
Expand All @@ -267,9 +271,12 @@ def test_index_eligible_post_valid_form_exception(mocker, client, card_tokenize_
)

path = reverse(routes.ENROLLMENT_INDEX)

with pytest.raises(Exception, match=r"some exception"):
client.post(path, card_tokenize_form_data)

mocked_analytics_module.returned_error.assert_called_once()


@pytest.mark.django_db
@pytest.mark.usefixtures("mocked_session_agency", "mocked_session_flow", "mocked_session_eligible")
Expand Down

0 comments on commit 94f383a

Please sign in to comment.