test_forgottenpassword_views.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. from django.contrib.auth import get_user_model
  2. from django.urls import reverse
  3. from misago.core.utils import encode_json_html
  4. from misago.users.models import Ban
  5. from misago.users.testutils import UserTestCase
  6. from misago.users.tokens import make_password_change_token
  7. UserModel = get_user_model()
  8. class ForgottenPasswordViewsTests(UserTestCase):
  9. def test_guest_request_view_returns_200(self):
  10. """request new password view returns 200 for guests"""
  11. response = self.client.get(reverse('misago:forgotten-password'))
  12. self.assertEqual(response.status_code, 200)
  13. def test_authenticated_request_view_returns_200(self):
  14. """request new password view returns 200 for authenticated"""
  15. self.login_user(self.get_authenticated_user())
  16. response = self.client.get(reverse('misago:forgotten-password'))
  17. self.assertEqual(response.status_code, 200)
  18. def test_authenticated_request_unusable_password_view_returns_200(self):
  19. """request new password view returns 200 for authenticated with unusable password"""
  20. user = self.get_authenticated_user()
  21. user.set_password(None)
  22. user.save()
  23. self.assertFalse(user.has_usable_password())
  24. self.login_user(user)
  25. response = self.client.get(reverse('misago:forgotten-password'))
  26. self.assertEqual(response.status_code, 200)
  27. def test_change_password_on_banned(self):
  28. """change banned user password errors"""
  29. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  30. Ban.objects.create(
  31. check_type=Ban.USERNAME,
  32. banned_value='bob',
  33. user_message='Nope!',
  34. )
  35. password_token = make_password_change_token(test_user)
  36. response = self.client.get(
  37. reverse(
  38. 'misago:forgotten-password-change-form',
  39. kwargs={
  40. 'pk': test_user.pk,
  41. 'token': password_token,
  42. },
  43. )
  44. )
  45. self.assertContains(response, encode_json_html("<p>Nope!</p>"), status_code=403)
  46. def test_change_password_on_other_user(self):
  47. """change other user password errors"""
  48. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  49. password_token = make_password_change_token(test_user)
  50. self.login_user(self.get_authenticated_user())
  51. response = self.client.get(
  52. reverse(
  53. 'misago:forgotten-password-change-form',
  54. kwargs={
  55. 'pk': test_user.pk,
  56. 'token': password_token,
  57. },
  58. )
  59. )
  60. self.assertContains(response, 'your link has expired', status_code=400)
  61. def test_change_password_invalid_token(self):
  62. """invalid form token errors"""
  63. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  64. response = self.client.get(
  65. reverse(
  66. 'misago:forgotten-password-change-form',
  67. kwargs={
  68. 'pk': test_user.pk,
  69. 'token': 'abcdfghqsads',
  70. },
  71. )
  72. )
  73. self.assertContains(response, 'your link is invalid', status_code=400)
  74. def test_change_password_form(self):
  75. """change user password form displays for valid token"""
  76. test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  77. password_token = make_password_change_token(test_user)
  78. response = self.client.get(
  79. reverse(
  80. 'misago:forgotten-password-change-form',
  81. kwargs={
  82. 'pk': test_user.pk,
  83. 'token': password_token,
  84. },
  85. )
  86. )
  87. self.assertContains(response, password_token)
  88. def test_change_password_unusable_password_form(self):
  89. """set user first password form displays for valid token"""
  90. test_user = UserModel.objects.create_user('Bob', 'bob@test.com')
  91. password_token = make_password_change_token(test_user)
  92. response = self.client.get(
  93. reverse(
  94. 'misago:forgotten-password-change-form',
  95. kwargs={
  96. 'pk': test_user.pk,
  97. 'token': password_token,
  98. },
  99. )
  100. )
  101. self.assertContains(response, password_token)