[1.2.X] Converted tests for contrib.auth.forms to unit tests.
Backport of [13701], needed in order to backport [13702] git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13703 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
329fab430b
commit
5357000bc3
|
@ -1,7 +1,7 @@
|
|||
from django.contrib.auth.tests.auth_backends import BackendTest, RowlevelBackendTest, AnonymousUserBackendTest, NoAnonymousUserBackendTest
|
||||
from django.contrib.auth.tests.basic import BASIC_TESTS
|
||||
from django.contrib.auth.tests.decorators import LoginRequiredTestCase
|
||||
from django.contrib.auth.tests.forms import FORM_TESTS
|
||||
from django.contrib.auth.tests.forms import UserCreationFormTest, AuthenticationFormTest, SetPasswordFormTest, PasswordChangeFormTest, UserChangeFormTest, PasswordResetFormTest
|
||||
from django.contrib.auth.tests.remote_user \
|
||||
import RemoteUserTest, RemoteUserNoCreateTest, RemoteUserCustomTest
|
||||
from django.contrib.auth.tests.models import ProfileTestCase
|
||||
|
@ -13,6 +13,5 @@ from django.contrib.auth.tests.views \
|
|||
|
||||
__test__ = {
|
||||
'BASIC_TESTS': BASIC_TESTS,
|
||||
'FORM_TESTS': FORM_TESTS,
|
||||
'TOKEN_GENERATOR_TESTS': TOKEN_GENERATOR_TESTS,
|
||||
}
|
||||
|
|
|
@ -1,231 +1,236 @@
|
|||
|
||||
FORM_TESTS = """
|
||||
>>> from django.contrib.auth.models import User
|
||||
>>> from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
|
||||
>>> from django.contrib.auth.forms import PasswordChangeForm, SetPasswordForm
|
||||
|
||||
# The user already exists.
|
||||
|
||||
>>> user = User.objects.create_user("jsmith", "jsmith@example.com", "test123")
|
||||
>>> data = {
|
||||
... 'username': 'jsmith',
|
||||
... 'password1': 'test123',
|
||||
... 'password2': 'test123',
|
||||
... }
|
||||
>>> form = UserCreationForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form["username"].errors
|
||||
[u'A user with that username already exists.']
|
||||
|
||||
# The username contains invalid data.
|
||||
|
||||
>>> data = {
|
||||
... 'username': 'jsmith!',
|
||||
... 'password1': 'test123',
|
||||
... 'password2': 'test123',
|
||||
... }
|
||||
>>> form = UserCreationForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form["username"].errors
|
||||
[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
|
||||
|
||||
# The verification password is incorrect.
|
||||
|
||||
>>> data = {
|
||||
... 'username': 'jsmith2',
|
||||
... 'password1': 'test123',
|
||||
... 'password2': 'test',
|
||||
... }
|
||||
>>> form = UserCreationForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form["password2"].errors
|
||||
[u"The two password fields didn't match."]
|
||||
|
||||
# One (or both) passwords weren't given
|
||||
|
||||
>>> data = {'username': 'jsmith2'}
|
||||
>>> form = UserCreationForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form['password1'].errors
|
||||
[u'This field is required.']
|
||||
>>> form['password2'].errors
|
||||
[u'This field is required.']
|
||||
|
||||
>>> data['password2'] = 'test123'
|
||||
>>> form = UserCreationForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form['password1'].errors
|
||||
[u'This field is required.']
|
||||
|
||||
# The success case.
|
||||
|
||||
>>> data = {
|
||||
... 'username': 'jsmith2@example.com',
|
||||
... 'password1': 'test123',
|
||||
... 'password2': 'test123',
|
||||
... }
|
||||
>>> form = UserCreationForm(data)
|
||||
>>> form.is_valid()
|
||||
True
|
||||
>>> form.save()
|
||||
<User: jsmith2@example.com>
|
||||
|
||||
# The user submits an invalid username.
|
||||
|
||||
>>> data = {
|
||||
... 'username': 'jsmith_does_not_exist',
|
||||
... 'password': 'test123',
|
||||
... }
|
||||
|
||||
>>> form = AuthenticationForm(None, data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form.non_field_errors()
|
||||
[u'Please enter a correct username and password. Note that both fields are case-sensitive.']
|
||||
|
||||
# The user is inactive.
|
||||
|
||||
>>> data = {
|
||||
... 'username': 'jsmith',
|
||||
... 'password': 'test123',
|
||||
... }
|
||||
>>> user.is_active = False
|
||||
>>> user.save()
|
||||
>>> form = AuthenticationForm(None, data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form.non_field_errors()
|
||||
[u'This account is inactive.']
|
||||
|
||||
>>> user.is_active = True
|
||||
>>> user.save()
|
||||
|
||||
# The success case
|
||||
|
||||
>>> form = AuthenticationForm(None, data)
|
||||
>>> form.is_valid()
|
||||
True
|
||||
>>> form.non_field_errors()
|
||||
[]
|
||||
|
||||
### SetPasswordForm:
|
||||
|
||||
# The two new passwords do not match.
|
||||
|
||||
>>> data = {
|
||||
... 'new_password1': 'abc123',
|
||||
... 'new_password2': 'abc',
|
||||
... }
|
||||
>>> form = SetPasswordForm(user, data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form["new_password2"].errors
|
||||
[u"The two password fields didn't match."]
|
||||
|
||||
# The success case.
|
||||
|
||||
>>> data = {
|
||||
... 'new_password1': 'abc123',
|
||||
... 'new_password2': 'abc123',
|
||||
... }
|
||||
>>> form = SetPasswordForm(user, data)
|
||||
>>> form.is_valid()
|
||||
True
|
||||
|
||||
### PasswordChangeForm:
|
||||
|
||||
The old password is incorrect.
|
||||
|
||||
>>> data = {
|
||||
... 'old_password': 'test',
|
||||
... 'new_password1': 'abc123',
|
||||
... 'new_password2': 'abc123',
|
||||
... }
|
||||
>>> form = PasswordChangeForm(user, data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form["old_password"].errors
|
||||
[u'Your old password was entered incorrectly. Please enter it again.']
|
||||
|
||||
# The two new passwords do not match.
|
||||
|
||||
>>> data = {
|
||||
... 'old_password': 'test123',
|
||||
... 'new_password1': 'abc123',
|
||||
... 'new_password2': 'abc',
|
||||
... }
|
||||
>>> form = PasswordChangeForm(user, data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form["new_password2"].errors
|
||||
[u"The two password fields didn't match."]
|
||||
|
||||
# The success case.
|
||||
|
||||
>>> data = {
|
||||
... 'old_password': 'test123',
|
||||
... 'new_password1': 'abc123',
|
||||
... 'new_password2': 'abc123',
|
||||
... }
|
||||
>>> form = PasswordChangeForm(user, data)
|
||||
>>> form.is_valid()
|
||||
True
|
||||
|
||||
# Regression test - check the order of fields:
|
||||
|
||||
>>> PasswordChangeForm(user, {}).fields.keys()
|
||||
['old_password', 'new_password1', 'new_password2']
|
||||
|
||||
### UserChangeForm
|
||||
|
||||
>>> from django.contrib.auth.forms import UserChangeForm
|
||||
>>> data = {'username': 'not valid'}
|
||||
>>> form = UserChangeForm(data, instance=user)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form['username'].errors
|
||||
[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordChangeForm, SetPasswordForm, UserChangeForm, PasswordResetForm
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
### PasswordResetForm
|
||||
class UserCreationFormTest(TestCase):
|
||||
|
||||
>>> from django.contrib.auth.forms import PasswordResetForm
|
||||
>>> data = {'email':'not valid'}
|
||||
>>> form = PasswordResetForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form['email'].errors
|
||||
[u'Enter a valid e-mail address.']
|
||||
fixtures = ['authtestdata.json']
|
||||
|
||||
# Test nonexistant email address
|
||||
>>> data = {'email':'foo@bar.com'}
|
||||
>>> form = PasswordResetForm(data)
|
||||
>>> form.is_valid()
|
||||
False
|
||||
>>> form.errors
|
||||
{'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]}
|
||||
def test_user_already_exists(self):
|
||||
data = {
|
||||
'username': 'testclient',
|
||||
'password1': 'test123',
|
||||
'password2': 'test123',
|
||||
}
|
||||
form = UserCreationForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form["username"].errors,
|
||||
[u'A user with that username already exists.'])
|
||||
|
||||
# Test cleaned_data bug fix
|
||||
>>> user = User.objects.create_user("jsmith3", "jsmith3@example.com", "test123")
|
||||
>>> data = {'email':'jsmith3@example.com'}
|
||||
>>> form = PasswordResetForm(data)
|
||||
>>> form.is_valid()
|
||||
True
|
||||
>>> form.cleaned_data['email']
|
||||
u'jsmith3@example.com'
|
||||
def test_invalid_data(self):
|
||||
data = {
|
||||
'username': 'jsmith!',
|
||||
'password1': 'test123',
|
||||
'password2': 'test123',
|
||||
}
|
||||
form = UserCreationForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form["username"].errors,
|
||||
[u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
|
||||
|
||||
# bug #5605, preserve the case of the user name (before the @ in the email address)
|
||||
# when creating a user.
|
||||
>>> user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
|
||||
>>> user.email
|
||||
'tesT@example.com'
|
||||
>>> user = User.objects.create_user('forms_test3', 'tesT', 'test')
|
||||
>>> user.email
|
||||
'tesT'
|
||||
|
||||
"""
|
||||
def test_password_verification(self):
|
||||
# The verification password is incorrect.
|
||||
data = {
|
||||
'username': 'jsmith',
|
||||
'password1': 'test123',
|
||||
'password2': 'test',
|
||||
}
|
||||
form = UserCreationForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form["password2"].errors,
|
||||
[u"The two password fields didn't match."])
|
||||
|
||||
|
||||
def test_both_passwords(self):
|
||||
# One (or both) passwords weren't given
|
||||
data = {'username': 'jsmith'}
|
||||
form = UserCreationForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form['password1'].errors,
|
||||
[u'This field is required.'])
|
||||
self.assertEqual(form['password2'].errors,
|
||||
[u'This field is required.'])
|
||||
|
||||
|
||||
data['password2'] = 'test123'
|
||||
form = UserCreationForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form['password1'].errors,
|
||||
[u'This field is required.'])
|
||||
|
||||
def test_success(self):
|
||||
# The success case.
|
||||
|
||||
data = {
|
||||
'username': 'jsmith@example.com',
|
||||
'password1': 'test123',
|
||||
'password2': 'test123',
|
||||
}
|
||||
form = UserCreationForm(data)
|
||||
self.assertTrue(form.is_valid())
|
||||
u = form.save()
|
||||
self.assertEqual(repr(u), '<User: jsmith@example.com>')
|
||||
|
||||
|
||||
class AuthenticationFormTest(TestCase):
|
||||
|
||||
fixtures = ['authtestdata.json']
|
||||
|
||||
def test_invalid_username(self):
|
||||
# The user submits an invalid username.
|
||||
|
||||
data = {
|
||||
'username': 'jsmith_does_not_exist',
|
||||
'password': 'test123',
|
||||
}
|
||||
form = AuthenticationForm(None, data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.non_field_errors(),
|
||||
[u'Please enter a correct username and password. Note that both fields are case-sensitive.'])
|
||||
|
||||
def test_inactive_user(self):
|
||||
# The user is inactive.
|
||||
data = {
|
||||
'username': 'inactive',
|
||||
'password': 'password',
|
||||
}
|
||||
form = AuthenticationForm(None, data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.non_field_errors(),
|
||||
[u'This account is inactive.'])
|
||||
|
||||
|
||||
def test_success(self):
|
||||
# The success case
|
||||
data = {
|
||||
'username': 'testclient',
|
||||
'password': 'password',
|
||||
}
|
||||
form = AuthenticationForm(None, data)
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertEqual(form.non_field_errors(), [])
|
||||
|
||||
|
||||
class SetPasswordFormTest(TestCase):
|
||||
|
||||
fixtures = ['authtestdata.json']
|
||||
|
||||
def test_password_verification(self):
|
||||
# The two new passwords do not match.
|
||||
user = User.objects.get(username='testclient')
|
||||
data = {
|
||||
'new_password1': 'abc123',
|
||||
'new_password2': 'abc',
|
||||
}
|
||||
form = SetPasswordForm(user, data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form["new_password2"].errors,
|
||||
[u"The two password fields didn't match."])
|
||||
|
||||
def test_success(self):
|
||||
user = User.objects.get(username='testclient')
|
||||
data = {
|
||||
'new_password1': 'abc123',
|
||||
'new_password2': 'abc123',
|
||||
}
|
||||
form = SetPasswordForm(user, data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
|
||||
class PasswordChangeFormTest(TestCase):
|
||||
|
||||
fixtures = ['authtestdata.json']
|
||||
|
||||
def test_incorrect_password(self):
|
||||
user = User.objects.get(username='testclient')
|
||||
data = {
|
||||
'old_password': 'test',
|
||||
'new_password1': 'abc123',
|
||||
'new_password2': 'abc123',
|
||||
}
|
||||
form = PasswordChangeForm(user, data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form["old_password"].errors,
|
||||
[u'Your old password was entered incorrectly. Please enter it again.'])
|
||||
|
||||
|
||||
def test_password_verification(self):
|
||||
# The two new passwords do not match.
|
||||
user = User.objects.get(username='testclient')
|
||||
data = {
|
||||
'old_password': 'password',
|
||||
'new_password1': 'abc123',
|
||||
'new_password2': 'abc',
|
||||
}
|
||||
form = PasswordChangeForm(user, data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form["new_password2"].errors,
|
||||
[u"The two password fields didn't match."])
|
||||
|
||||
|
||||
def test_success(self):
|
||||
# The success case.
|
||||
user = User.objects.get(username='testclient')
|
||||
data = {
|
||||
'old_password': 'password',
|
||||
'new_password1': 'abc123',
|
||||
'new_password2': 'abc123',
|
||||
}
|
||||
form = PasswordChangeForm(user, data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
def test_field_order(self):
|
||||
# Regression test - check the order of fields:
|
||||
user = User.objects.get(username='testclient')
|
||||
self.assertEqual(PasswordChangeForm(user, {}).fields.keys(),
|
||||
['old_password', 'new_password1', 'new_password2'])
|
||||
|
||||
class UserChangeFormTest(TestCase):
|
||||
|
||||
fixtures = ['authtestdata.json']
|
||||
|
||||
def test_username_validity(self):
|
||||
user = User.objects.get(username='testclient')
|
||||
data = {'username': 'not valid'}
|
||||
form = UserChangeForm(data, instance=user)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form['username'].errors,
|
||||
[u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
|
||||
|
||||
class PasswordResetFormTest(TestCase):
|
||||
|
||||
fixtures = ['authtestdata.json']
|
||||
|
||||
def test_invalid_email(self):
|
||||
data = {'email':'not valid'}
|
||||
form = PasswordResetForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form['email'].errors,
|
||||
[u'Enter a valid e-mail address.'])
|
||||
|
||||
def test_nonexistant_email(self):
|
||||
# Test nonexistant email address
|
||||
data = {'email':'foo@bar.com'}
|
||||
form = PasswordResetForm(data)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors,
|
||||
{'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]})
|
||||
|
||||
def test_cleaned_data(self):
|
||||
# Regression test
|
||||
user = User.objects.create_user("jsmith3", "jsmith3@example.com", "test123")
|
||||
data = {'email':'jsmith3@example.com'}
|
||||
form = PasswordResetForm(data)
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertEqual(form.cleaned_data['email'], u'jsmith3@example.com')
|
||||
|
||||
|
||||
def test_bug_5605(self):
|
||||
# bug #5605, preserve the case of the user name (before the @ in the
|
||||
# email address) when creating a user.
|
||||
user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
|
||||
self.assertEqual(user.email, 'tesT@example.com')
|
||||
user = User.objects.create_user('forms_test3', 'tesT', 'test')
|
||||
self.assertEqual(user.email, 'tesT')
|
||||
|
|
Loading…
Reference in New Issue