Skip to content

Commit

Permalink
fixed tests for user_name() and user_language()
Browse files Browse the repository at this point in the history
  • Loading branch information
alessandrodi committed Sep 27, 2024
1 parent 7a75bee commit 17f767a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 31 deletions.
5 changes: 5 additions & 0 deletions src/eduid/webapp/personal_data/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@ class PersonalDataSchema(EduidSchema):
legal_name = fields.String(required=False)
language = fields.String(required=True, attribute="preferredLanguage")


class UserNameRequestSchema(EduidSchema, CSRFRequestMixin):
given_name = fields.String(required=True, validate=[validate_nonempty])
chosen_given_name = fields.String(required=False)
surname = fields.String(required=True, validate=[validate_nonempty])
legal_name = fields.String(required=False)


class UserNameSchema(EduidSchema):
given_name = fields.String(required=True, attribute="givenName")
chosen_given_name = fields.String(required=False)
Expand All @@ -43,9 +45,11 @@ class UserNameSchema(EduidSchema):
class UserLanguageRequestSchema(EduidSchema, CSRFRequestMixin):
language = fields.String(required=True, default="en", validate=validate_language)


class UserLanguageSchema(EduidSchema):
language = fields.String(required=True, attribute="preferredLanguage")


class UserPreferencesSchema(EduidSchema):
always_use_security_key = fields.Boolean(required=True, default=True)

Expand All @@ -67,6 +71,7 @@ class PersonalDataResponsePayload(PersonalDataSchema, CSRFResponseMixin):

payload = fields.Nested(PersonalDataResponsePayload)


class UserNameResponseSchema(FluxStandardAction):
class UserNameResponsePayload(UserNameSchema, CSRFResponseMixin):
pass
Expand Down
42 changes: 19 additions & 23 deletions src/eduid/webapp/personal_data/tests/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,6 @@ def _post_user_language(
mock_request_user_sync.side_effect = self.request_user_sync
eppn = self.test_user_data["eduPersonPrincipalName"]

if not verified_user:
# Remove verified identities from the users
user = self.app.central_userdb.get_user_by_eppn(eppn)
for identity in user.identities.verified:
user.identities.remove(ElementKey(identity.identity_type.value))
self.app.central_userdb.save(user)

with self.session_cookie(self.browser, eppn) as client:
with self.app.test_request_context():
with client.session_transaction() as sess:
Expand Down Expand Up @@ -270,14 +263,16 @@ def test_post_user_name(self):
"surname": "Johnson",
"given_name": "Peter",
}
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_NAME_SUCCESS", payload=expected_payload)

def test_post_user_language(self):
response = self._post_user_language(verified_user=False)
expected_payload = {
"language": "en",
}
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)
self._check_success_response(
response, type_="POST_PERSONAL_DATA_USER_LANGUAGE_SUCCESS", payload=expected_payload
)

