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
« 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"""
5import logging
7from django.shortcuts import redirect
8from django.template.response import TemplateResponse
9from django.urls import reverse
10from django.utils.decorators import decorator_from_middleware
12from benefits.routes import routes
13from benefits.core import session
14from benefits.core.middleware import AgencySessionRequired, EligibleSessionRequired, FlowSessionRequired, pageview_decorator
16from . import analytics
18TEMPLATE_RETRY = "enrollment/retry.html"
19TEMPLATE_SYSTEM_ERROR = "enrollment/system_error.html"
22logger = logging.getLogger(__name__)
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))
31 agency = session.agency(request)
32 return redirect(agency.enrollment_index_route)
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)
40 if not flow.reenrollment_error_template:
41 raise Exception(f"Re-enrollment error with null template on: {flow}")
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))
48 return TemplateResponse(request, flow.reenrollment_error_template)
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)
58@decorator_from_middleware(EligibleSessionRequired)
59def system_error(request):
60 """View handler for an enrollment system error."""
62 # overwrite origin so that CTA takes user to agency index
63 agency = session.agency(request)
64 session.update(request, origin=agency.index_url)
66 return TemplateResponse(request, TEMPLATE_SYSTEM_ERROR)
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))
77 flow = session.flow(request)
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))
84 context = {"redirect_to": request.path}
85 context.update(flow.enrollment_success_context)
87 return TemplateResponse(request, "enrollment/success.html", context)