123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- from unittest.mock import Mock, patch
- import pytest
- from django.contrib.auth import get_user_model
- from ..exceptions import OAuth2UserDataValidationError
- from ..models import Subject
- from ..user import get_user_from_data
- User = get_user_model()
- def test_user_is_updated_with_valid_data(user, dynamic_settings):
- Subject.objects.create(sub="1234", user=user)
- updated_user, created = get_user_from_data(
- Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
- {
- "id": "1234",
- "name": "UpdatedName",
- "email": "updated@example.com",
- "avatar": None,
- },
- {},
- )
- assert created is False
- assert updated_user.id
- assert updated_user.id == user.id
- assert updated_user.username == "UpdatedName"
- assert updated_user.username != user.username
- assert updated_user.slug == "updatedname"
- assert updated_user.slug != user.slug
- assert updated_user.email == "updated@example.com"
- assert updated_user.email != user.email
- user_by_name = User.objects.get_by_username("UpdatedName")
- assert user_by_name.id == user.id
- user_by_email = User.objects.get_by_email("updated@example.com")
- assert user_by_email.id == user.id
- def test_user_is_not_updated_with_unchanged_valid_data(user, dynamic_settings):
- Subject.objects.create(sub="1234", user=user)
- updated_user, created = get_user_from_data(
- Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
- {
- "id": "1234",
- "name": user.username,
- "email": user.email,
- "avatar": None,
- },
- {},
- )
- assert created is False
- assert updated_user.id
- assert updated_user.id == user.id
- assert updated_user.username == "User"
- assert updated_user.username == user.username
- assert updated_user.slug == "user"
- assert updated_user.slug == user.slug
- assert updated_user.email == "user@example.com"
- assert updated_user.email == user.email
- user_by_name = User.objects.get_by_username("User")
- assert user_by_name.id == user.id
- user_by_email = User.objects.get_by_email("user@example.com")
- assert user_by_email.id == user.id
- def user_noop_filter(*args):
- pass
- def test_user_name_conflict_during_update_with_valid_data_is_handled(
- user, other_user, dynamic_settings
- ):
- Subject.objects.create(sub="1234", user=user)
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- # Custom filters disable build in filters
- with patch(
- "misago.oauth2.validation.oauth2_user_data_filters",
- [user_noop_filter],
- ):
- get_user_from_data(
- Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
- {
- "id": "1234",
- "name": other_user.username,
- "email": "test@example.com",
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == ["This username is not available."]
- def test_user_email_conflict_during_update_with_valid_data_is_handled(
- user, other_user, dynamic_settings
- ):
- Subject.objects.create(sub="1234", user=user)
- with pytest.raises(OAuth2UserDataValidationError) as excinfo:
- get_user_from_data(
- Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
- {
- "id": "1234",
- "name": "NewUser",
- "email": other_user.email,
- "avatar": None,
- },
- {},
- )
- assert excinfo.value.error_list == ["This e-mail address is not available."]
|