UPD: dav_auth: tests!

This commit is contained in:
2019-03-12 18:13:45 +01:00
parent b246a785b7
commit c39f09709b
8 changed files with 472 additions and 0 deletions

View File

@@ -0,0 +1,182 @@
# -*- coding: utf-8 -*-
from unittest import skip
from django.contrib.auth import get_user_model
from django.core import mail as django_mail
from dav_base.tests.generic import FormDataSet, FormsTestCase
from ..forms import LoginForm, SetPasswordForm, ResetPasswordForm
TEST_USERNAME = 'root@localhost'
TEST_PASSWORD = 'mellon12'
TEST_EMAIL = TEST_USERNAME
class LoginFormTestCase(FormsTestCase):
form_class = LoginForm
def setUp(self):
# Need a test user
self.test_username = TEST_USERNAME
self.test_password = TEST_PASSWORD
model = get_user_model()
self.user = model.objects.create_user(username=TEST_USERNAME, password=TEST_PASSWORD, email=TEST_EMAIL)
def test_login_username_empty(self):
data_sets = [
FormDataSet({'username': '', 'password': self.test_password},
expected_errors=[('username', 'required')]),
]
super(LoginFormTestCase, self).test_invalid_data(data_sets=data_sets)
def test_login_password_empty(self):
data_sets = [
FormDataSet({'username': self.test_username, 'password': ''},
expected_errors=[('password', 'required')]),
]
super(LoginFormTestCase, self).test_invalid_data(data_sets=data_sets)
def test_login_username_too_long(self):
data_sets = [
FormDataSet({'username': 'u' * 255, 'password': self.test_password},
expected_errors=[('username', 'max_length')]),
]
super(LoginFormTestCase, self).test_invalid_data(data_sets=data_sets)
def test_login_invalid_username(self):
data_sets = [
FormDataSet({'username': self.test_username[::-1], 'password': self.test_password},
expected_errors=[('__all__', 'invalid_login')]),
]
super(LoginFormTestCase, self).test_invalid_data(data_sets=data_sets)
def test_login_invalid_password(self):
data_sets = [
FormDataSet({'username': self.test_username, 'password': self.test_password[::-1]},
expected_errors=[('__all__', 'invalid_login')]),
]
super(LoginFormTestCase, self).test_invalid_data(data_sets=data_sets)
def test_login_inactive_user(self):
self.user.is_active = False
self.user.save()
data_sets = [
FormDataSet({'username': self.test_username, 'password': self.test_password},
expected_errors=[('__all__', 'invalid_login')]),
]
super(LoginFormTestCase, self).test_invalid_data(data_sets=data_sets)
def test_login_valid_credentials(self):
data_sets = [
FormDataSet({'username': self.test_username, 'password': self.test_password}),
]
super(LoginFormTestCase, self).test_valid_data(data_sets=data_sets)
class SetPasswordFormTestCase(FormsTestCase):
form_class = SetPasswordForm
def setUp(self):
# Need a test user
self.test_username = TEST_USERNAME
self.test_password = TEST_PASSWORD
model = get_user_model()
self.user = model.objects.create_user(username=TEST_USERNAME, password=TEST_PASSWORD, email=TEST_EMAIL)
def test_set_password_mismatch(self):
data_sets = [
FormDataSet({'new_password': 'mellon12', 'new_password_repeat': 'mellon13'},
[('new_password_repeat', 'password_mismatch')]),
]
super(SetPasswordFormTestCase, self).test_invalid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_empty(self):
data_sets = [
FormDataSet({'new_password': '', 'new_password_repeat': ''},
[('new_password', 'required')]),
]
super(SetPasswordFormTestCase, self).test_invalid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_too_short(self):
data_sets = [
FormDataSet({'new_password': 'mellon', 'new_password_repeat': 'mellon'},
[('new_password', 'password_too_short')]),
]
super(SetPasswordFormTestCase, self).test_invalid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_entirely_numeric(self):
data_sets = [
FormDataSet({'new_password': '1357924680', 'new_password_repeat': '1357924680'},
[('new_password', 'password_entirely_numeric')]),
]
super(SetPasswordFormTestCase, self).test_invalid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_too_similar(self):
data_sets = [
FormDataSet({'new_password': self.test_username, 'new_password_repeat': self.test_username},
[('new_password', 'password_too_similar')]),
]
super(SetPasswordFormTestCase, self).test_invalid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_too_common(self):
data_sets = [
FormDataSet({'new_password': 'password', 'new_password_repeat': 'password'},
[('new_password', 'password_too_common')]),
]
super(SetPasswordFormTestCase, self).test_invalid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_valid(self):
data_sets = [
FormDataSet({'new_password': 'mellon12', 'new_password_repeat': 'mellon12'}),
FormDataSet({'new_password': 'mellon12', 'new_password_repeat': 'mellon12', 'send_password_mail': True}),
FormDataSet({'new_password': u'"ä§ Mellon12', 'new_password_repeat': u'"ä§ Mellon12'}),
FormDataSet({'new_password': 'mellon12' * 128, 'new_password_repeat': 'mellon12' * 128}),
]
super(SetPasswordFormTestCase, self).test_valid_data(data_sets=data_sets, form_kwargs={'user': self.user})
def test_set_password_save(self):
new_passwords = [
u'"ä§ Mellon12'
'mellon12' * 128,
]
for new_password in new_passwords:
data = {'new_password': new_password, 'new_password_repeat': new_password}
form = SetPasswordForm(data=data, user=self.user)
self.assertTrue(form.is_valid())
form.save()
self.assertEqual(len(django_mail.outbox), 0)
self.assertTrue(self.client.login(username=self.test_username, password=new_password))
@skip('Function is implemented in SetPasswordView instead of SetPasswordForm')
def test_set_password_save_with_mail(self):
new_passwords = [
u'"ä§ Mellon12'
'mellon12' * 128,
]
for new_password in new_passwords:
data = {'new_password': new_password, 'new_password_repeat': new_password, 'send_password_mail': True}
form = SetPasswordForm(data=data, user=self.user)
self.assertTrue(form.is_valid())
form.save()
self.assertEqual(len(django_mail.outbox), 1)
mail = django_mail.outbox[0]
recipient = '%s <%s>' % (self.user.get_full_name(), self.user.email)
recipients = mail.recipients()
self.assertIn(recipient, recipients)
self.assertEqual(len(recipients), 1)
self.assertIn(new_password, mail.body)
self.assertTrue(self.client.login(username=self.test_username, password=new_password))
class ResetPasswordFormTestCase(FormsTestCase):
form_class = ResetPasswordForm
valid_data_sets = (
FormDataSet({'username': 'unittest@example.com'}),
)
invalid_data_sets = (
FormDataSet({'username': ''}, expected_errors=[('username', 'required')]),
FormDataSet({'username': 'u' * 255}, expected_errors=[('username', 'max_length')]),
)