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

47 statements  

« prev     ^ index     » next       coverage.py v7.10.2, created at 2025-08-08 16:26 +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 AgencySessionRequired, 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(AgencySessionRequired) 

26@decorator_from_middleware(EligibleSessionRequired) 

27def index(request): 

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

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

30 

31 agency = session.agency(request) 

32 return redirect(agency.enrollment_index_route) 

33 

34 

35@decorator_from_middleware(EligibleSessionRequired) 

36def reenrollment_error(request): 

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

38 flow = session.flow(request) 

39 

40 if not flow.reenrollment_error_template: 

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

42 

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

44 # overwrite origin for a logged in user 

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

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

47 

48 return TemplateResponse(request, flow.reenrollment_error_template) 

49 

50 

51@decorator_from_middleware(EligibleSessionRequired) 

52def retry(request): 

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

54 analytics.returned_retry(request) 

55 return TemplateResponse(request, TEMPLATE_RETRY) 

56 

57 

58@decorator_from_middleware(EligibleSessionRequired) 

59def system_error(request): 

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

61 

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

63 agency = session.agency(request) 

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

65 

66 return TemplateResponse(request, TEMPLATE_SYSTEM_ERROR) 

67 

68 

69@pageview_decorator 

70@decorator_from_middleware(EligibleSessionRequired) 

71@decorator_from_middleware(FlowSessionRequired) 

72def success(request): 

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

74 request.path = "/enrollment/success" 

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

76 

77 flow = session.flow(request) 

78 

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

80 # overwrite origin for a logged in user 

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

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

83 

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

85 context.update(flow.enrollment_success_context) 

86 

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