Skip to content

Commit bc915d1

Browse files
committed
feat: add handling for when not enrolled, but there is a Cardholder
1 parent 398ad47 commit bc915d1

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

‎benefits/enrollment_init/api.py‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,21 @@ class CardholderUpdateModel(BaseDataClass):
3838

3939
@dataclass
4040
class CardholderResponse(BaseDataClass):
41-
FareCategory: int
41+
FirstName: str | None = None
42+
MiddleName: str | None = None
43+
LastName: str | None = None
44+
PhoneNumber: str | None = None
45+
DateOfBirth: str | None = None
46+
Email: str | None = None
47+
CellPhoneNumber: str | None = None
48+
FaxNumber: str | None = None
49+
Gender: str | None = None
50+
Identifier: str | None = None
51+
FareCategory: int | None = None
4252
FareCategoryExpiry: datetime | None = None
53+
TransitAccountId: int | None = None
54+
PersonalCareAssistant: bool | None = None
55+
# there are more fields that can be returned, but we don't need them and they're not in the PUT parameters
4356

4457
def __post_init__(self):
4558
"""Parses any date parameters into aware Python datetime objects.

‎benefits/enrollment_init/enrollment.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
from dataclasses import asdict
2+
13
from requests import HTTPError
24

35
from benefits.core import session
46
from benefits.core.models.enrollment import EnrollmentFlow
57
from benefits.enrollment.enrollment import Status, resolve_enrollment_decision
68
from benefits.enrollment_init.models import InitConfig, InitGroup
79

8-
from .api import CardholderResponse, Client, TransitAccountResponse
10+
from .api import CardholderResponse, CardholderUpdateModel, Client, TransitAccountResponse
911

1012

1113
def enroll(request, init_config: InitConfig, flow: EnrollmentFlow, group: InitGroup, token: str):
@@ -35,7 +37,11 @@ def enroll(request, init_config: InitConfig, flow: EnrollmentFlow, group: InitGr
3537
elif decision.should_enroll:
3638
if not already_enrolled:
3739
if decision.expiry_to_send is None:
38-
client.post_cardholder(fare_category=group.group_id, transit_account_id=transit_account.Id)
40+
if cardholder is None:
41+
client.post_cardholder(fare_category=group.group_id, transit_account_id=transit_account.Id)
42+
else:
43+
cardholder_update_model = CardholderUpdateModel(**asdict(cardholder))
44+
client.put_cardholder(cardholder_id=cardholder.Id, cardholder_update_model=cardholder_update_model)
3945
else:
4046
# post_cardholder with expiry_to_send
4147
raise NotImplementedError()

‎tests/pytest/enrollment_init/test_enrollment.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def test_enroll_system_error(
4040
mock_error_response.json.return_value = mock_error
4141
http_error = HTTPError(response=mock_error_response)
4242
mock_client.post_cardholder.side_effect = http_error
43+
mock_client.get_cardholder.return_value = None
4344

4445
status, exception = enroll(
4546
request=app_request,
@@ -72,6 +73,7 @@ def test_enroll_exception_http_error_400(
7273
response=mock_error_response,
7374
)
7475
mock_client.post_cardholder.side_effect = http_error
76+
mock_client.get_cardholder.return_value = None
7577

7678
status, exception = enroll(
7779
request=app_request,
@@ -99,6 +101,7 @@ def test_enroll_exception_non_http_error(
99101
mock_client = mock_client_cls.return_value
100102

101103
mock_client.post_cardholder.side_effect = Exception("some other exception")
104+
mock_client.get_cardholder.return_value = None
102105

103106
status, exception = enroll(
104107
request=app_request,
@@ -128,6 +131,7 @@ def test_enroll_success_flow_does_not_support_expiration_no_expiry(
128131
mock_client = mock_client_cls.return_value
129132

130133
mock_client.get_transit_account.return_value = mocked_TransitAccountResponse
134+
mock_client.get_cardholder.return_value = None
131135

132136
status, exception = enroll(
133137
request=app_request,

0 commit comments

Comments
 (0)