3
>>> from django.contrib.auth.models import User
4
>>> from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
5
>>> from django.contrib.auth.forms import PasswordChangeForm, SetPasswordForm
7
# The user already exists.
9
>>> user = User.objects.create_user("jsmith", "jsmith@example.com", "test123")
11
... 'username': 'jsmith',
12
... 'password1': 'test123',
13
... 'password2': 'test123',
15
>>> form = UserCreationForm(data)
18
>>> form["username"].errors
19
[u'A user with that username already exists.']
21
# The username contains invalid data.
24
... 'username': 'jsmith!',
25
... 'password1': 'test123',
26
... 'password2': 'test123',
28
>>> form = UserCreationForm(data)
31
>>> form["username"].errors
32
[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
34
# The verification password is incorrect.
37
... 'username': 'jsmith2',
38
... 'password1': 'test123',
39
... 'password2': 'test',
41
>>> form = UserCreationForm(data)
44
>>> form["password2"].errors
45
[u"The two password fields didn't match."]
47
# One (or both) passwords weren't given
49
>>> data = {'username': 'jsmith2'}
50
>>> form = UserCreationForm(data)
53
>>> form['password1'].errors
54
[u'This field is required.']
55
>>> form['password2'].errors
56
[u'This field is required.']
58
>>> data['password2'] = 'test123'
59
>>> form = UserCreationForm(data)
62
>>> form['password1'].errors
63
[u'This field is required.']
68
... 'username': 'jsmith2@example.com',
69
... 'password1': 'test123',
70
... 'password2': 'test123',
72
>>> form = UserCreationForm(data)
76
<User: jsmith2@example.com>
78
# The user submits an invalid username.
81
... 'username': 'jsmith_does_not_exist',
82
... 'password': 'test123',
85
>>> form = AuthenticationForm(None, data)
88
>>> form.non_field_errors()
89
[u'Please enter a correct username and password. Note that both fields are case-sensitive.']
91
# The user is inactive.
94
... 'username': 'jsmith',
95
... 'password': 'test123',
97
>>> user.is_active = False
99
>>> form = AuthenticationForm(None, data)
102
>>> form.non_field_errors()
103
[u'This account is inactive.']
105
>>> user.is_active = True
110
>>> form = AuthenticationForm(None, data)
113
>>> form.non_field_errors()
118
# The two new passwords do not match.
121
... 'new_password1': 'abc123',
122
... 'new_password2': 'abc',
124
>>> form = SetPasswordForm(user, data)
127
>>> form["new_password2"].errors
128
[u"The two password fields didn't match."]
133
... 'new_password1': 'abc123',
134
... 'new_password2': 'abc123',
136
>>> form = SetPasswordForm(user, data)
140
### PasswordChangeForm:
142
The old password is incorrect.
145
... 'old_password': 'test',
146
... 'new_password1': 'abc123',
147
... 'new_password2': 'abc123',
149
>>> form = PasswordChangeForm(user, data)
152
>>> form["old_password"].errors
153
[u'Your old password was entered incorrectly. Please enter it again.']
155
# The two new passwords do not match.
158
... 'old_password': 'test123',
159
... 'new_password1': 'abc123',
160
... 'new_password2': 'abc',
162
>>> form = PasswordChangeForm(user, data)
165
>>> form["new_password2"].errors
166
[u"The two password fields didn't match."]
171
... 'old_password': 'test123',
172
... 'new_password1': 'abc123',
173
... 'new_password2': 'abc123',
175
>>> form = PasswordChangeForm(user, data)
179
# Regression test - check the order of fields:
181
>>> PasswordChangeForm(user, {}).fields.keys()
182
['old_password', 'new_password1', 'new_password2']
186
>>> from django.contrib.auth.forms import UserChangeForm
187
>>> data = {'username': 'not valid'}
188
>>> form = UserChangeForm(data, instance=user)
191
>>> form['username'].errors
192
[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
195
### PasswordResetForm
197
>>> from django.contrib.auth.forms import PasswordResetForm
198
>>> data = {'email':'not valid'}
199
>>> form = PasswordResetForm(data)
202
>>> form['email'].errors
203
[u'Enter a valid e-mail address.']
205
# Test nonexistant email address
206
>>> data = {'email':'foo@bar.com'}
207
>>> form = PasswordResetForm(data)
211
{'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]}
213
# Test cleaned_data bug fix
214
>>> user = User.objects.create_user("jsmith3", "jsmith3@example.com", "test123")
215
>>> data = {'email':'jsmith3@example.com'}
216
>>> form = PasswordResetForm(data)
219
>>> form.cleaned_data['email']
220
u'jsmith3@example.com'
222
# bug #5605, preserve the case of the user name (before the @ in the email address)
223
# when creating a user.
224
>>> user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
227
>>> user = User.objects.create_user('forms_test3', 'tesT', 'test')
1
from django.contrib.auth.models import User
2
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordChangeForm, SetPasswordForm, UserChangeForm, PasswordResetForm
3
from django.test import TestCase
6
class UserCreationFormTest(TestCase):
8
fixtures = ['authtestdata.json']
10
def test_user_already_exists(self):
12
'username': 'testclient',
13
'password1': 'test123',
14
'password2': 'test123',
16
form = UserCreationForm(data)
17
self.assertFalse(form.is_valid())
18
self.assertEqual(form["username"].errors,
19
[u'A user with that username already exists.'])
21
def test_invalid_data(self):
23
'username': 'jsmith!',
24
'password1': 'test123',
25
'password2': 'test123',
27
form = UserCreationForm(data)
28
self.assertFalse(form.is_valid())
29
self.assertEqual(form["username"].errors,
30
[u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
33
def test_password_verification(self):
34
# The verification password is incorrect.
37
'password1': 'test123',
40
form = UserCreationForm(data)
41
self.assertFalse(form.is_valid())
42
self.assertEqual(form["password2"].errors,
43
[u"The two password fields didn't match."])
46
def test_both_passwords(self):
47
# One (or both) passwords weren't given
48
data = {'username': 'jsmith'}
49
form = UserCreationForm(data)
50
self.assertFalse(form.is_valid())
51
self.assertEqual(form['password1'].errors,
52
[u'This field is required.'])
53
self.assertEqual(form['password2'].errors,
54
[u'This field is required.'])
57
data['password2'] = 'test123'
58
form = UserCreationForm(data)
59
self.assertFalse(form.is_valid())
60
self.assertEqual(form['password1'].errors,
61
[u'This field is required.'])
63
def test_success(self):
67
'username': 'jsmith@example.com',
68
'password1': 'test123',
69
'password2': 'test123',
71
form = UserCreationForm(data)
72
self.assertTrue(form.is_valid())
74
self.assertEqual(repr(u), '<User: jsmith@example.com>')
77
class AuthenticationFormTest(TestCase):
79
fixtures = ['authtestdata.json']
81
def test_invalid_username(self):
82
# The user submits an invalid username.
85
'username': 'jsmith_does_not_exist',
86
'password': 'test123',
88
form = AuthenticationForm(None, data)
89
self.assertFalse(form.is_valid())
90
self.assertEqual(form.non_field_errors(),
91
[u'Please enter a correct username and password. Note that both fields are case-sensitive.'])
93
def test_inactive_user(self):
94
# The user is inactive.
96
'username': 'inactive',
97
'password': 'password',
99
form = AuthenticationForm(None, data)
100
self.assertFalse(form.is_valid())
101
self.assertEqual(form.non_field_errors(),
102
[u'This account is inactive.'])
105
def test_success(self):
108
'username': 'testclient',
109
'password': 'password',
111
form = AuthenticationForm(None, data)
112
self.assertTrue(form.is_valid())
113
self.assertEqual(form.non_field_errors(), [])
116
class SetPasswordFormTest(TestCase):
118
fixtures = ['authtestdata.json']
120
def test_password_verification(self):
121
# The two new passwords do not match.
122
user = User.objects.get(username='testclient')
124
'new_password1': 'abc123',
125
'new_password2': 'abc',
127
form = SetPasswordForm(user, data)
128
self.assertFalse(form.is_valid())
129
self.assertEqual(form["new_password2"].errors,
130
[u"The two password fields didn't match."])
132
def test_success(self):
133
user = User.objects.get(username='testclient')
135
'new_password1': 'abc123',
136
'new_password2': 'abc123',
138
form = SetPasswordForm(user, data)
139
self.assertTrue(form.is_valid())
142
class PasswordChangeFormTest(TestCase):
144
fixtures = ['authtestdata.json']
146
def test_incorrect_password(self):
147
user = User.objects.get(username='testclient')
149
'old_password': 'test',
150
'new_password1': 'abc123',
151
'new_password2': 'abc123',
153
form = PasswordChangeForm(user, data)
154
self.assertFalse(form.is_valid())
155
self.assertEqual(form["old_password"].errors,
156
[u'Your old password was entered incorrectly. Please enter it again.'])
159
def test_password_verification(self):
160
# The two new passwords do not match.
161
user = User.objects.get(username='testclient')
163
'old_password': 'password',
164
'new_password1': 'abc123',
165
'new_password2': 'abc',
167
form = PasswordChangeForm(user, data)
168
self.assertFalse(form.is_valid())
169
self.assertEqual(form["new_password2"].errors,
170
[u"The two password fields didn't match."])
173
def test_success(self):
175
user = User.objects.get(username='testclient')
177
'old_password': 'password',
178
'new_password1': 'abc123',
179
'new_password2': 'abc123',
181
form = PasswordChangeForm(user, data)
182
self.assertTrue(form.is_valid())
184
def test_field_order(self):
185
# Regression test - check the order of fields:
186
user = User.objects.get(username='testclient')
187
self.assertEqual(PasswordChangeForm(user, {}).fields.keys(),
188
['old_password', 'new_password1', 'new_password2'])
190
class UserChangeFormTest(TestCase):
192
fixtures = ['authtestdata.json']
194
def test_username_validity(self):
195
user = User.objects.get(username='testclient')
196
data = {'username': 'not valid'}
197
form = UserChangeForm(data, instance=user)
198
self.assertFalse(form.is_valid())
199
self.assertEqual(form['username'].errors,
200
[u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
202
def test_bug_14242(self):
203
# A regression test, introduce by adding an optimization for the
206
class MyUserForm(UserChangeForm):
207
def __init__(self, *args, **kwargs):
208
super(MyUserForm, self).__init__(*args, **kwargs)
209
self.fields['groups'].help_text = 'These groups give users different permissions'
211
class Meta(UserChangeForm.Meta):
214
# Just check we can create it
215
form = MyUserForm({})
218
class PasswordResetFormTest(TestCase):
220
fixtures = ['authtestdata.json']
222
def test_invalid_email(self):
223
data = {'email':'not valid'}
224
form = PasswordResetForm(data)
225
self.assertFalse(form.is_valid())
226
self.assertEqual(form['email'].errors,
227
[u'Enter a valid e-mail address.'])
229
def test_nonexistant_email(self):
230
# Test nonexistant email address
231
data = {'email':'foo@bar.com'}
232
form = PasswordResetForm(data)
233
self.assertFalse(form.is_valid())
234
self.assertEqual(form.errors,
235
{'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]})
237
def test_cleaned_data(self):
239
user = User.objects.create_user("jsmith3", "jsmith3@example.com", "test123")
240
data = {'email':'jsmith3@example.com'}
241
form = PasswordResetForm(data)
242
self.assertTrue(form.is_valid())
243
self.assertEqual(form.cleaned_data['email'], u'jsmith3@example.com')
246
def test_bug_5605(self):
247
# bug #5605, preserve the case of the user name (before the @ in the
248
# email address) when creating a user.
249
user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
250
self.assertEqual(user.email, 'tesT@example.com')
251
user = User.objects.create_user('forms_test3', 'tesT', 'test')
252
self.assertEqual(user.email, 'tesT')