123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- from unittest.mock import Mock, patch
- import pytest
- from django.core.exceptions import ValidationError
- from ..exceptions import OAuth2UserDataValidationError
- from ..validation import validate_user_data
- def test_new_user_valid_data_is_validated(db, dynamic_settings):
- valid_data = validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "Test User",
- "email": "user@example.com",
- "avatar": None,
- },
- {},
- )
- assert valid_data == {
- "id": "1234",
- "name": "Test_User",
- "email": "user@example.com",
- "avatar": None,
- }
- def test_existing_user_valid_data_is_validated(user, dynamic_settings):
- valid_data = validate_user_data(
- Mock(settings=dynamic_settings),
- user,
- {
- "id": "1234",
- "name": user.username,
- "email": user.email,
- "avatar": None,
- },
- {},
- )
- assert valid_data == {
- "id": "1234",
- "name": user.username,
- "email": user.email,
- "avatar": None,
- }
- def user_noop_filter(*args):
- return None
- def test_error_was_raised_for_user_data_with_without_name(db, dynamic_settings):
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- # Custom filters disable build in filters
- with patch(
- "misago.oauth2.validation.oauth2_user_data_filters",
- [user_noop_filter],
- ):
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "",
- "email": "user@example.com",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == [
- "Username can only contain latin alphabet letters and digits."
- ]
- def test_error_was_raised_for_user_data_with_invalid_name(db, dynamic_settings):
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- # Custom filters disable build in filters
- with patch(
- "misago.oauth2.validation.oauth2_user_data_filters",
- [user_noop_filter],
- ):
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "Invalid!",
- "email": "user@example.com",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == [
- "Username can only contain latin alphabet letters and digits."
- ]
- def test_error_was_raised_for_user_data_with_too_long_name(db, dynamic_settings):
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- # Custom filters disable build in filters
- with patch(
- "misago.oauth2.validation.oauth2_user_data_filters",
- [user_noop_filter],
- ):
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "UserName" * 100,
- "email": "user@example.com",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == [
- "Username cannot be longer than 200 characters."
- ]
- def test_error_was_raised_for_user_data_without_email(db, dynamic_settings):
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "Test User",
- "email": "",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == ["Enter a valid email address."]
- def test_error_was_raised_for_user_data_with_invalid_email(db, dynamic_settings):
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "Test User",
- "email": "userexample.com",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == ["Enter a valid email address."]
- def custom_oauth2_validator(request, user, user_data, raw_data):
- if "bad" in user_data["name"].lower():
- raise ValidationError("Custom validation error!")
- def test_custom_oauth2_validator_passes_valid_data(db, dynamic_settings):
- user_data = {
- "id": "1234",
- "name": "UserName",
- "email": "user@example.com",
- "avatar": None,
- }
- with patch(
- "misago.oauth2.validation.oauth2_validators",
- [custom_oauth2_validator],
- ):
- assert (
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- user_data,
- {},
- )
- == user_data
- )
- def test_custom_oauth2_validator_raises_error_for_invalid_data(db, dynamic_settings):
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- with patch(
- "misago.oauth2.validation.oauth2_validators",
- [custom_oauth2_validator],
- ):
- validate_user_data(
- Mock(settings=dynamic_settings),
- None,
- {
- "id": "1234",
- "name": "UserNameBad",
- "email": "user@example.com",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == ["Custom validation error!"]
|