diff --git a/benefits/enrollment/enrollment.py b/benefits/enrollment/enrollment.py index 646156f7f..8d9807122 100644 --- a/benefits/enrollment/enrollment.py +++ b/benefits/enrollment/enrollment.py @@ -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): @@ -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 diff --git a/benefits/enrollment/views.py b/benefits/enrollment/views.py index 9c74ae1db..f5c96b4a8 100644 --- a/benefits/enrollment/views.py +++ b/benefits/enrollment/views.py @@ -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) diff --git a/tests/pytest/enrollment/test_enrollment.py b/tests/pytest/enrollment/test_enrollment.py index f26024dea..f52e91a97 100644 --- a/tests/pytest/enrollment/test_enrollment.py +++ b/tests/pytest/enrollment/test_enrollment.py @@ -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, @@ -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( @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/tests/pytest/enrollment/test_views.py b/tests/pytest/enrollment/test_views.py index 97e8c11d0..f45c0a09f 100644 --- a/tests/pytest/enrollment/test_views.py +++ b/tests/pytest/enrollment/test_views.py @@ -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 @@ -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=( @@ -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")