From 1795b00b450ebd44470ce8ed46bf0402160ff707 Mon Sep 17 00:00:00 2001 From: Angela Tran Date: Tue, 3 Sep 2024 21:14:43 +0000 Subject: [PATCH] refactor(enrollment): configure forms to POST to in_person views form submission now POSTs to the in_person `enrollment` view function, which does not handle POSTs just yet. --- benefits/enrollment/forms.py | 3 ++- benefits/enrollment/views.py | 26 ++++++++++++++++++-------- benefits/in_person/urls.py | 11 +++++++++++ benefits/in_person/views.py | 32 +++++++++++++++++++++++++++++++- benefits/routes.py | 15 +++++++++++++++ 5 files changed, 77 insertions(+), 10 deletions(-) diff --git a/benefits/enrollment/forms.py b/benefits/enrollment/forms.py index 8b5e2f5f6..71d24ac6c 100644 --- a/benefits/enrollment/forms.py +++ b/benefits/enrollment/forms.py @@ -11,7 +11,8 @@ class CardTokenizeSuccessForm(forms.Form): id = "form-card-tokenize-success" method = "POST" - def __init__(self, action_url, *args, **kwargs): + def __init__(self, data, action_url=None, *args, **kwargs): + super().__init__(data, *args, **kwargs) self.action_url = action_url # hidden input with no label diff --git a/benefits/enrollment/views.py b/benefits/enrollment/views.py index 426770a8e..eba6123d6 100644 --- a/benefits/enrollment/views.py +++ b/benefits/enrollment/views.py @@ -172,20 +172,30 @@ def index(request): # GET enrollment index else: - context = enrollment_get_context(request, agency) + tokenize_retry_form = forms.CardTokenizeFailForm(routes.ENROLLMENT_RETRY, "form-card-tokenize-fail-retry") + tokenize_server_error_form = forms.CardTokenizeFailForm(routes.SERVER_ERROR, "form-card-tokenize-fail-server-error") + tokenize_system_error_form = forms.CardTokenizeFailForm( + routes.ENROLLMENT_SYSTEM_ERROR, "form-card-tokenize-fail-system-error" + ) + tokenize_success_form = forms.CardTokenizeSuccessForm(routes.ENROLLMENT_INDEX, auto_id=True, label_suffix="") + + context = enrollment_get_context( + request, + agency, + tokenize_retry_form=tokenize_retry_form, + tokenize_server_error_form=tokenize_server_error_form, + tokenize_system_error_form=tokenize_system_error_form, + tokenize_success_form=tokenize_success_form, + ) logger.debug(f'card_tokenize_url: {context["card_tokenize_url"]}') return TemplateResponse(request, flow.enrollment_index_template, context) -def enrollment_get_context(request, agency): +def enrollment_get_context( + request, agency, tokenize_retry_form, tokenize_server_error_form, tokenize_system_error_form, tokenize_success_form +): """Returns a context object for the template used for a GET request for the enrollment page.""" - tokenize_retry_form = forms.CardTokenizeFailForm(routes.ENROLLMENT_RETRY, "form-card-tokenize-fail-retry") - tokenize_server_error_form = forms.CardTokenizeFailForm(routes.SERVER_ERROR, "form-card-tokenize-fail-server-error") - tokenize_system_error_form = forms.CardTokenizeFailForm( - routes.ENROLLMENT_SYSTEM_ERROR, "form-card-tokenize-fail-system-error" - ) - tokenize_success_form = forms.CardTokenizeSuccessForm(routes.ENROLLMENT_INDEX, auto_id=True, label_suffix="") # mapping from Django's I18N LANGUAGE_CODE to Littlepay's overlay language code overlay_language = {"en": "en", "es": "es-419"}.get(request.LANGUAGE_CODE, "en") diff --git a/benefits/in_person/urls.py b/benefits/in_person/urls.py index b6331be50..6389016d9 100644 --- a/benefits/in_person/urls.py +++ b/benefits/in_person/urls.py @@ -9,4 +9,15 @@ urlpatterns = [ path("eligibility/", admin.site.admin_view(views.eligibility), name=routes.name(routes.IN_PERSON_ELIGIBILITY)), path("enrollment/", admin.site.admin_view(views.enrollment), name=routes.name(routes.IN_PERSON_ENROLLMENT)), + path( + "enrollment/error/reenrollment", + admin.site.admin_view(views.reenrollment_error), + name=routes.name(routes.IN_PERSON_ENROLLMENT_REENROLLMENT_ERROR), + ), + path("enrollment/retry", admin.site.admin_view(views.retry), name=routes.name(routes.IN_PERSON_ENROLLMENT_RETRY)), + path( + "enrollment/error", + admin.site.admin_view(views.system_error), + name=routes.name(routes.IN_PERSON_ENROLLMENT_SYSTEM_ERROR), + ), ] diff --git a/benefits/in_person/views.py b/benefits/in_person/views.py index ce5f42a42..2fcee9cd7 100644 --- a/benefits/in_person/views.py +++ b/benefits/in_person/views.py @@ -2,7 +2,9 @@ from django.template.response import TemplateResponse from benefits.core import session +from benefits.enrollment import forms from benefits.enrollment.views import enrollment_get_context +from benefits.routes import routes def eligibility(request): @@ -20,7 +22,35 @@ def enrollment(request): pass # GET enrollment page else: - context = enrollment_get_context(request, agency) + tokenize_retry_form = forms.CardTokenizeFailForm(routes.IN_PERSON_ENROLLMENT_RETRY, "form-card-tokenize-fail-retry") + tokenize_server_error_form = forms.CardTokenizeFailForm(routes.SERVER_ERROR, "form-card-tokenize-fail-server-error") + tokenize_system_error_form = forms.CardTokenizeFailForm( + routes.IN_PERSON_ENROLLMENT_SYSTEM_ERROR, "form-card-tokenize-fail-system-error" + ) + tokenize_success_form = forms.CardTokenizeSuccessForm( + data=None, action_url=routes.IN_PERSON_ENROLLMENT, auto_id=True, label_suffix="" + ) + + context = enrollment_get_context( + request, + agency, + tokenize_retry_form=tokenize_retry_form, + tokenize_server_error_form=tokenize_server_error_form, + tokenize_system_error_form=tokenize_system_error_form, + tokenize_success_form=tokenize_success_form, + ) context.update(**admin_site.each_context(request)) return TemplateResponse(request, "in_person/enrollment.html", context) + + +def reenrollment_error(request): + pass + + +def retry(request): + pass + + +def system_error(requesT): + pass diff --git a/benefits/routes.py b/benefits/routes.py index 8daed2a31..ef5adb0f0 100644 --- a/benefits/routes.py +++ b/benefits/routes.py @@ -131,6 +131,21 @@ def IN_PERSON_ENROLLMENT(self): """In-person (e.g. agency assisted) enrollment""" return "in_person:enrollment" + @property + def IN_PERSON_ENROLLMENT_RETRY(self): + """In-person user entered their card details incorrectly or another recoverable problem.""" + return "in_person:retry" + + @property + def IN_PERSON_ENROLLMENT_REENROLLMENT_ERROR(self): + """In-person user tried to enroll when they are already enrolled in an expiring discount.""" + return "in_person:reenrollment_error" + + @property + def IN_PERSON_ENROLLMENT_SYSTEM_ERROR(self): + """Enrollment error not caused by the user during in-person enrollment.""" + return "in_person:system_error" + def to_dict(self) -> dict[str, str]: """Get a mapping of property name --> value for each `@property` in the Routes collection.""" return {prop: str(getattr(self, prop)) for prop in dir(Routes) if isinstance(getattr(Routes, prop), property)}