test_user_creation_from_data.py 3.7 KB

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