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
« prev ^ index » next coverage.py v7.11.3, created at 2025-11-15 00:14 +0000
1"""
2The enrollment application: analytics implementation.
3"""
5from benefits.core import analytics as core, models
8class ReturnedEnrollmentEvent(core.Event):
9 """Analytics event representing the end of transit processor enrollment request."""
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)
38class FailedPretokenizationRequestEvent(core.Event):
39 """Analytics event representing a failure to do the pre-tokenization step for card tokenization."""
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)
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 )
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 )
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 )
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 )