Coverage for benefits/enrollment/enrollment.py: 93%
35 statements
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-06 20:07 +0000
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-06 20:07 +0000
1from enum import Enum
3from django.shortcuts import redirect
4import sentry_sdk
6from benefits.routes import routes
7from benefits.core import models, session
8from . import analytics
11class Status(Enum):
12 # SUCCESS means the enrollment went through successfully
13 SUCCESS = 1
15 # SYSTEM_ERROR means the enrollment system encountered an internal error (returned a 500 HTTP status)
16 SYSTEM_ERROR = 2
18 # EXCEPTION means the enrollment system is working, but something unexpected happened
19 # because of a misconfiguration or invalid request from our side
20 EXCEPTION = 3
22 # REENROLLMENT_ERROR means that the user tried to re-enroll but is not within the reenrollment window
23 REENROLLMENT_ERROR = 4
26def handle_enrollment_results(request, status: Status, exception: Exception):
27 match (status):
28 case Status.SUCCESS:
29 agency = session.agency(request)
30 flow = session.flow(request)
31 expiry = session.enrollment_expiry(request)
32 oauth_extra_claims = session.oauth_extra_claims(request)
33 # EnrollmentEvent expects a string value for extra_claims
34 if oauth_extra_claims: 34 ↛ 37line 34 didn't jump to line 37 because the condition on line 34 was always true
35 str_extra_claims = ", ".join(oauth_extra_claims)
36 else:
37 str_extra_claims = ""
38 event = models.EnrollmentEvent.objects.create(
39 transit_agency=agency,
40 enrollment_flow=flow,
41 enrollment_method=models.EnrollmentMethods.DIGITAL,
42 verified_by=flow.eligibility_verifier,
43 expiration_datetime=expiry,
44 extra_claims=str_extra_claims,
45 )
46 event.save()
47 analytics.returned_success(request, flow.group_id, extra_claims=oauth_extra_claims)
48 return redirect(routes.ENROLLMENT_SUCCESS)
50 case Status.SYSTEM_ERROR:
51 analytics.returned_error(request, str(exception))
52 sentry_sdk.capture_exception(exception)
53 return redirect(routes.ENROLLMENT_SYSTEM_ERROR)
55 case Status.EXCEPTION:
56 analytics.returned_error(request, str(exception))
57 raise exception
59 case Status.REENROLLMENT_ERROR: 59 ↛ exitline 59 didn't return from function 'handle_enrollment_results' because the pattern on line 59 always matched
60 analytics.returned_error(request, "Re-enrollment error.")
61 return redirect(routes.ENROLLMENT_REENROLLMENT_ERROR)