diff options
| author | Tim Graham <timograham@gmail.com> | 2016-06-21 09:06:34 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-06-21 16:19:37 -0400 |
| commit | 39805686b364358af725b695924a5a6dfa7f5302 (patch) | |
| tree | 5b637ab2856e755b70e5147f55dc82a62237644c /tests/auth_tests | |
| parent | 5ce660cd65a4ffcf74d94ba987fe03a16b7436a0 (diff) | |
Refs #21379, #26719 -- Moved username normalization to AbstractBaseUser.
Thanks Huynh Thanh Tam for the initial patch and Claude Paroz for review.
Diffstat (limited to 'tests/auth_tests')
| -rw-r--r-- | tests/auth_tests/test_forms.py | 16 | ||||
| -rw-r--r-- | tests/auth_tests/test_models.py | 18 |
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py index d2ce828eb8..fe22d1e20b 100644 --- a/tests/auth_tests/test_forms.py +++ b/tests/auth_tests/test_forms.py @@ -120,6 +120,22 @@ class UserCreationFormTest(TestDataMixin, TestCase): self.assertFalse(form.is_valid()) @skipIf(six.PY2, "Python 2 doesn't support unicode usernames by default.") + def test_normalize_username(self): + # The normalization happens in AbstractBaseUser.clean() and ModelForm + # validation calls Model.clean(). + ohm_username = 'testΩ' # U+2126 OHM SIGN + data = { + 'username': ohm_username, + 'password1': 'pwd2', + 'password2': 'pwd2', + } + form = UserCreationForm(data) + self.assertTrue(form.is_valid()) + user = form.save() + self.assertNotEqual(user.username, ohm_username) + self.assertEqual(user.username, 'testΩ') # U+03A9 GREEK CAPITAL LETTER OMEGA + + @skipIf(six.PY2, "Python 2 doesn't support unicode usernames by default.") def test_duplicate_normalized_unicode(self): """ To prevent almost identical usernames, visually identical but differing diff --git a/tests/auth_tests/test_models.py b/tests/auth_tests/test_models.py index 1f9edbc77c..7967306c43 100644 --- a/tests/auth_tests/test_models.py +++ b/tests/auth_tests/test_models.py @@ -1,3 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + from django.conf.global_settings import PASSWORD_HASHERS from django.contrib.auth import get_user_model from django.contrib.auth.hashers import get_hasher @@ -143,6 +146,21 @@ class UserManagerTestCase(TestCase): ) +class AbstractBaseUserTests(TestCase): + + def test_clean_normalize_username(self): + # The normalization happens in AbstractBaseUser.clean() + ohm_username = 'iamtheΩ' # U+2126 OHM SIGN + for model in ('auth.User', 'auth_tests.CustomUser'): + with self.settings(AUTH_USER_MODEL=model): + User = get_user_model() + user = User(**{User.USERNAME_FIELD: ohm_username, 'password': 'foo'}) + user.clean() + username = user.get_username() + self.assertNotEqual(username, ohm_username) + self.assertEqual(username, 'iamtheΩ') # U+03A9 GREEK CAPITAL LETTER OMEGA + + class AbstractUserTestCase(TestCase): def test_email_user(self): # valid send_mail parameters |
