test_user_creation_from_data.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from unittest.mock import Mock, patch
  2. import pytest
  3. from django.contrib.auth import get_user_model
  4. from ...conf.test import override_dynamic_settings
  5. from ..exceptions import OAuth2UserDataValidationError
  6. from ..models import Subject
  7. from ..user import get_user_from_data
  8. User = get_user_model()
  9. def test_activated_user_is_created_from_valid_data(db, dynamic_settings):
  10. user, created = get_user_from_data(
  11. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  12. {
  13. "id": "1234",
  14. "name": "NewUser",
  15. "email": "user@example.com",
  16. "avatar": None,
  17. },
  18. )
  19. assert created
  20. assert user.id
  21. assert user.username == "NewUser"
  22. assert user.slug == "newuser"
  23. assert user.email == "user@example.com"
  24. assert user.requires_activation == User.ACTIVATION_NONE
  25. user_by_name = User.objects.get_by_username("NewUser")
  26. assert user_by_name.id == user.id
  27. user_by_email = User.objects.get_by_email("user@example.com")
  28. assert user_by_email.id == user.id
  29. def test_user_subject_is_created_from_valid_data(db, dynamic_settings):
  30. user, created = get_user_from_data(
  31. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  32. {
  33. "id": "1234",
  34. "name": "NewUser",
  35. "email": "user@example.com",
  36. "avatar": None,
  37. },
  38. )
  39. assert created
  40. assert user
  41. user_subject = Subject.objects.get(sub="1234")
  42. assert user_subject.user_id == user.id
  43. def test_user_is_created_with_avatar_from_valid_data(db, dynamic_settings):
  44. user, created = get_user_from_data(
  45. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  46. {
  47. "id": "1234",
  48. "name": "NewUser",
  49. "email": "user@example.com",
  50. "avatar": "https://placekitten.com/600/500",
  51. },
  52. )
  53. assert created
  54. assert user
  55. assert user.avatars
  56. assert user.avatar_set.exists()
  57. @override_dynamic_settings(account_activation="admin")
  58. def test_user_is_created_with_admin_activation_from_valid_data(db, dynamic_settings):
  59. user, created = get_user_from_data(
  60. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  61. {
  62. "id": "1234",
  63. "name": "NewUser",
  64. "email": "user@example.com",
  65. "avatar": None,
  66. },
  67. )
  68. assert created
  69. assert user
  70. assert user.requires_activation == User.ACTIVATION_ADMIN
  71. def user_noop_filter(*args):
  72. pass
  73. def test_user_name_conflict_during_creation_from_valid_data_is_handled(
  74. user, dynamic_settings
  75. ):
  76. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  77. # Custom filters disable build in filters
  78. with patch(
  79. "misago.oauth2.validation.oauth2_user_data_filters",
  80. [user_noop_filter],
  81. ):
  82. get_user_from_data(
  83. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  84. {
  85. "id": "1234",
  86. "name": user.username,
  87. "email": "test@example.com",
  88. "avatar": None,
  89. },
  90. )
  91. assert excinfo.value.error_list == ["This username is not available."]
  92. def test_user_email_conflict_during_creation_from_valid_data_is_handled(
  93. user, dynamic_settings
  94. ):
  95. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  96. get_user_from_data(
  97. Mock(settings=dynamic_settings, user_ip="83.0.0.1"),
  98. {
  99. "id": "1234",
  100. "name": "NewUser",
  101. "email": user.email,
  102. "avatar": None,
  103. },
  104. )
  105. assert excinfo.value.error_list == ["This e-mail address is not available."]