diff options
author | Paul Schilling <mail@paulschilling.de> | 2022-09-24 15:26:14 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-12-29 09:42:22 +0100 |
commit | 298d02a77a69321af8c0023df3250663e9d1362d (patch) | |
tree | 087ab161aeb1765d38d31f39ae004fc3d76f20c0 /tests/auth_tests | |
parent | 1833eb3f3e3bda5052637f1a51a27fa1b11b6871 (diff) | |
download | django-298d02a77a69321af8c0023df3250663e9d1362d.tar.gz |
Fixed #25617 -- Added case-insensitive unique username validation in UserCreationForm.
Co-Authored-By: Neven Mundar <nmundar@gmail.com>
Diffstat (limited to 'tests/auth_tests')
-rw-r--r-- | tests/auth_tests/test_forms.py | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py index 1aee923bb9..c3ce1f570f 100644 --- a/tests/auth_tests/test_forms.py +++ b/tests/auth_tests/test_forms.py @@ -6,6 +6,7 @@ from unittest import mock from django.contrib.auth.forms import ( AdminPasswordChangeForm, AuthenticationForm, + BaseUserCreationForm, PasswordChangeForm, PasswordResetForm, ReadOnlyPasswordHashField, @@ -54,14 +55,14 @@ class TestDataMixin: cls.u6 = User.objects.create(username="unknown_password", password="foo$bar") -class UserCreationFormTest(TestDataMixin, TestCase): +class BaseUserCreationFormTest(TestDataMixin, TestCase): def test_user_already_exists(self): data = { "username": "testclient", "password1": "test123", "password2": "test123", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertFalse(form.is_valid()) self.assertEqual( form["username"].errors, @@ -74,7 +75,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "test123", "password2": "test123", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertFalse(form.is_valid()) validator = next( v @@ -90,7 +91,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "test123", "password2": "test", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertFalse(form.is_valid()) self.assertEqual( form["password2"].errors, [str(form.error_messages["password_mismatch"])] @@ -99,7 +100,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): def test_both_passwords(self): # One (or both) passwords weren't given data = {"username": "jsmith"} - form = UserCreationForm(data) + form = BaseUserCreationForm(data) required_error = [str(Field.default_error_messages["required"])] self.assertFalse(form.is_valid()) self.assertEqual(form["password1"].errors, required_error) @@ -119,7 +120,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "test123", "password2": "test123", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertTrue(form.is_valid()) form.save(commit=False) self.assertEqual(password_changed.call_count, 0) @@ -133,7 +134,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "test123", "password2": "test123", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertTrue(form.is_valid()) u = form.save() self.assertEqual(u.username, "宝") @@ -147,7 +148,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "pwd2", "password2": "pwd2", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertTrue(form.is_valid()) user = form.save() self.assertNotEqual(user.username, ohm_username) @@ -168,7 +169,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "pwd2", "password2": "pwd2", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertFalse(form.is_valid()) self.assertEqual( form.errors["username"], ["A user with that username already exists."] @@ -198,7 +199,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": "testclient", "password2": "testclient", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertFalse(form.is_valid()) self.assertEqual(len(form["password2"].errors), 2) self.assertIn( @@ -210,8 +211,8 @@ class UserCreationFormTest(TestDataMixin, TestCase): ) def test_custom_form(self): - class CustomUserCreationForm(UserCreationForm): - class Meta(UserCreationForm.Meta): + class CustomUserCreationForm(BaseUserCreationForm): + class Meta(BaseUserCreationForm.Meta): model = ExtensionUser fields = UserCreationForm.Meta.fields + ("date_of_birth",) @@ -225,8 +226,8 @@ class UserCreationFormTest(TestDataMixin, TestCase): self.assertTrue(form.is_valid()) def test_custom_form_with_different_username_field(self): - class CustomUserCreationForm(UserCreationForm): - class Meta(UserCreationForm.Meta): + class CustomUserCreationForm(BaseUserCreationForm): + class Meta(BaseUserCreationForm.Meta): model = CustomUser fields = ("email", "date_of_birth") @@ -240,8 +241,8 @@ class UserCreationFormTest(TestDataMixin, TestCase): self.assertTrue(form.is_valid()) def test_custom_form_hidden_username_field(self): - class CustomUserCreationForm(UserCreationForm): - class Meta(UserCreationForm.Meta): + class CustomUserCreationForm(BaseUserCreationForm): + class Meta(BaseUserCreationForm.Meta): model = CustomUserWithoutIsActiveField fields = ("email",) # without USERNAME_FIELD @@ -254,8 +255,8 @@ class UserCreationFormTest(TestDataMixin, TestCase): self.assertTrue(form.is_valid()) def test_custom_form_saves_many_to_many_field(self): - class CustomUserCreationForm(UserCreationForm): - class Meta(UserCreationForm.Meta): + class CustomUserCreationForm(BaseUserCreationForm): + class Meta(BaseUserCreationForm.Meta): model = CustomUserWithM2M fields = UserCreationForm.Meta.fields + ("orgs",) @@ -278,7 +279,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): "password1": " testpassword ", "password2": " testpassword ", } - form = UserCreationForm(data) + form = BaseUserCreationForm(data) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data["password1"], data["password1"]) self.assertEqual(form.cleaned_data["password2"], data["password2"]) @@ -294,7 +295,7 @@ class UserCreationFormTest(TestDataMixin, TestCase): ] ) def test_password_help_text(self): - form = UserCreationForm() + form = BaseUserCreationForm() self.assertEqual( form.fields["password1"].help_text, "<ul><li>" @@ -313,10 +314,12 @@ class UserCreationFormTest(TestDataMixin, TestCase): ] ) def test_user_create_form_validates_password_with_all_data(self): - """UserCreationForm password validation uses all of the form's data.""" + """ + BaseUserCreationForm password validation uses all of the form's data. + """ - class CustomUserCreationForm(UserCreationForm): - class Meta(UserCreationForm.Meta): + class CustomUserCreationForm(BaseUserCreationForm): + class Meta(BaseUserCreationForm.Meta): model = User fields = ("username", "email", "first_name", "last_name") @@ -336,13 +339,13 @@ class UserCreationFormTest(TestDataMixin, TestCase): ) def test_username_field_autocapitalize_none(self): - form = UserCreationForm() + form = BaseUserCreationForm() self.assertEqual( form.fields["username"].widget.attrs.get("autocapitalize"), "none" ) def test_html_autocomplete_attributes(self): - form = UserCreationForm() + form = BaseUserCreationForm() tests = ( ("username", "username"), ("password1", "new-password"), @@ -355,6 +358,21 @@ class UserCreationFormTest(TestDataMixin, TestCase): ) +class UserCreationFormTest(TestDataMixin, TestCase): + def test_case_insensitive_username(self): + data = { + "username": "TeStClIeNt", + "password1": "test123", + "password2": "test123", + } + form = UserCreationForm(data) + self.assertFalse(form.is_valid()) + self.assertEqual( + form["username"].errors, + ["A user with that username already exists."], + ) + + # To verify that the login form rejects inactive users, use an authentication # backend that allows them. @override_settings( |