test_activation_api.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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_activation_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.user.requires_activation = 1
  12. self.user.save()
  13. self.link = reverse('misago:api:activation_send_link')
  14. def test_submit_valid(self):
  15. """request activation link api sends reset link mail"""
  16. response = self.client.post(self.link, data={'email': self.user.email})
  17. self.assertEqual(response.status_code, 200)
  18. self.assertIn('Change Bob password', mail.outbox[0].subject)
  19. def test_submit_invalid(self):
  20. """request activation link api errors for invalid email"""
  21. response = self.client.post(self.link, data={'email': 'fake@mail.com'})
  22. self.assertEqual(response.status_code, 400)
  23. self.assertIn('not_found', response.content)
  24. self.assertTrue(not mail.outbox)
  25. def test_submit_banned(self):
  26. """request activation link api errors for banned users"""
  27. Ban.objects.create(check_type=BAN_USERNAME,
  28. banned_value=self.user.username,
  29. user_message='Nope!')
  30. response = self.client.post(self.link, data={'email': self.user.email})
  31. self.assertEqual(response.status_code, 400)
  32. self.assertIn('Nope!', response.content)
  33. self.assertTrue(not mail.outbox)
  34. def test_view_submit_active_user(self):
  35. """request activation link api errors for active user"""
  36. self.user.requires_activation = 0
  37. self.user.save()
  38. response = self.client.post(self.link, data={'email': self.user.email})
  39. self.assertEqual(response.status_code, 400)
  40. self.assertIn('Bob, your account is already activated.',
  41. response.content)
  42. def test_view_submit_inactive_user(self):
  43. """request activation link api errors for admin-activated users"""
  44. self.user.requires_activation = 2
  45. self.user.save()
  46. response = self.client.post(self.link, data={'email': self.user.email})
  47. self.assertEqual(response.status_code, 400)
  48. self.assertIn('inactive_admin', response.content)
  49. self.assertTrue(not mail.outbox)
  50. # but succeed for user-activated
  51. self.user.requires_activation = 1
  52. self.user.save()
  53. response = self.client.post(self.link, data={'email': self.user.email})
  54. self.assertEqual(response.status_code, 200)
  55. self.assertTrue(mail.outbox)
  56. class ValidateTokenAPITests(TestCase):
  57. def setUp(self):
  58. User = get_user_model()
  59. self.user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  60. self.user.requires_activation = 1
  61. self.user.save()
  62. self.link = reverse(
  63. 'misago:api:activation_validate_token',
  64. kwargs={
  65. 'user_id': self.user.id,
  66. 'token': make_activation_token(self.user)
  67. })
  68. def test_submit_valid(self):
  69. """validate link api returns success and activates user"""
  70. response = self.client.post(self.link)
  71. self.assertEqual(response.status_code, 200)
  72. self.assertIn(self.user.username, response.content)
  73. user = get_user_model().objects.get(id=self.user.id)
  74. self.assertFalse(user.requires_activation)
  75. def test_submit_invalid_token(self):
  76. """validate link api errors for invalid token"""
  77. response = self.client.post(reverse(
  78. 'misago:api:activation_validate_token',
  79. kwargs={
  80. 'user_id': self.user.id,
  81. 'token': 'sadsadsadsdsassdsa'
  82. }))
  83. self.assertEqual(response.status_code, 404)
  84. self.assertIn('Your link is invalid.', response.content)
  85. def test_submit_invalid_user(self):
  86. """validate link api errors for invalid user"""
  87. response = self.client.post(reverse(
  88. 'misago:api:activation_validate_token',
  89. kwargs={
  90. 'user_id': 123,
  91. 'token': 'sadsadsadsdsassdsa'
  92. }))
  93. self.assertEqual(response.status_code, 404)
  94. def test_submit_banned(self):
  95. """validate link api errors for banned user"""
  96. Ban.objects.create(check_type=BAN_USERNAME,
  97. banned_value=self.user.username,
  98. user_message='Nope!')
  99. response = self.client.post(self.link)
  100. self.assertEqual(response.status_code, 404)
  101. self.assertIn('Your link has expired.', response.content)
  102. def test_view_submit_active_user(self):
  103. """validate link api errors for active user"""
  104. self.user.requires_activation = 0
  105. self.user.save()
  106. response = self.client.post(self.link)
  107. self.assertEqual(response.status_code, 404)
  108. self.assertIn('Bob, your account is already activated.',
  109. response.content)
  110. def test_view_submit_inactive_user(self):
  111. """validate link api errors for inactive user"""
  112. self.user.requires_activation = 1
  113. self.user.save()
  114. response = self.client.post(self.link)
  115. self.assertEqual(response.status_code, 200)
  116. self.user.requires_activation = 2
  117. self.user.save()
  118. response = self.client.post(self.link)
  119. self.assertEqual(response.status_code, 404)
  120. self.assertIn('Bob, only administrator may activate your account.',
  121. response.content)