test_validators.py 5.7 KB

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