Skip to content

Commit 88788de

Browse files
committed
refactor(in-person): convert server error view to CBV
1 parent c7c6921 commit 88788de

3 files changed

Lines changed: 23 additions & 16 deletions

File tree

benefits/in_person/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@
4747
admin.site.admin_view(views.SwitchioGatewayUrlView.as_view()),
4848
name=routes.name(routes.IN_PERSON_ENROLLMENT_SWITCHIO_GATEWAY_URL),
4949
),
50-
path("error/", admin.site.admin_view(views.server_error), name=routes.name(routes.IN_PERSON_SERVER_ERROR)),
50+
path("error/", admin.site.admin_view(views.ServerErrorView.as_view()), name=routes.name(routes.IN_PERSON_SERVER_ERROR)),
5151
]

benefits/in_person/views.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.shortcuts import redirect
55
from django.template.response import TemplateResponse
66
from django.urls import reverse
7-
from django.views.generic import FormView
7+
from django.views.generic import FormView, TemplateView
88

99
from benefits.core.models.transit import TransitAgency
1010
from benefits.core import models, session
@@ -126,15 +126,20 @@ def get_origin_url(self):
126126
return reverse(routes.ADMIN_INDEX)
127127

128128

129-
def server_error(request):
129+
class ServerErrorView(mixins.CommonContextMixin, AgencySessionRequiredMixin, TemplateView):
130130
"""View handler for errors caused by a misconfiguration or bad request."""
131-
agency = session.agency(request)
132-
context = {
133-
**admin_site.each_context(request),
134-
"title": f"{agency.long_name} | In-person enrollment | {admin_site.site_title}",
135-
}
136131

137-
return TemplateResponse(request, "in_person/enrollment/server_error.html", context)
132+
template_name = "in_person/enrollment/server_error.html"
133+
134+
def get(self, request, *args, **kwargs):
135+
return super().get(request, *args, **kwargs)
136+
137+
def post(self, request, *args, **kwargs):
138+
# the Javascript in in_person/index_littlepay.html sends a form POST to this view
139+
# rather than implementing this view as a FormView, which requires instantiating the
140+
# enrollment.forms.CardTokenizeFailForm, we implement post() to simply return the template via get()
141+
# we thus avoid interfering with the view's lifecycle and dispatch() method
142+
return super().get(request, *args, **kwargs)
138143

139144

140145
def success(request):

tests/pytest/in_person/test_views.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,16 @@ def test_get_origin_url(self, view):
194194

195195

196196
@pytest.mark.django_db
197-
@pytest.mark.usefixtures("mocked_session_flow", "mocked_session_agency")
198-
def test_server_error(admin_client):
199-
path = reverse(routes.IN_PERSON_SERVER_ERROR)
200-
201-
response = admin_client.get(path)
197+
class TestServerErrorView:
198+
@pytest.fixture
199+
def view(self, app_request, model_LittlepayConfig):
200+
v = views.ServerErrorView()
201+
v.setup(app_request)
202+
v.agency = model_LittlepayConfig.transit_agency
203+
return v
202204

203-
assert response.status_code == 200
204-
assert response.template_name == "in_person/enrollment/server_error.html"
205+
def test_view(self, view: views.ServerErrorView):
206+
assert view.template_name == "in_person/enrollment/server_error.html"
205207

206208

207209
@pytest.mark.django_db

0 commit comments

Comments
 (0)