summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2016-04-22 19:39:13 +0200
committerClaude Paroz <claude@2xlibre.net>2016-05-16 19:37:57 +0200
commit526575c64150e10dd8666d1ed3f86eedd00df2ed (patch)
tree175e0889a9ef03f53ed9273fb659918eea01fe2d /tests
parent2265ff3710ae244a6f01640972571979543282c6 (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.py5
-rw-r--r--tests/auth_tests/test_forms.py26
-rw-r--r--tests/auth_tests/test_validators.py28
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)