diff options
| author | Claude Paroz <claude@2xlibre.net> | 2016-04-22 19:39:13 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2016-05-16 19:37:57 +0200 |
| commit | 526575c64150e10dd8666d1ed3f86eedd00df2ed (patch) | |
| tree | 175e0889a9ef03f53ed9273fb659918eea01fe2d /tests | |
| parent | 2265ff3710ae244a6f01640972571979543282c6 (diff) | |
Fixed #21379 -- Created auth-specific username validators
Thanks Tim Graham for the review.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/auth_tests/test_basic.py | 5 | ||||
| -rw-r--r-- | tests/auth_tests/test_forms.py | 26 | ||||
| -rw-r--r-- | tests/auth_tests/test_validators.py | 28 |
3 files changed, 58 insertions, 1 deletions
diff --git a/tests/auth_tests/test_basic.py b/tests/auth_tests/test_basic.py index 818f6a6d53..da42f4055f 100644 --- a/tests/auth_tests/test_basic.py +++ b/tests/auth_tests/test_basic.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from __future__ import unicode_literals import warnings @@ -56,6 +57,10 @@ class BasicTestCase(TestCase): u2 = User.objects.create_user('testuser2', 'test2@example.com') self.assertFalse(u2.has_usable_password()) + def test_unicode_username(self): + User.objects.create_user('jörg') + User.objects.create_user('Григорий') + def test_is_anonymous_authenticated_method_deprecation(self): deprecation_message = ( 'Using user.is_authenticated() and user.is_anonymous() as a ' diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py index d77c9a976b..212dff1ab0 100644 --- a/tests/auth_tests/test_forms.py +++ b/tests/auth_tests/test_forms.py @@ -16,7 +16,7 @@ from django.core import mail from django.core.mail import EmailMultiAlternatives from django.forms.fields import CharField, Field from django.test import SimpleTestCase, TestCase, mock, override_settings -from django.utils import translation +from django.utils import six, translation from django.utils.encoding import force_text from django.utils.text import capfirst from django.utils.translation import ugettext as _ @@ -104,6 +104,20 @@ class UserCreationFormTest(TestDataMixin, TestCase): self.assertEqual(password_changed.call_count, 1) self.assertEqual(repr(u), '<User: jsmith@example.com>') + def test_unicode_username(self): + data = { + 'username': '宝', + 'password1': 'test123', + 'password2': 'test123', + } + form = UserCreationForm(data) + if six.PY3: + self.assertTrue(form.is_valid()) + u = form.save() + self.assertEqual(u.username, '宝') + else: + self.assertFalse(form.is_valid()) + @override_settings(AUTH_PASSWORD_VALIDATORS=[ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': { @@ -254,6 +268,16 @@ class AuthenticationFormTest(TestDataMixin, TestCase): self.assertTrue(form.is_valid()) self.assertEqual(form.non_field_errors(), []) + def test_unicode_username(self): + User.objects.create_user(username='Σαρα', password='pwd') + data = { + 'username': 'Σαρα', + 'password': 'pwd', + } + form = AuthenticationForm(None, data) + self.assertTrue(form.is_valid()) + self.assertEqual(form.non_field_errors(), []) + def test_username_field_label(self): class CustomAuthenticationForm(AuthenticationForm): diff --git a/tests/auth_tests/test_validators.py b/tests/auth_tests/test_validators.py index 5d758cd342..49a3c5395b 100644 --- a/tests/auth_tests/test_validators.py +++ b/tests/auth_tests/test_validators.py @@ -1,7 +1,9 @@ +# -*- coding: utf-8 -*- from __future__ import unicode_literals import os +from django.contrib.auth import validators from django.contrib.auth.models import User from django.contrib.auth.password_validation import ( CommonPasswordValidator, MinimumLengthValidator, NumericPasswordValidator, @@ -174,3 +176,29 @@ class NumericPasswordValidatorTest(TestCase): NumericPasswordValidator().get_help_text(), "Your password can't be entirely numeric." ) + + +class UsernameValidatorsTests(TestCase): + def test_unicode_validator(self): + valid_usernames = ['joe', 'René', 'ᴮᴵᴳᴮᴵᴿᴰ', 'أحمد'] + invalid_usernames = [ + "o'connell", "عبد ال", + "zerowidth\u200Bspace", "nonbreaking\u00A0space", + "en\u2013dash", + ] + v = validators.UnicodeUsernameValidator() + for valid in valid_usernames: + v(valid) + for invalid in invalid_usernames: + with self.assertRaises(ValidationError): + v(invalid) + + def test_ascii_validator(self): + valid_usernames = ['glenn', 'GLEnN', 'jean-marc'] + invalid_usernames = ["o'connell", 'Éric', 'jean marc', "أحمد"] + v = validators.ASCIIUsernameValidator() + for valid in valid_usernames: + v(valid) + for invalid in invalid_usernames: + with self.assertRaises(ValidationError): + v(invalid) |
