|
@@ -0,0 +1,155 @@
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
+from django.core import mail
|
|
|
+from django.core.urlresolvers import reverse
|
|
|
+from django.test import TestCase
|
|
|
+
|
|
|
+from misago.users.models import Ban, BAN_USERNAME
|
|
|
+from misago.users.tokens import make_activation_token
|
|
|
+
|
|
|
+
|
|
|
+class SendLinkAPITests(TestCase):
|
|
|
+ def setUp(self):
|
|
|
+ User = get_user_model()
|
|
|
+ self.user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
|
|
|
+ self.user.requires_activation = 1
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ self.link = reverse('misago:api:activation_send_link')
|
|
|
+
|
|
|
+ def test_submit_valid(self):
|
|
|
+ """request activation link api sends reset link mail"""
|
|
|
+ response = self.client.post(self.link, data={'email': self.user.email})
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+
|
|
|
+ self.assertIn('Change Bob password', mail.outbox[0].subject)
|
|
|
+
|
|
|
+ def test_submit_invalid(self):
|
|
|
+ """request activation link api errors for invalid email"""
|
|
|
+ response = self.client.post(self.link, data={'email': 'fake@mail.com'})
|
|
|
+ self.assertEqual(response.status_code, 400)
|
|
|
+ self.assertIn('not_found', response.content)
|
|
|
+
|
|
|
+ self.assertTrue(not mail.outbox)
|
|
|
+
|
|
|
+ def test_submit_banned(self):
|
|
|
+ """request activation link api errors for banned users"""
|
|
|
+ Ban.objects.create(check_type=BAN_USERNAME,
|
|
|
+ banned_value=self.user.username,
|
|
|
+ user_message='Nope!')
|
|
|
+
|
|
|
+ response = self.client.post(self.link, data={'email': self.user.email})
|
|
|
+ self.assertEqual(response.status_code, 400)
|
|
|
+ self.assertIn('Nope!', response.content)
|
|
|
+
|
|
|
+ self.assertTrue(not mail.outbox)
|
|
|
+
|
|
|
+ def test_view_submit_active_user(self):
|
|
|
+ """request activation link api errors for active user"""
|
|
|
+ self.user.requires_activation = 0
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ response = self.client.post(self.link, data={'email': self.user.email})
|
|
|
+ self.assertEqual(response.status_code, 400)
|
|
|
+ self.assertIn('Bob, your account is already activated.',
|
|
|
+ response.content)
|
|
|
+
|
|
|
+ def test_view_submit_inactive_user(self):
|
|
|
+ """request activation link api errors for admin-activated users"""
|
|
|
+ self.user.requires_activation = 2
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ response = self.client.post(self.link, data={'email': self.user.email})
|
|
|
+ self.assertEqual(response.status_code, 400)
|
|
|
+ self.assertIn('inactive_admin', response.content)
|
|
|
+
|
|
|
+ self.assertTrue(not mail.outbox)
|
|
|
+
|
|
|
+ # but succeed for user-activated
|
|
|
+ self.user.requires_activation = 1
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ response = self.client.post(self.link, data={'email': self.user.email})
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+
|
|
|
+ self.assertTrue(mail.outbox)
|
|
|
+
|
|
|
+
|
|
|
+class ValidateTokenAPITests(TestCase):
|
|
|
+ def setUp(self):
|
|
|
+ User = get_user_model()
|
|
|
+ self.user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
|
|
|
+ self.user.requires_activation = 1
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ self.link = reverse(
|
|
|
+ 'misago:api:activation_validate_token',
|
|
|
+ kwargs={
|
|
|
+ 'user_id': self.user.id,
|
|
|
+ 'token': make_activation_token(self.user)
|
|
|
+ })
|
|
|
+
|
|
|
+ def test_submit_valid(self):
|
|
|
+ """validate link api returns success and activates user"""
|
|
|
+ response = self.client.post(self.link)
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+ self.assertIn(self.user.username, response.content)
|
|
|
+
|
|
|
+ user = get_user_model().objects.get(id=self.user.id)
|
|
|
+ self.assertFalse(user.requires_activation)
|
|
|
+
|
|
|
+ def test_submit_invalid_token(self):
|
|
|
+ """validate link api errors for invalid token"""
|
|
|
+ response = self.client.post(reverse(
|
|
|
+ 'misago:api:activation_validate_token',
|
|
|
+ kwargs={
|
|
|
+ 'user_id': self.user.id,
|
|
|
+ 'token': 'sadsadsadsdsassdsa'
|
|
|
+ }))
|
|
|
+ self.assertEqual(response.status_code, 404)
|
|
|
+ self.assertIn('Your link is invalid.', response.content)
|
|
|
+
|
|
|
+ def test_submit_invalid_user(self):
|
|
|
+ """validate link api errors for invalid user"""
|
|
|
+ response = self.client.post(reverse(
|
|
|
+ 'misago:api:activation_validate_token',
|
|
|
+ kwargs={
|
|
|
+ 'user_id': 123,
|
|
|
+ 'token': 'sadsadsadsdsassdsa'
|
|
|
+ }))
|
|
|
+ self.assertEqual(response.status_code, 404)
|
|
|
+
|
|
|
+ def test_submit_banned(self):
|
|
|
+ """validate link api errors for banned user"""
|
|
|
+ Ban.objects.create(check_type=BAN_USERNAME,
|
|
|
+ banned_value=self.user.username,
|
|
|
+ user_message='Nope!')
|
|
|
+
|
|
|
+ response = self.client.post(self.link)
|
|
|
+ self.assertEqual(response.status_code, 404)
|
|
|
+ self.assertIn('Your link has expired.', response.content)
|
|
|
+
|
|
|
+ def test_view_submit_active_user(self):
|
|
|
+ """validate link api errors for active user"""
|
|
|
+ self.user.requires_activation = 0
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ response = self.client.post(self.link)
|
|
|
+ self.assertEqual(response.status_code, 404)
|
|
|
+ self.assertIn('Bob, your account is already activated.',
|
|
|
+ response.content)
|
|
|
+
|
|
|
+ def test_view_submit_inactive_user(self):
|
|
|
+ """validate link api errors for inactive user"""
|
|
|
+ self.user.requires_activation = 1
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ response = self.client.post(self.link)
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
+
|
|
|
+ self.user.requires_activation = 2
|
|
|
+ self.user.save()
|
|
|
+
|
|
|
+ response = self.client.post(self.link)
|
|
|
+ self.assertEqual(response.status_code, 404)
|
|
|
+ self.assertIn('Bob, only administrator may activate your account.',
|
|
|
+ response.content)
|