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

1from enum import Enum 

2 

3from django.shortcuts import redirect 

4import sentry_sdk 

5 

6from benefits.routes import routes 

7from benefits.core import models, session 

8from . import analytics 

9 

10 

11class Status(Enum): 

12 # SUCCESS means the enrollment went through successfully 

13 SUCCESS = 1 

14 

15 # SYSTEM_ERROR means the enrollment system encountered an internal error (returned a 500 HTTP status) 

16 SYSTEM_ERROR = 2 

17 

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 

21 

22 # REENROLLMENT_ERROR means that the user tried to re-enroll but is not within the reenrollment window 

23 REENROLLMENT_ERROR = 4 

24 

25 

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) 

49 

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) 

54 

55 case Status.EXCEPTION: 

56 analytics.returned_error(request, str(exception)) 

57 raise exception 

58 

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)