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
« 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"""
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 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(EligibleSessionRequired)
26def index(request):
27 """View handler for the enrollment landing page."""
28 session.update(request, origin=reverse(routes.ENROLLMENT_INDEX))
30 return redirect(routes.ENROLLMENT_LITTLEPAY_INDEX)
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)
38 if not flow.reenrollment_error_template:
39 raise Exception(f"Re-enrollment error with null template on: {flow}")
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))
46 return TemplateResponse(request, flow.reenrollment_error_template)
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)
56@decorator_from_middleware(EligibleSessionRequired)
57def system_error(request):
58 """View handler for an enrollment system error."""
60 # overwrite origin so that CTA takes user to agency index
61 agency = session.agency(request)
62 session.update(request, origin=agency.index_url)
64 return TemplateResponse(request, TEMPLATE_SYSTEM_ERROR)
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))
75 flow = session.flow(request)
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))
82 context = {"redirect_to": request.path}
83 context.update(flow.enrollment_success_context)
85 return TemplateResponse(request, "enrollment/success.html", context)