Changed clean_link_id to be in a wrapper form as well.
Patch by: Lennard de Rijk
Reviewed by: to-be-reviewed
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@example.com',... 'password1': 'test123',... 'password2': 'test123',... }>>> form = UserCreationForm(data)>>> form.is_valid()False>>> form["username"].errors[u'This value must contain only letters, numbers and underscores.']# 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',... 'password1': 'test123',... 'password2': 'test123',... }>>> form = UserCreationForm(data)>>> form.is_valid()True>>> form.save()<User: jsmith2># 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 must contain only letters, numbers and underscores.']"""