test_user_update_with_data.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from unittest.mock import Mock, patch
  2. import pytest
  3. from django.contrib.auth import get_user_model
  4. from ..exceptions import OAuth2UserDataValidationError
  5. from ..models import Subject
  6. from ..user import get_user_from_data
  7. User = get_user_model()
  8. def test_user_is_updated_with_valid_data(user, dynamic_settings):
  9. Subject.objects.create(sub="1234", user=user)
  10. updated_user, created = get_user_from_data(
  11. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  12. {
  13. "id": "1234",
  14. "name": "UpdatedName",
  15. "email": "updated@example.com",
  16. "avatar": None,
  17. },
  18. {},
  19. )
  20. assert created is False
  21. assert updated_user.id
  22. assert updated_user.id == user.id
  23. assert updated_user.username == "UpdatedName"
  24. assert updated_user.username != user.username
  25. assert updated_user.slug == "updatedname"
  26. assert updated_user.slug != user.slug
  27. assert updated_user.email == "updated@example.com"
  28. assert updated_user.email != user.email
  29. user_by_name = User.objects.get_by_username("UpdatedName")
  30. assert user_by_name.id == user.id
  31. user_by_email = User.objects.get_by_email("updated@example.com")
  32. assert user_by_email.id == user.id
  33. def test_user_is_not_updated_with_unchanged_valid_data(user, dynamic_settings):
  34. Subject.objects.create(sub="1234", user=user)
  35. updated_user, created = get_user_from_data(
  36. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  37. {
  38. "id": "1234",
  39. "name": user.username,
  40. "email": user.email,
  41. "avatar": None,
  42. },
  43. {},
  44. )
  45. assert created is False
  46. assert updated_user.id
  47. assert updated_user.id == user.id
  48. assert updated_user.username == "User"
  49. assert updated_user.username == user.username
  50. assert updated_user.slug == "user"
  51. assert updated_user.slug == user.slug
  52. assert updated_user.email == "user@example.com"
  53. assert updated_user.email == user.email
  54. user_by_name = User.objects.get_by_username("User")
  55. assert user_by_name.id == user.id
  56. user_by_email = User.objects.get_by_email("user@example.com")
  57. assert user_by_email.id == user.id
  58. def user_noop_filter(*args):
  59. pass
  60. def test_user_name_conflict_during_update_with_valid_data_is_handled(
  61. user, other_user, dynamic_settings
  62. ):
  63. Subject.objects.create(sub="1234", user=user)
  64. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  65. # Custom filters disable build in filters
  66. with patch(
  67. "misago.oauth2.validation.oauth2_user_data_filters",
  68. [user_noop_filter],
  69. ):
  70. get_user_from_data(
  71. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  72. {
  73. "id": "1234",
  74. "name": other_user.username,
  75. "email": "test@example.com",
  76. "avatar": None,
  77. },
  78. {},
  79. )
  80. assert excinfo.value.error_list == ["This username is not available."]
  81. def test_user_email_conflict_during_update_with_valid_data_is_handled(
  82. user, other_user, dynamic_settings
  83. ):
  84. Subject.objects.create(sub="1234", user=user)
  85. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  86. get_user_from_data(
  87. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  88. {
  89. "id": "1234",
  90. "name": "NewUser",
  91. "email": other_user.email,
  92. "avatar": None,
  93. },
  94. {},
  95. )
  96. assert excinfo.value.error_list == ["This e-mail address is not available."]