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

30 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-04-01 15:39 +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 agency, 

16 enrollment_group, 

17 transit_processor, 

18 error=None, 

19 enrollment_method=models.EnrollmentMethods.DIGITAL, 

20 extra_claims=None, 

21 card_category=None, 

22 card_scheme=None, 

23 ): 

24 super().__init__(request, "returned enrollment", enrollment_method, agency) 

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

26 self.update_event_properties(status=status) 

27 self.update_event_properties(enrollment_group=enrollment_group) 

28 self.update_event_properties(transit_processor=transit_processor) 

29 if error is not None: 

30 self.update_event_properties(error=error) 

31 if extra_claims is not None: 

32 self.update_event_properties(extra_claims=extra_claims) 

33 if card_category is not None: 

34 self.update_event_properties(card_category=card_category) 

35 if card_scheme is not None: 

36 self.update_event_properties(card_scheme=card_scheme) 

37 

38 

39class FailedPretokenizationRequestEvent(core.Event): 

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

41 

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

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

44 self.update_event_properties(transit_processor=transit_processor) 

45 if status_code is not None: 

46 self.update_event_properties(status_code=status_code) 

47 

48 

49def returned_error( 

50 request, 

51 error, 

52 agency, 

53 enrollment_group, 

54 transit_processor, 

55 enrollment_method: str = models.EnrollmentMethods.DIGITAL, 

56): 

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

58 core.send_event( 

59 ReturnedEnrollmentEvent( 

60 request, 

61 status="error", 

62 agency=agency, 

63 enrollment_group=enrollment_group, 

64 transit_processor=transit_processor, 

65 error=error, 

66 enrollment_method=enrollment_method, 

67 ) 

68 ) 

69 

70 

71def returned_retry( 

72 request, 

73 agency, 

74 enrollment_group, 

75 transit_processor, 

76 enrollment_method: str = models.EnrollmentMethods.DIGITAL, 

77): 

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

79 core.send_event( 

80 ReturnedEnrollmentEvent( 

81 request, 

82 status="retry", 

83 agency=agency, 

84 enrollment_group=enrollment_group, 

85 transit_processor=transit_processor, 

86 enrollment_method=enrollment_method, 

87 ) 

88 ) 

89 

90 

91def returned_success( 

92 request, 

93 agency, 

94 enrollment_group, 

95 transit_processor, 

96 enrollment_method: str = models.EnrollmentMethods.DIGITAL, 

97 extra_claims=None, 

98 card_scheme=None, 

99 card_category=None, 

100): 

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

102 core.send_event( 

103 ReturnedEnrollmentEvent( 

104 request, 

105 status="success", 

106 agency=agency, 

107 enrollment_group=enrollment_group, 

108 transit_processor=transit_processor, 

109 enrollment_method=enrollment_method, 

110 extra_claims=extra_claims, 

111 card_scheme=card_scheme, 

112 card_category=card_category, 

113 ) 

114 ) 

115 

116 

117def failed_pretokenization_request( 

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

119): 

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

121 core.send_event( 

122 FailedPretokenizationRequestEvent( 

123 request, transit_processor=transit_processor, status_code=status_code, enrollment_method=enrollment_method 

124 ) 

125 )