test_forgottenpassword_views.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from django.contrib.auth import get_user_model
  2. from django.core import mail
  3. from django.core.urlresolvers import reverse
  4. from django.test import TestCase
  5. from misago.users.models import Ban, BAN_USERNAME
  6. from misago.users.tokens import make_password_reset_token
  7. class ForgottenPasswordViewsTests(TestCase):
  8. def test_view_get_returns_200(self):
  9. """request new password view returns 200 on GET"""
  10. response = self.client.get(reverse('misago:request_password_reset'))
  11. self.assertEqual(response.status_code, 200)
  12. def test_view_submit(self):
  13. """request new password view sends reset link mail"""
  14. User = get_user_model()
  15. User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  16. response = self.client.post(
  17. reverse('misago:request_password_reset'),
  18. data={'username': 'Bob'})
  19. self.assertEqual(response.status_code, 302)
  20. self.assertIn('Change Bob password', mail.outbox[0].subject)
  21. def test_view_submit_banned(self):
  22. """request new password view errors for banned users"""
  23. User = get_user_model()
  24. User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  25. Ban.objects.create(check_type=BAN_USERNAME,
  26. banned_value='bob',
  27. user_message='Nope!')
  28. response = self.client.post(
  29. reverse('misago:request_password_reset'),
  30. data={'username': 'Bob'})
  31. self.assertEqual(response.status_code, 200)
  32. self.assertIn('Nope!', response.content)
  33. self.assertTrue(not mail.outbox)
  34. def test_view_submit_inactive(self):
  35. """request new password view errors for inactive users"""
  36. User = get_user_model()
  37. User.objects.create_user('Bob', 'bob@test.com', 'Pass.123',
  38. requires_activation=1)
  39. response = self.client.post(
  40. reverse('misago:request_password_reset'),
  41. data={'username': 'Bob'})
  42. self.assertEqual(response.status_code, 200)
  43. self.assertIn('activate', response.content)
  44. self.assertTrue(not mail.outbox)
  45. def test_change_password_on_banned(self):
  46. """change banned user password errors"""
  47. User = get_user_model()
  48. test_user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  49. old_password = test_user.password
  50. Ban.objects.create(check_type=BAN_USERNAME,
  51. banned_value='bob',
  52. user_message='Nope!')
  53. password_token = make_password_reset_token(test_user)
  54. response = self.client.get(
  55. reverse('misago:reset_password_form',
  56. kwargs={'user_id': test_user.pk, 'token': password_token}))
  57. self.assertEqual(response.status_code, 302)
  58. test_user = User.objects.get(pk=test_user.pk)
  59. self.assertEqual(test_user.password, old_password)
  60. self.assertTrue(not mail.outbox)
  61. def test_change_password_on_inactive(self):
  62. """change inactive user password errors"""
  63. User = get_user_model()
  64. test_user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123',
  65. requires_activation=1)
  66. old_password = test_user.password
  67. password_token = make_password_reset_token(test_user)
  68. response = self.client.get(
  69. reverse('misago:reset_password_form',
  70. kwargs={'user_id': test_user.pk, 'token': password_token}))
  71. self.assertEqual(response.status_code, 302)
  72. test_user = User.objects.get(pk=test_user.pk)
  73. self.assertEqual(test_user.password, old_password)
  74. self.assertTrue(not mail.outbox)
  75. def test_successful_change(self):
  76. """change user password"""
  77. User = get_user_model()
  78. test_user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  79. old_password = test_user.password
  80. password_token = make_password_reset_token(test_user)
  81. response = self.client.get(
  82. reverse('misago:reset_password_form',
  83. kwargs={'user_id': test_user.pk, 'token': password_token}))
  84. self.assertEqual(response.status_code, 200)
  85. self.assertIn('Set new password for Bob', response.content)
  86. test_user = User.objects.get(pk=test_user.pk)
  87. self.assertEqual(test_user.password, old_password)
  88. response = self.client.post(
  89. reverse('misago:reset_password_form',
  90. kwargs={'user_id': test_user.pk, 'token': password_token}),
  91. data={'new_password': 'loremipsum123'})
  92. self.assertEqual(response.status_code, 302)
  93. test_user = User.objects.get(pk=test_user.pk)
  94. self.assertNotEqual(test_user.password, old_password)