test_validators.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #-*- coding: utf-8 -*-
  2. from django.contrib.auth import get_user_model
  3. from django.core.exceptions import ValidationError
  4. from django.test import TestCase
  5. from misago.conf import settings
  6. from misago.users.validators import (validate_email, validate_email_available,
  7. validate_password,
  8. validate_password_complexity,
  9. validate_password_length,
  10. _validate_password_alphanumerics,
  11. _validate_password_case,
  12. _validate_password_special,
  13. validate_username,
  14. validate_username_available,
  15. validate_username_content,
  16. validate_username_length)
  17. class ValidateEmailAvailableTests(TestCase):
  18. def setUp(self):
  19. User = get_user_model()
  20. self.test_user = User.objects.create_user('EricTheFish',
  21. 'eric@test.com',
  22. 'pass123')
  23. def test_valid_email(self):
  24. """validate_email_available allows available emails"""
  25. validate_email_available('bob@boberson.com')
  26. def test_invalid_email(self):
  27. """validate_email_available disallows unvailable emails"""
  28. with self.assertRaises(ValidationError):
  29. validate_email_available(self.test_user.email)
  30. class ValidateEmailTests(TestCase):
  31. def test_validate_email(self):
  32. """validate_email has no crashes"""
  33. validate_email('bob@boberson.com')
  34. with self.assertRaises(ValidationError):
  35. validate_email('*')
  36. class ValidatePasswordTests(TestCase):
  37. def test_validate_password(self):
  38. """validate_password has no crashes"""
  39. validate_password('Bobbins.1')
  40. with self.assertRaises(ValidationError):
  41. validate_password('b')
  42. class ValidatePasswordLengthTests(TestCase):
  43. def test_valid_password(self):
  44. """validate_password_length allows valid password"""
  45. validate_password_length('A' * (settings.password_length_min + 1))
  46. def test_invalid_name(self):
  47. """validate_password_length disallows invalid password"""
  48. with self.assertRaises(ValidationError):
  49. validate_password_length('A' * (settings.password_length_min - 1))
  50. class ValidatePasswordComplexityRules(TestCase):
  51. def test_validate_password_alphanumerics(self):
  52. """_validate_password_alphanumerics enforces complexity correctly"""
  53. _validate_password_alphanumerics('abc123')
  54. with self.assertRaises(ValidationError):
  55. _validate_password_alphanumerics('abc')
  56. with self.assertRaises(ValidationError):
  57. _validate_password_alphanumerics('123')
  58. def test_validate_password_case(self):
  59. """_validate_password_case enforces complexity correctly"""
  60. _validate_password_case('AbC')
  61. with self.assertRaises(ValidationError):
  62. _validate_password_case('abc')
  63. with self.assertRaises(ValidationError):
  64. _validate_password_case('--')
  65. def test_validate_password_special(self):
  66. """_validate_password_special enforces complexity correctly"""
  67. _validate_password_special(u'łoł12 3&(#@$')
  68. with self.assertRaises(ValidationError):
  69. _validate_password_special('A')
  70. class ValidateUsernameTests(TestCase):
  71. def test_validate_username(self):
  72. """validate_username has no crashes"""
  73. validate_username('LeBob')
  74. with self.assertRaises(ValidationError):
  75. validate_username('*')
  76. class ValidateUsernameAvailableTests(TestCase):
  77. def setUp(self):
  78. User = get_user_model()
  79. self.test_user = User.objects.create_user('EricTheFish',
  80. 'eric@test.com',
  81. 'pass123')
  82. def test_valid_name(self):
  83. """validate_username_available allows available names"""
  84. validate_username_available('BobBoberson')
  85. def test_invalid_name(self):
  86. """validate_username_available disallows unvailable names"""
  87. with self.assertRaises(ValidationError):
  88. validate_username_available(self.test_user.username)
  89. class ValidateUsernameContentTests(TestCase):
  90. def test_valid_name(self):
  91. """validate_username_content allows valid names"""
  92. validate_username_content('123')
  93. validate_username_content('Bob')
  94. validate_username_content('Bob123')
  95. def test_invalid_name(self):
  96. """validate_username_content disallows invalid names"""
  97. with self.assertRaises(ValidationError):
  98. validate_username_content('!')
  99. with self.assertRaises(ValidationError):
  100. validate_username_content('Bob!')
  101. with self.assertRaises(ValidationError):
  102. validate_username_content('Bob Boberson')
  103. with self.assertRaises(ValidationError):
  104. validate_username_content(u'Rafał')
  105. with self.assertRaises(ValidationError):
  106. validate_username_content(u'初音 ミク')
  107. class ValidateUsernameLengthTests(TestCase):
  108. def test_valid_name(self):
  109. """validate_username_length allows valid names"""
  110. validate_username_length('a' * settings.username_length_min)
  111. validate_username_length('a' * settings.username_length_max)
  112. def test_invalid_name(self):
  113. """validate_username_length disallows invalid names"""
  114. with self.assertRaises(ValidationError):
  115. validate_username_length('a' * (settings.username_length_min - 1))
  116. with self.assertRaises(ValidationError):
  117. validate_username_length('a' * (settings.username_length_max + 1))