Coverage for benefits/enrollment/views.py: 96%

45 statements  

« prev     ^ index     » next       coverage.py v7.8.2, created at 2025-06-06 20:07 +0000

1""" 

2The enrollment application: view definitions for the benefits enrollment flow. 

3""" 

4 

5import logging 

6 

7from django.shortcuts import redirect 

8from django.template.response import TemplateResponse 

9from django.urls import reverse 

10from django.utils.decorators import decorator_from_middleware 

11 

12from benefits.routes import routes 

13from benefits.core import session 

14from benefits.core.middleware import EligibleSessionRequired, FlowSessionRequired, pageview_decorator 

15 

16from . import analytics 

17 

18TEMPLATE_RETRY = "enrollment/retry.html" 

19TEMPLATE_SYSTEM_ERROR = "enrollment/system_error.html" 

20 

21 

22logger = logging.getLogger(__name__) 

23 

24 

25@decorator_from_middleware(EligibleSessionRequired) 

26def index(request): 

27 """View handler for the enrollment landing page.""" 

28 session.update(request, origin=reverse(routes.ENROLLMENT_INDEX)) 

29 

30 return redirect(routes.ENROLLMENT_LITTLEPAY_INDEX) 

31 

32 

33@decorator_from_middleware(EligibleSessionRequired) 

34def reenrollment_error(request): 

35 """View handler for a re-enrollment attempt that is not yet within the re-enrollment window.""" 

36 flow = session.flow(request) 

37 

38 if not flow.reenrollment_error_template: 

39 raise Exception(f"Re-enrollment error with null template on: {flow}") 

40 

41 if session.logged_in(request) and flow.supports_sign_out: 41 ↛ 44line 41 didn't jump to line 44 because the condition on line 41 was never true

42 # overwrite origin for a logged in user 

43 # if they click the logout button, they are taken to the new route 

44 session.update(request, origin=reverse(routes.LOGGED_OUT)) 

45 

46 return TemplateResponse(request, flow.reenrollment_error_template) 

47 

48 

49@decorator_from_middleware(EligibleSessionRequired) 

50def retry(request): 

51 """View handler for a recoverable failure condition.""" 

52 analytics.returned_retry(request) 

53 return TemplateResponse(request, TEMPLATE_RETRY) 

54 

55 

56@decorator_from_middleware(EligibleSessionRequired) 

57def system_error(request): 

58 """View handler for an enrollment system error.""" 

59 

60 # overwrite origin so that CTA takes user to agency index 

61 agency = session.agency(request) 

62 session.update(request, origin=agency.index_url) 

63 

64 return TemplateResponse(request, TEMPLATE_SYSTEM_ERROR) 

65 

66 

67@pageview_decorator 

68@decorator_from_middleware(EligibleSessionRequired) 

69@decorator_from_middleware(FlowSessionRequired) 

70def success(request): 

71 """View handler for the final success page.""" 

72 request.path = "/enrollment/success" 

73 session.update(request, origin=reverse(routes.ENROLLMENT_SUCCESS)) 

74 

75 flow = session.flow(request) 

76 

77 if session.logged_in(request) and flow.supports_sign_out: 

78 # overwrite origin for a logged in user 

79 # if they click the logout button, they are taken to the new route 

80 session.update(request, origin=reverse(routes.LOGGED_OUT)) 

81 

82 context = {"redirect_to": request.path} 

83 context.update(flow.enrollment_success_context) 

84 

85 return TemplateResponse(request, "enrollment/success.html", context)