Skip to content

Commit

Permalink
refactor(enrollment): configure forms to POST to in_person views
Browse files Browse the repository at this point in the history
form submission now POSTs to the in_person `enrollment` view function,
which does not handle POSTs just yet.
  • Loading branch information
angela-tran committed Sep 4, 2024
1 parent 7c14333 commit 1795b00
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 10 deletions.
3 changes: 2 additions & 1 deletion benefits/enrollment/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 18 additions & 8 deletions benefits/enrollment/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
11 changes: 11 additions & 0 deletions benefits/in_person/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -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),
),
]
32 changes: 31 additions & 1 deletion benefits/in_person/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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
15 changes: 15 additions & 0 deletions benefits/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)}
Expand Down

0 comments on commit 1795b00

Please sign in to comment.