test_user_data_validation.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. from unittest.mock import Mock, patch
  2. import pytest
  3. from ..exceptions import OAuth2UserDataValidationError
  4. from ..validation import validate_user_data
  5. def test_new_user_valid_data_is_validated(db, dynamic_settings):
  6. valid_data = validate_user_data(
  7. Mock(settings=dynamic_settings),
  8. None,
  9. {
  10. "id": "1234",
  11. "name": "Test User",
  12. "email": "user@example.com",
  13. "avatar": None,
  14. },
  15. )
  16. assert valid_data == {
  17. "id": "1234",
  18. "name": "Test_User",
  19. "email": "user@example.com",
  20. "avatar": None,
  21. }
  22. def test_existing_user_valid_data_is_validated(user, dynamic_settings):
  23. valid_data = validate_user_data(
  24. Mock(settings=dynamic_settings),
  25. user,
  26. {
  27. "id": "1234",
  28. "name": user.username,
  29. "email": user.email,
  30. "avatar": None,
  31. },
  32. )
  33. assert valid_data == {
  34. "id": "1234",
  35. "name": user.username,
  36. "email": user.email,
  37. "avatar": None,
  38. }
  39. def user_noop_filter(*args):
  40. return None
  41. def test_error_was_raised_for_user_data_with_without_name(db, dynamic_settings):
  42. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  43. # Custom filters disable build in filters
  44. with patch(
  45. "misago.oauth2.validation.oauth2_user_data_filters",
  46. [user_noop_filter],
  47. ):
  48. validate_user_data(
  49. Mock(settings=dynamic_settings),
  50. None,
  51. {
  52. "id": "1234",
  53. "name": "",
  54. "email": "user@example.com",
  55. "avatar": None,
  56. },
  57. )
  58. assert excinfo.value.error_list == [
  59. "Username can only contain latin alphabet letters and digits."
  60. ]
  61. def test_error_was_raised_for_user_data_with_invalid_name(db, dynamic_settings):
  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. validate_user_data(
  69. Mock(settings=dynamic_settings),
  70. None,
  71. {
  72. "id": "1234",
  73. "name": "Invalid!",
  74. "email": "user@example.com",
  75. "avatar": None,
  76. },
  77. )
  78. assert excinfo.value.error_list == [
  79. "Username can only contain latin alphabet letters and digits."
  80. ]
  81. def test_error_was_raised_for_user_data_with_too_long_name(db, dynamic_settings):
  82. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  83. # Custom filters disable build in filters
  84. with patch(
  85. "misago.oauth2.validation.oauth2_user_data_filters",
  86. [user_noop_filter],
  87. ):
  88. validate_user_data(
  89. Mock(settings=dynamic_settings),
  90. None,
  91. {
  92. "id": "1234",
  93. "name": "UserName" * 100,
  94. "email": "user@example.com",
  95. "avatar": None,
  96. },
  97. )
  98. assert excinfo.value.error_list == [
  99. "Username cannot be longer than 200 characters."
  100. ]
  101. def test_error_was_raised_for_user_data_without_email(db, dynamic_settings):
  102. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  103. validate_user_data(
  104. Mock(settings=dynamic_settings),
  105. None,
  106. {
  107. "id": "1234",
  108. "name": "Test User",
  109. "email": "",
  110. "avatar": None,
  111. },
  112. )
  113. assert excinfo.value.error_list == ["Enter a valid email address."]
  114. def test_error_was_raised_for_user_data_with_invalid_email(db, dynamic_settings):
  115. with pytest.raises(OAuth2UserDataValidationError) as excinfo:
  116. validate_user_data(
  117. Mock(settings=dynamic_settings),
  118. None,
  119. {
  120. "id": "1234",
  121. "name": "Test User",
  122. "email": "userexample.com",
  123. "avatar": None,
  124. },
  125. )
  126. assert excinfo.value.error_list == ["Enter a valid email address."]