Skip to content

Commit 3f41ae4

Browse files
committed
enhance phone number validation to enforce E.164 format and update tests
1 parent 74f9819 commit 3f41ae4

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

packages/models-library/src/models_library/api_schemas_webserver/users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def _validate_user_name(cls, value: str):
213213
#
214214

215215

216-
PhoneNumberStr: TypeAlias = Annotated[str, PhoneNumberValidator()]
216+
PhoneNumberStr: TypeAlias = Annotated[str, PhoneNumberValidator(number_format="E164")]
217217

218218

219219
class MyPhoneRegister(InputSchema):

packages/models-library/tests/test_users.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,20 @@ def test_valid_phone_numbers(phone: str):
4343
).validate_python(phone)
4444

4545

46+
@pytest.mark.parametrize(
47+
"phone",
48+
[
49+
"+41763456789",
50+
"+41 76 345 67 89",
51+
"tel:+41-76-345-67-89",
52+
],
53+
ids=["E.164", "INTERNATIONAL", "RFC3966"],
54+
)
55+
def test_autoformat_phone_number_to_e164(phone: str):
56+
# This test is used to tune options of PhoneNumberValidator formatting to E164
57+
assert TypeAdapter(PhoneNumberStr).validate_python(phone) == "+41763456789"
58+
59+
4660
@pytest.mark.parametrize(
4761
"phone",
4862
["41763456789", "+09104630364", "+1 111-304-4567"],

services/web/server/tests/conftest.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,11 @@ async def user(client: TestClient) -> AsyncIterator[UserInfoDict]:
157157

158158
@pytest.fixture
159159
def user_phone(faker: Faker) -> PhoneNumberStr:
160-
phone = faker.phone_number()
160+
phone = faker.random_element(["+41763456789", "+19104630364", "+13013044567"])
161161
tail = f"{faker.pyint(100, 999)}"
162-
valid_phone = phone[: -len(tail)] + tail # ensure phone is 10 digits long
163-
return TypeAdapter(PhoneNumberStr).validate_python(valid_phone)
162+
valid_phone = phone[: -len(tail)] + tail # ensure phone keeps its length
163+
assert TypeAdapter(PhoneNumberStr).validate_python(valid_phone) == valid_phone
164+
return valid_phone
164165

165166

166167
@pytest.fixture

0 commit comments

Comments
 (0)