# -*- 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')]), )