test_user_update_with_data.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. assert created is False
  20. assert updated_user.id
  21. assert updated_user.id == user.id
  22. assert updated_user.username == "UpdatedName"
  23. assert updated_user.username != user.username
  24. assert updated_user.slug == "updatedname"
  25. assert updated_user.slug != user.slug
  26. assert updated_user.email == "updated@example.com"
  27. assert updated_user.email != user.email
  28. user_by_name = User.objects.get_by_username("UpdatedName")
  29. assert user_by_name.id == user.id
  30. user_by_email = User.objects.get_by_email("updated@example.com")
  31. assert user_by_email.id == user.id
  32. def test_user_is_not_updated_with_unchanged_valid_data(user, dynamic_settings):
  33. Subject.objects.create(sub="1234", user=user)
  34. updated_user, created = get_user_from_data(
  35. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  36. {
  37. "id": "1234",
  38. "name": user.username,
  39. "email": user.email,
  40. "avatar": None,
  41. },
  42. )
  43. assert created is False
  44. assert updated_user.id
  45. assert updated_user.id == user.id
  46. assert updated_user.username == "User"
  47. assert updated_user.username == user.username
  48. assert updated_user.slug == "user"
  49. assert updated_user.slug == user.slug
  50. assert updated_user.email == "user@example.com"
  51. assert updated_user.email == user.email
  52. user_by_name = User.objects.get_by_username("User")
  53. assert user_by_name.id == user.id
  54. user_by_email = User.objects.get_by_email("user@example.com")
  55. assert user_by_email.id == user.id
  56. def user_noop_filter(*args):
  57. pass
  58. def test_user_name_conflict_during_update_with_valid_data_is_handled(
  59. user, other_user, dynamic_settings
  60. ):
  61. Subject.objects.create(sub="1234", user=user)
  62. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  63. # Custom filters disable build in filters
  64. with patch(
  65. "misago.oauth2.validation.oauth2_user_data_filters",
  66. [user_noop_filter],
  67. ):
  68. get_user_from_data(
  69. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  70. {
  71. "id": "1234",
  72. "name": other_user.username,
  73. "email": "test@example.com",
  74. "avatar": None,
  75. },
  76. )
  77. assert excinfo.value.error_list == ["This username is not available."]
  78. def test_user_email_conflict_during_update_with_valid_data_is_handled(
  79. user, other_user, dynamic_settings
  80. ):
  81. Subject.objects.create(sub="1234", user=user)
  82. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  83. get_user_from_data(
  84. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  85. {
  86. "id": "1234",
  87. "name": "NewUser",
  88. "email": other_user.email,
  89. "avatar": None,
  90. },
  91. )
  92. assert excinfo.value.error_list == ["This e-mail address is not available."]