122 lines
3.6 KiB
Python
122 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import json
|
|
|
|
from django.test import TestCase
|
|
from django.core import mail
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from django.contrib.auth.models import User
|
|
|
|
from greenqueue import send_task
|
|
|
|
|
|
class LowLevelEmailTests(TestCase):
|
|
def setUp(self):
|
|
mail.outbox = []
|
|
|
|
def test_send_one_mail(self):
|
|
send_task("send-mail", args=["subject", "template", ["hola@niwi.be"]])
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
|
|
def test_send_bulk_mail(self):
|
|
send_task("send-bulk-mail", args=[[
|
|
('s1', 't1', ['hola@niwi.be']),
|
|
('s2', 't2', ['hola@niwi.be']),
|
|
]])
|
|
|
|
self.assertEqual(len(mail.outbox), 2)
|
|
|
|
|
|
class UserMailTests(TestCase):
|
|
def setUp(self):
|
|
self.user1 = User.objects.create(
|
|
username='test1',
|
|
email='test1@test.com',
|
|
is_active=True,
|
|
is_staff=True,
|
|
is_superuser=True,
|
|
)
|
|
|
|
self.user2 = User.objects.create(
|
|
username='test2',
|
|
email='test2@test.com',
|
|
is_active=True,
|
|
is_staff=False,
|
|
is_superuser=False,
|
|
)
|
|
|
|
self.user1.set_password("test")
|
|
self.user2.set_password("test")
|
|
|
|
self.user1.save()
|
|
self.user2.save()
|
|
|
|
mail.outbox = []
|
|
|
|
def test_remember_password(self):
|
|
url = reverse("remember-password")
|
|
|
|
post_params = {'email': 'test2@test.com'}
|
|
response = self.client.post(url, post_params, follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
|
|
jdata = json.loads(response.content)
|
|
self.assertIn("valid", jdata)
|
|
self.assertTrue(jdata['valid'])
|
|
|
|
def test_remember_password_not_exists(self):
|
|
url = reverse("remember-password")
|
|
|
|
post_params = {'email': 'test2@testa.com'}
|
|
response = self.client.post(url, post_params, follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(len(mail.outbox), 0)
|
|
|
|
jdata = json.loads(response.content)
|
|
self.assertIn("valid", jdata)
|
|
self.assertFalse(jdata['valid'])
|
|
|
|
def test_send_recovery_password_by_staff(self):
|
|
url = reverse("users-recovery-password", args=[self.user2.pk])
|
|
|
|
ok = self.client.login(username="test1", password="test")
|
|
self.assertTrue(ok)
|
|
|
|
# pre test
|
|
self.assertTrue(self.user2.is_active)
|
|
self.assertEqual(self.user2.token, None)
|
|
|
|
response = self.client.get(url, follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# expected redirect
|
|
self.assertEqual(response.redirect_chain, [('http://testserver/users/2/edit/', 302)])
|
|
|
|
# test mail sending
|
|
self.assertEqual(len(mail.outbox), 1)
|
|
self.assertEqual(mail.outbox[0].subject, "Greenmine: password recovery.")
|
|
|
|
# test user model modification
|
|
self.user2 = User.objects.get(pk=self.user2.pk)
|
|
self.assertTrue(self.user2.is_active)
|
|
self.assertFalse(self.user2.has_usable_password())
|
|
self.assertNotEqual(self.user2.token, None)
|
|
|
|
url = reverse('password-recovery', args=[self.user2.token])
|
|
|
|
post_params = {
|
|
'password': '123123',
|
|
'password2': '123123',
|
|
}
|
|
response = self.client.post(url, post_params, follow=True)
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# expected redirect
|
|
self.assertEqual(response.redirect_chain, [('http://testserver/login/', 302)])
|
|
|
|
ok = self.client.login(username="test2", password="123123")
|
|
self.assertTrue(ok)
|