test_changepassword_api.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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_change_token
  7. class SendLinkAPITests(TestCase):
  8. def setUp(self):
  9. User = get_user_model()
  10. self.user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  11. self.link = reverse('misago:api:change_password_send_link')
  12. def test_submit_valid(self):
  13. """request change password form link api sends reset link mail"""
  14. response = self.client.post(self.link, data={'email': self.user.email})
  15. self.assertEqual(response.status_code, 200)
  16. self.assertIn('Change Bob password', mail.outbox[0].subject)
  17. def test_submit_invalid(self):
  18. """request change password form link api errors for invalid email"""
  19. response = self.client.post(self.link, data={'email': 'fake@mail.com'})
  20. self.assertEqual(response.status_code, 400)
  21. self.assertIn('not_found', response.content)
  22. self.assertTrue(not mail.outbox)
  23. def test_submit_banned(self):
  24. """request change password form link api errors for banned users"""
  25. Ban.objects.create(check_type=BAN_USERNAME,
  26. banned_value=self.user.username,
  27. user_message='Nope!')
  28. response = self.client.post(self.link, data={'email': self.user.email})
  29. self.assertEqual(response.status_code, 400)
  30. self.assertIn('Nope!', response.content)
  31. self.assertTrue(not mail.outbox)
  32. def test_view_submit_inactive_user(self):
  33. """request change password form link api errors for inactive users"""
  34. self.user.requires_activation = 1
  35. self.user.save()
  36. response = self.client.post(self.link, data={'email': self.user.email})
  37. self.assertEqual(response.status_code, 400)
  38. self.assertIn('inactive_user', response.content)
  39. self.user.requires_activation = 2
  40. self.user.save()
  41. response = self.client.post(self.link, data={'email': self.user.email})
  42. self.assertEqual(response.status_code, 400)
  43. self.assertIn('inactive_admin', response.content)
  44. self.assertTrue(not mail.outbox)
  45. class ValidateTokenAPITests(TestCase):
  46. def setUp(self):
  47. User = get_user_model()
  48. self.user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  49. self.link = reverse(
  50. 'misago:api:change_password_validate_token',
  51. kwargs={
  52. 'user_id': self.user.id,
  53. 'token': make_password_change_token(self.user)
  54. })
  55. def test_submit_valid(self):
  56. """validate form link api returns success"""
  57. response = self.client.post(self.link)
  58. self.assertEqual(response.status_code, 200)
  59. self.assertIn(self.user.username, response.content)
  60. def test_submit_invalid_token(self):
  61. """validate form link api errors for invalid token"""
  62. response = self.client.post(reverse(
  63. 'misago:api:change_password_validate_token',
  64. kwargs={
  65. 'user_id': self.user.id,
  66. 'token': 'sadsadsadsdsassdsa'
  67. }))
  68. self.assertEqual(response.status_code, 404)
  69. self.assertIn('Your link is invalid.', response.content)
  70. def test_submit_invalid_user(self):
  71. """validate form link api errors for invalid user"""
  72. response = self.client.post(reverse(
  73. 'misago:api:change_password_validate_token',
  74. kwargs={
  75. 'user_id': 123,
  76. 'token': 'sadsadsadsdsassdsa'
  77. }))
  78. self.assertEqual(response.status_code, 404)
  79. def test_submit_banned(self):
  80. """validate form link api errors for banned user"""
  81. Ban.objects.create(check_type=BAN_USERNAME,
  82. banned_value=self.user.username,
  83. user_message='Nope!')
  84. response = self.client.post(self.link)
  85. self.assertEqual(response.status_code, 404)
  86. self.assertIn('Your link has expired.', response.content)
  87. def test_view_submit_inactive_user(self):
  88. """validate form link api errors for inactive user"""
  89. self.user.requires_activation = 1
  90. self.user.save()
  91. response = self.client.post(self.link)
  92. self.assertEqual(response.status_code, 404)
  93. self.assertIn('Your link has expired.', response.content)
  94. self.user.requires_activation = 2
  95. self.user.save()
  96. response = self.client.post(self.link)
  97. self.assertEqual(response.status_code, 404)
  98. self.assertIn('Your link has expired.', response.content)
  99. class ChangePasswordAPITests(TestCase):
  100. def setUp(self):
  101. User = get_user_model()
  102. self.user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  103. self.link = reverse(
  104. 'misago:api:change_password',
  105. kwargs={
  106. 'user_id': self.user.id,
  107. 'token': make_password_change_token(self.user)
  108. })
  109. def test_submit_valid(self):
  110. """change password api changes user password"""
  111. response = self.client.post(self.link, data={'password': 'newpass'})
  112. self.assertEqual(response.status_code, 200)
  113. user = get_user_model().objects.get(id=self.user.id)
  114. self.assertTrue(user.check_password('newpass'))
  115. def test_submit_invalid_empty(self):
  116. """change password api errors for unvalid password"""
  117. response = self.client.post(self.link, data={'password': ''})
  118. self.assertEqual(response.status_code, 400)
  119. self.assertIn('Valid password must be', response.content)
  120. def test_submit_invalid_token(self):
  121. """change password api errors for unvalid token"""
  122. response = self.client.post(reverse('misago:api:change_password',
  123. kwargs={
  124. 'user_id': self.user.id,
  125. 'token': 'sadsadsadsdsassdsa'
  126. }),
  127. data={'password': 'newpass'})
  128. self.assertEqual(response.status_code, 404)
  129. self.assertIn('Your link is invalid.', response.content)
  130. def test_submit_invalid_user(self):
  131. """validate form link api errors for invalid user"""
  132. response = self.client.post(reverse('misago:api:change_password',
  133. kwargs={
  134. 'user_id': 123,
  135. 'token': 'sadsadsadsdsassdsa'
  136. }),
  137. data={'password': 'newpass'})
  138. self.assertEqual(response.status_code, 404)
  139. def test_submit_banned(self):
  140. """validate form link api errors for banned user"""
  141. Ban.objects.create(check_type=BAN_USERNAME,
  142. banned_value=self.user.username,
  143. user_message='Nope!')
  144. response = self.client.post(self.link, data={'password': 'newpass'})
  145. self.assertEqual(response.status_code, 404)
  146. self.assertIn('Your link has expired.', response.content)
  147. def test_view_submit_inactive_user(self):
  148. """validate form link api errors for inactive user"""
  149. self.user.requires_activation = 1
  150. self.user.save()
  151. response = self.client.post(self.link, data={'password': 'newpass'})
  152. self.assertEqual(response.status_code, 404)
  153. self.assertIn('Your link has expired.', response.content)
  154. self.user.requires_activation = 2
  155. self.user.save()
  156. response = self.client.post(self.link, data={'password': 'newpass'})
  157. self.assertEqual(response.status_code, 404)
  158. self.assertIn('Your link has expired.', response.content)