test_forgottenpassword_views.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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(test=BAN_USERNAME, banned_value='bob',
  26. user_message='Nope!')
  27. response = self.client.post(
  28. reverse('misago:request_password_reset'),
  29. data={'username': 'Bob'})
  30. self.assertEqual(response.status_code, 200)
  31. self.assertIn('Nope!', response.content)
  32. self.assertTrue(not mail.outbox)
  33. def test_view_submit_inactive(self):
  34. """request new password view errors for inactive users"""
  35. User = get_user_model()
  36. User.objects.create_user('Bob', 'bob@test.com', 'Pass.123',
  37. requires_activation=1)
  38. response = self.client.post(
  39. reverse('misago:request_password_reset'),
  40. data={'username': 'Bob'})
  41. self.assertEqual(response.status_code, 200)
  42. self.assertIn('activate', response.content)
  43. self.assertTrue(not mail.outbox)
  44. def test_change_password_on_banned(self):
  45. """change banned user password errors"""
  46. User = get_user_model()
  47. test_user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  48. old_password = test_user.password
  49. Ban.objects.create(test=BAN_USERNAME, banned_value='bob',
  50. user_message='Nope!')
  51. password_token = make_password_reset_token(test_user)
  52. response = self.client.get(
  53. reverse('misago:reset_password_form',
  54. kwargs={'user_id': test_user.pk, 'token': password_token}))
  55. self.assertEqual(response.status_code, 302)
  56. test_user = User.objects.get(pk=test_user.pk)
  57. self.assertEqual(test_user.password, old_password)
  58. self.assertTrue(not mail.outbox)
  59. def test_change_password_on_inactive(self):
  60. """change inactive user password errors"""
  61. User = get_user_model()
  62. test_user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123',
  63. requires_activation=1)
  64. old_password = test_user.password
  65. password_token = make_password_reset_token(test_user)
  66. response = self.client.get(
  67. reverse('misago:reset_password_form',
  68. kwargs={'user_id': test_user.pk, 'token': password_token}))
  69. self.assertEqual(response.status_code, 302)
  70. test_user = User.objects.get(pk=test_user.pk)
  71. self.assertEqual(test_user.password, old_password)
  72. self.assertTrue(not mail.outbox)
  73. def test_successful_change(self):
  74. """change user password"""
  75. User = get_user_model()
  76. test_user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  77. old_password = test_user.password
  78. password_token = make_password_reset_token(test_user)
  79. response = self.client.get(
  80. reverse('misago:reset_password_form',
  81. kwargs={'user_id': test_user.pk, 'token': password_token}))
  82. self.assertEqual(response.status_code, 200)
  83. self.assertIn('Set new password for Bob', response.content)
  84. test_user = User.objects.get(pk=test_user.pk)
  85. self.assertEqual(test_user.password, old_password)
  86. response = self.client.post(
  87. reverse('misago:reset_password_form',
  88. kwargs={'user_id': test_user.pk, 'token': password_token}),
  89. data={'new_password': 'loremipsum123'})
  90. self.assertEqual(response.status_code, 302)
  91. test_user = User.objects.get(pk=test_user.pk)
  92. self.assertNotEqual(test_user.password, old_password)