Skip to content

Commit 949fa2b

Browse files
committed
refactor(enrollment): request_registration takes redirect param
so this can be effectively (re)used across DIGITAL and IN_PERSON
1 parent 795548c commit 949fa2b

4 files changed

Lines changed: 43 additions & 7 deletions

File tree

benefits/enrollment_switchio/enrollment.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ class Token:
4646
par: str = None
4747

4848

49-
def request_registration(request, switchio_config: SwitchioConfig) -> RegistrationResponse:
49+
def request_registration(
50+
request, switchio_config: SwitchioConfig, redirect_route: str = routes.ENROLLMENT_SWITCHIO_INDEX
51+
) -> RegistrationResponse:
5052
try:
5153
client = TokenizationClient(
5254
api_url=switchio_config.tokenization_api_base_url,
@@ -57,7 +59,7 @@ def request_registration(request, switchio_config: SwitchioConfig) -> Registrati
5759
ca_certificate=switchio_config.ca_certificate_data,
5860
)
5961

60-
route = reverse(routes.ENROLLMENT_SWITCHIO_INDEX)
62+
route = reverse(redirect_route)
6163
redirect_url = _generate_redirect_uri(request, route)
6264

6365
registration = client.request_registration(

benefits/enrollment_switchio/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class GatewayUrlView(AgencySessionRequiredMixin, EligibleSessionRequiredMixin, V
104104
"""View for the tokenization gateway registration"""
105105

106106
enrollment_method = models.EnrollmentMethods.DIGITAL
107+
route_redirect = routes.ENROLLMENT_SWITCHIO_INDEX
107108
route_system_error = routes.ENROLLMENT_SYSTEM_ERROR
108109
route_server_error = routes.SERVER_ERROR
109110

@@ -136,7 +137,7 @@ def get(self, request: HttpRequest, *args, **kwargs):
136137
return JsonResponse(data)
137138

138139
def _request_registration(self, request: HttpRequest, switchio_config: SwitchioConfig, session: Session) -> JsonResponse:
139-
response = request_registration(request, switchio_config)
140+
response = request_registration(request, switchio_config, self.route_redirect)
140141

141142
if response.status is Status.SUCCESS:
142143
registration = response.registration

tests/pytest/enrollment_switchio/test_enrollment.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.conf import settings
2+
from django.urls import reverse
23
import pytest
34
from requests import HTTPError
45
from benefits.enrollment.enrollment import Status
@@ -8,7 +9,9 @@
89
get_registration_status,
910
request_registration,
1011
get_latest_active_token_value,
12+
_generate_redirect_uri,
1113
)
14+
from benefits.routes import routes
1215

1316

1417
@pytest.fixture
@@ -51,13 +54,42 @@ def mocked_group_expiry_with_expiry():
5154

5255
@pytest.mark.django_db
5356
@pytest.mark.usefixtures("mocked_api_base_url")
54-
def test_request_registration_success(mocker, app_request, model_SwitchioConfig, mocked_registration):
55-
mocker.patch(
56-
"benefits.enrollment_switchio.enrollment.TokenizationClient.request_registration", return_value=mocked_registration
57-
)
57+
def test_request_registration_success__default_redirect(
58+
mocker, app_request, model_SwitchioConfig, mocked_registration, settings
59+
):
60+
tokenization_client = mocker.patch("benefits.enrollment_switchio.enrollment.TokenizationClient").return_value
61+
tokenization_client.request_registration.return_value = mocked_registration
62+
expected_redirect = _generate_redirect_uri(app_request, reverse(routes.ENROLLMENT_SWITCHIO_INDEX))
5863

5964
registration_response = request_registration(app_request, model_SwitchioConfig)
6065

66+
tokenization_client.request_registration.assert_called_once_with(
67+
eshopRedirectUrl=expected_redirect,
68+
mode=RegistrationMode.REGISTER,
69+
eshopResponseMode=EshopResponseMode.QUERY,
70+
timeout=settings.REQUESTS_TIMEOUT,
71+
)
72+
assert registration_response.status == Status.SUCCESS
73+
assert registration_response.registration == mocked_registration
74+
75+
76+
@pytest.mark.django_db
77+
@pytest.mark.usefixtures("mocked_api_base_url")
78+
def test_request_registration_success__custom_redirect(
79+
mocker, app_request, model_SwitchioConfig, mocked_registration, settings
80+
):
81+
tokenization_client = mocker.patch("benefits.enrollment_switchio.enrollment.TokenizationClient").return_value
82+
tokenization_client.request_registration.return_value = mocked_registration
83+
expected_redirect = _generate_redirect_uri(app_request, reverse(routes.INDEX))
84+
85+
registration_response = request_registration(app_request, model_SwitchioConfig, routes.INDEX)
86+
87+
tokenization_client.request_registration.assert_called_once_with(
88+
eshopRedirectUrl=expected_redirect,
89+
mode=RegistrationMode.REGISTER,
90+
eshopResponseMode=EshopResponseMode.QUERY,
91+
timeout=settings.REQUESTS_TIMEOUT,
92+
)
6193
assert registration_response.status == Status.SUCCESS
6294
assert registration_response.registration == mocked_registration
6395

tests/pytest/enrollment_switchio/test_views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ def view(self, app_request, mocked_session_agency):
264264

265265
def test_view(self, view: GatewayUrlView):
266266
assert view.enrollment_method == models.EnrollmentMethods.DIGITAL
267+
assert view.route_redirect == routes.ENROLLMENT_SWITCHIO_INDEX
267268
assert view.route_system_error == routes.ENROLLMENT_SYSTEM_ERROR
268269
assert view.route_server_error == routes.SERVER_ERROR
269270

0 commit comments

Comments
 (0)