Coverage for benefits/enrollment/analytics.py: 88%

30 statements  

« prev     ^ index     » next       coverage.py v7.11.3, created at 2025-11-15 00:14 +0000

1""" 

2The enrollment application: analytics implementation. 

3""" 

4 

5from benefits.core import analytics as core, models 

6 

7 

8class ReturnedEnrollmentEvent(core.Event): 

9 """Analytics event representing the end of transit processor enrollment request.""" 

10 

11 def __init__( 

12 self, 

13 request, 

14 status, 

15 enrollment_group, 

16 transit_processor, 

17 error=None, 

18 enrollment_method=models.EnrollmentMethods.DIGITAL, 

19 extra_claims=None, 

20 card_category=None, 

21 card_scheme=None, 

22 ): 

23 super().__init__(request, "returned enrollment", enrollment_method) 

24 if str(status).lower() in ("error", "retry", "success"): 24 ↛ exitline 24 didn't return from function '__init__' because the condition on line 24 was always true

25 self.update_event_properties(status=status) 

26 self.update_event_properties(enrollment_group=enrollment_group) 

27 self.update_event_properties(transit_processor=transit_processor) 

28 if error is not None: 28 ↛ 29line 28 didn't jump to line 29 because the condition on line 28 was never true

29 self.update_event_properties(error=error) 

30 if extra_claims is not None: 

31 self.update_event_properties(extra_claims=extra_claims) 

32 if card_category is not None: 

33 self.update_event_properties(card_category=card_category) 

34 if card_scheme is not None: 

35 self.update_event_properties(card_scheme=card_scheme) 

36 

37 

38class FailedPretokenizationRequestEvent(core.Event): 

39 """Analytics event representing a failure to do the pre-tokenization step for card tokenization.""" 

40 

41 def __init__(self, request, transit_processor, status_code=None, enrollment_method=models.EnrollmentMethods.DIGITAL): 

42 super().__init__(request, "failed pre-tokenization request", enrollment_method) 

43 self.update_event_properties(transit_processor=transit_processor) 

44 if status_code is not None: 

45 self.update_event_properties(status_code=status_code) 

46 

47 

48def returned_error( 

49 request, 

50 error, 

51 enrollment_group, 

52 transit_processor, 

53 enrollment_method: str = models.EnrollmentMethods.DIGITAL, 

54): 

55 """Send the "returned enrollment" analytics event with an error status and message.""" 

56 core.send_event( 

57 ReturnedEnrollmentEvent( 

58 request, 

59 status="error", 

60 enrollment_group=enrollment_group, 

61 transit_processor=transit_processor, 

62 error=error, 

63 enrollment_method=enrollment_method, 

64 ) 

65 ) 

66 

67 

68def returned_retry( 

69 request, 

70 enrollment_group, 

71 transit_processor, 

72 enrollment_method: str = models.EnrollmentMethods.DIGITAL, 

73): 

74 """Send the "returned enrollment" analytics event with a retry status.""" 

75 core.send_event( 

76 ReturnedEnrollmentEvent( 

77 request, 

78 status="retry", 

79 enrollment_group=enrollment_group, 

80 transit_processor=transit_processor, 

81 enrollment_method=enrollment_method, 

82 ) 

83 ) 

84 

85 

86def returned_success( 

87 request, 

88 enrollment_group, 

89 transit_processor, 

90 enrollment_method: str = models.EnrollmentMethods.DIGITAL, 

91 extra_claims=None, 

92 card_scheme=None, 

93 card_category=None, 

94): 

95 """Send the "returned enrollment" analytics event with a success status.""" 

96 core.send_event( 

97 ReturnedEnrollmentEvent( 

98 request, 

99 status="success", 

100 enrollment_group=enrollment_group, 

101 transit_processor=transit_processor, 

102 enrollment_method=enrollment_method, 

103 extra_claims=extra_claims, 

104 card_scheme=card_scheme, 

105 card_category=card_category, 

106 ) 

107 ) 

108 

109 

110def failed_pretokenization_request( 

111 request, transit_processor, status_code=None, enrollment_method: str = models.EnrollmentMethods.DIGITAL 

112): 

113 """Send the "failed pre-tokenization request" analytics event with the response status code.""" 

114 core.send_event( 

115 FailedPretokenizationRequestEvent( 

116 request, transit_processor=transit_processor, status_code=status_code, enrollment_method=enrollment_method 

117 ) 

118 )