diff --git a/app/core/users/schemas_users.py b/app/core/users/schemas_users.py index 7007574da6..5bd27124b0 100644 --- a/app/core/users/schemas_users.py +++ b/app/core/users/schemas_users.py @@ -17,9 +17,9 @@ class CoreUserBase(BaseModel): firstname: str nickname: str | None = None - _normalize_name = field_validator("name")(validators.trailing_spaces_remover) + _normalize_name = field_validator("name")(validators.name_normalizer) _normalize_firstname = field_validator("firstname")( - validators.trailing_spaces_remover, + validators.name_normalizer, ) _normalize_nickname = field_validator("nickname")( validators.trailing_spaces_remover, @@ -125,7 +125,7 @@ class CoreBatchUserCreateRequest(BaseModel): The schema is used for batch account creation requests. """ - email: str + email: EmailStr default_group_id: str | None = None # Email normalization, this will modify the email variable diff --git a/app/utils/validators.py b/app/utils/validators.py index 7d57a3adb2..2ca95a3b41 100644 --- a/app/utils/validators.py +++ b/app/utils/validators.py @@ -46,6 +46,15 @@ def email_normalizer(email: str) -> str: return email.lower().strip() +def name_normalizer(name: str) -> str: + """ + Normalize a name by changing its capitalization. We also remove trailing spaces. + This function is intended to be used as a Pydantic validator: + https://pydantic-docs.helpmanual.io/usage/validators/#reuse-validators + """ + return name.strip().title() + + def trailing_spaces_remover(value: str | None) -> str | None: """ Remove trailing spaces. diff --git a/tests/test_booking.py b/tests/test_booking.py index db95c6704b..c95dd25b29 100644 --- a/tests/test_booking.py +++ b/tests/test_booking.py @@ -190,7 +190,7 @@ def test_get_user_bookings_manage_confirmed(client: TestClient) -> None: ) assert response.status_code == 200 assert booking_id in [booking["id"] for booking in response.json()] - assert response.json()[0]["applicant"].get("name", None) == simple_user.name + assert response.json()[0]["applicant"].get("name", None) == simple_user.name.title() assert response.json()[0]["applicant"].get("email", None) == simple_user.email @@ -200,7 +200,7 @@ def test_get_bookings_confirmed(client: TestClient) -> None: headers={"Authorization": f"Bearer {token_manager}"}, ) assert response.status_code == 200 - assert response.json()[0]["applicant"].get("name", None) == simple_user.name + assert response.json()[0]["applicant"].get("name", None) == simple_user.name.title() assert response.json()[0]["applicant"].get("email", None) is None diff --git a/tests/test_phonebook.py b/tests/test_phonebook.py index 8ad8aa77ae..afa32ca1c3 100644 --- a/tests/test_phonebook.py +++ b/tests/test_phonebook.py @@ -523,8 +523,8 @@ def test_add_membership_admin_with_president_tag(client: TestClient): user_simple3 = members[0] assert user_simple3["id"] == phonebook_user_simple3.id - assert user_simple3["name"] == phonebook_user_simple3.name - assert user_simple3["firstname"] == phonebook_user_simple3.firstname + assert user_simple3["name"] == phonebook_user_simple3.name.title() + assert user_simple3["firstname"] == phonebook_user_simple3.firstname.title() assert user_simple3["email"] == phonebook_user_simple3.email assert len(user_simple3["memberships"]) == 1 assert user_simple3["memberships"][0]["association_id"] == association3.id diff --git a/tests/test_schools.py b/tests/test_schools.py index 351311dbb6..f1e30bebb6 100644 --- a/tests/test_schools.py +++ b/tests/test_schools.py @@ -215,7 +215,8 @@ def test_create_user_corresponding_to_school( user = next( user for user in users.json() - if user["firstname"] == "new_user_firstname" and user["name"] == "new_user_name" + if user["firstname"] == "new_user_firstname".title() + and user["name"] == "new_user_name".title() ) user_detail = client.get( diff --git a/tests/test_users.py b/tests/test_users.py index a4c0e26b19..de34022785 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -236,7 +236,9 @@ def test_create_and_activate_user( "/users/", headers={"Authorization": f"Bearer {token_admin_user}"}, ) - user = next(user for user in users.json() if user["name"] == email.split("@")[0]) + user = next( + user for user in users.json() if user["name"] == email.split("@")[0].title() + ) assert user is not None assert user["account_type"] == expected_account_type.value