def test_set_chosen_given_name_and_language_verified_user(self):
expected_payload = {
Expand All @@ -294,15 +289,16 @@ def test_post_user_name_set_chosen_given_name_verified_user(self):
"given_name": "John",
}
response = self._post_user_name(mod_data=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_NAME_SUCCESS", payload=expected_payload)

def test_post_user_language_set_language_verified_user(self):
expected_payload = {
"language": "sv",
}
response = self._post_user_language(mod_data=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)

self._check_success_response(
response, type_="POST_PERSONAL_DATA_USER_LANGUAGE_SUCCESS", payload=expected_payload
)

def test_set_given_name_and_surname_verified_user(self):
mod_data = {
Expand All @@ -328,7 +324,7 @@ def test_post_user_name_set_given_name_and_surname_verified_user(self):
"given_name": "John",
}
response = self._post_user_name(mod_data=mod_data)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_NAME_SUCCESS", payload=expected_payload)

def test_post_user_bad_csrf(self):
response = self._post_user(mod_data={"csrf_token": "wrong-token"})
Expand All @@ -338,7 +334,7 @@ def test_post_user_bad_csrf(self):
def test_post_user__name_bad_csrf(self):
response = self._post_user_name(mod_data={"csrf_token": "wrong-token"})
expected_payload = {"error": {"csrf_token": ["CSRF failed to validate"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_NAME_FAIL", payload=expected_payload)

def test_post_user_no_given_name(self):
response = self._post_user(mod_data={"given_name": ""})
Expand All @@ -348,7 +344,7 @@ def test_post_user_no_given_name(self):
def test_post_user_name_no_given_name(self):
response = self._post_user_name(mod_data={"given_name": ""})
expected_payload = {"error": {"given_name": ["pdata.field_required"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_NAME_FAIL", payload=expected_payload)

def test_post_user_blank_given_name(self):
response = self._post_user(mod_data={"given_name": " "})
Expand All @@ -358,7 +354,7 @@ def test_post_user_blank_given_name(self):
def test_post_user_name_blank_given_name(self):
response = self._post_user_name(mod_data={"given_name": " "})
expected_payload = {"error": {"given_name": ["pdata.field_required"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_NAME_FAIL", payload=expected_payload)

def test_post_user_no_surname(self):
response = self._post_user(mod_data={"surname": ""})
Expand All @@ -368,7 +364,7 @@ def test_post_user_no_surname(self):
def test_post_user_name_no_surname(self):
response = self._post_user_name(mod_data={"surname": ""})
expected_payload = {"error": {"surname": ["pdata.field_required"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_NAME_FAIL", payload=expected_payload)

def test_post_user_blank_surname(self):
response = self._post_user(mod_data={"surname": " "})
Expand All @@ -378,7 +374,7 @@ def test_post_user_blank_surname(self):
def test_post_user_name_blank_surname(self):
response = self._post_user_name(mod_data={"surname": " "})
expected_payload = {"error": {"surname": ["pdata.field_required"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_NAME_FAIL", payload=expected_payload)

def test_post_user_with_chosen_given_name(self):
response = self._post_user(mod_data={"chosen_given_name": "Peter"}, verified_user=False)
Expand All @@ -397,7 +393,7 @@ def test_post_user_name_with_chosen_given_name(self):
"given_name": "Peter",
"chosen_given_name": "Peter",
}
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_NAME_SUCCESS", payload=expected_payload)

def test_post_user_with_bad_chosen_given_name(self):
response = self._post_user(mod_data={"chosen_given_name": "Michael"}, verified_user=False)
Expand All @@ -408,7 +404,7 @@ def test_post_user_with_bad_chosen_given_name(self):
def test_post_user_name_with_bad_chosen_given_name(self):
response = self._post_user_name(mod_data={"chosen_given_name": "Michael"}, verified_user=False)
self._check_error_response(
response, type_="POST_PERSONAL_DATA_USER_FAIL", msg=PDataMsg.chosen_given_name_invalid
response, type_="POST_PERSONAL_DATA_USER_NAME_FAIL", msg=PDataMsg.chosen_given_name_invalid
)

def test_post_user_to_unset_chosen_given_name(self):
Expand Down Expand Up @@ -438,7 +434,7 @@ def test_post_user_name_to_unset_chosen_given_name(self):
"surname": "Johnson",
"given_name": "Peter",
}
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_SUCCESS", payload=expected_payload)
self._check_success_response(response, type_="POST_PERSONAL_DATA_USER_NAME_SUCCESS", payload=expected_payload)

def test_post_user_no_language(self):
response = self._post_user(mod_data={"language": ""})
Expand All @@ -448,7 +444,7 @@ def test_post_user_no_language(self):
def test_post_user_language_no_language(self):
response = self._post_user_language(mod_data={"language": ""})
expected_payload = {"error": {"language": ["Language '' is not available"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_LANGUAGE_FAIL", payload=expected_payload)

def test_post_user_unknown_language(self):
response = self._post_user(mod_data={"language": "es"})
Expand All @@ -458,7 +454,7 @@ def test_post_user_unknown_language(self):
def test_post_user_language_unknown_language(self):
response = self._post_user_language(mod_data={"language": "es"})
expected_payload = {"error": {"language": ["Language 'es' is not available"]}}
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_FAIL", payload=expected_payload)
self._check_error_response(response, type_="POST_PERSONAL_DATA_USER_LANGUAGE_FAIL", payload=expected_payload)

def test_get_preferences(self):
response = self._get_preferences()
Expand Down
14 changes: 6 additions & 8 deletions src/eduid/webapp/personal_data/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from eduid.common.decorators import deprecated
from flask import Blueprint

from eduid.common.config.base import FrontendAction
from eduid.common.decorators import deprecated
from eduid.userdb import User
from eduid.userdb.exceptions import UserOutOfSync
from eduid.userdb.personal_data import PersonalDataUser
Expand Down Expand Up @@ -49,7 +49,7 @@ def get_user(user: User) -> FluxData:
return success_response(payload=user.to_dict())


@deprecated("update_personal_data view is deprecated, use update_user_name or update_user_language view instead")
@deprecated("update_personal_data view is deprecated, use update_user_name or update_user_language view instead")
@pd_views.route("/user", methods=["POST"])
@UnmarshalWith(PersonalDataRequestSchema)
@MarshalWith(PersonalDataResponseSchema)
Expand Down Expand Up @@ -88,13 +88,12 @@ def update_personal_data(
personal_data = personal_data_user.to_dict()
return success_response(payload=personal_data, message=PDataMsg.save_success)


@pd_views.route("/user/name", methods=["POST"])
@UnmarshalWith(UserNameRequestSchema)
@MarshalWith(UserNameResponseSchema)
@require_user
def update_user_name(
user: User, given_name: str, surname: str, chosen_given_name: str | None = None
) -> FluxData:
def update_user_name(user: User, given_name: str, surname: str, chosen_given_name: str | None = None) -> FluxData:
personal_data_user = PersonalDataUser.from_user(user, current_app.private_userdb)
current_app.logger.debug(f"Trying to save user {user}")

Expand Down Expand Up @@ -125,13 +124,12 @@ def update_user_name(
personal_data = personal_data_user.to_dict()
return success_response(payload=personal_data, message=PDataMsg.save_success)


@pd_views.route("/user/language", methods=["POST"])
@UnmarshalWith(UserLanguageRequestSchema)
@MarshalWith(UserLanguageResponseSchema)
@require_user
def update_user_language(
user: User, language: str
) -> FluxData:
def update_user_language(user: User, language: str) -> FluxData:
personal_data_user = PersonalDataUser.from_user(user, current_app.private_userdb)
current_app.logger.debug(f"Trying to save user {user}")

Expand Down

0 comments on commit 17f767a

Please sign in to comment.