Skip to content

Commit f143329

Browse files
author
gabino
committed
Add validation for names and surnames in UserListsRequest
1 parent 1510efb commit f143329

2 files changed

Lines changed: 54 additions & 3 deletions

File tree

cuenca_validations/types/requests.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,19 @@ class UserListsRequest(BaseModel):
648648
@model_validator(mode='before')
649649
@classmethod
650650
def check_request(cls, values):
651+
if (
652+
values.get('first_surname') or values.get('second_surname')
653+
) and not values.get('names'):
654+
raise ValueError(
655+
'names is required when first_surname or second_surname '
656+
'is provided'
657+
)
658+
659+
if values.get('names') and not values.get('first_surname'):
660+
raise ValueError(
661+
'first_surname is required when names is provided'
662+
)
663+
651664
has_name = all(values.get(f) for f in ['names', 'first_surname'])
652665
curp, account, rfc = (
653666
values.get('curp'),

tests/test_types.py

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -583,9 +583,47 @@ def test_user_lists_request_valid_params(input_data):
583583
UserListsRequest(**input_data)
584584

585585

586-
def test_user_lists_request_invalid_params():
587-
with pytest.raises(ValueError):
588-
UserListsRequest(first_surname='Paramo', second_surname='Paramo')
586+
@pytest.mark.parametrize(
587+
'input_data,expected_error',
588+
[
589+
(
590+
{'first_surname': 'Paramo'},
591+
(
592+
'names is required when first_surname or second_surname '
593+
'is provided'
594+
),
595+
),
596+
(
597+
{'second_surname': 'Paramo'},
598+
(
599+
'names is required when first_surname or second_surname '
600+
'is provided'
601+
),
602+
),
603+
(
604+
{'first_surname': 'Paramo', 'second_surname': 'Paramo'},
605+
(
606+
'names is required when first_surname or second_surname '
607+
'is provided'
608+
),
609+
),
610+
(
611+
{'names': 'Juan'},
612+
'first_surname is required when names is provided',
613+
),
614+
(
615+
{'first_surname': 'Paramo', 'curp': 'GOCG650418HVZNML08'},
616+
(
617+
'names is required when first_surname or second_surname '
618+
'is provided'
619+
),
620+
),
621+
({}, 'At least 1 param is required'),
622+
],
623+
)
624+
def test_user_lists_request_invalid_params(input_data, expected_error):
625+
with pytest.raises(ValueError, match=expected_error):
626+
UserListsRequest(**input_data)
589627

590628

591629
class IntModel(BaseModel):

0 commit comments

Comments
 (0)