test_validators.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #-*- coding: utf-8 -*-
  2. from django.contrib.auth import get_user_model
  3. from django.core.exceptions import PermissionDenied, ValidationError
  4. from django.test import TestCase
  5. from misago.conf import settings
  6. from misago.users.models import Ban, BAN_USERNAME, BAN_EMAIL
  7. from misago.users.validators import (validate_email,
  8. validate_email_available,
  9. validate_email_banned,
  10. validate_password,
  11. validate_username,
  12. validate_username_available,
  13. validate_username_banned,
  14. validate_username_content,
  15. validate_username_length,
  16. validate_gmail_email)
  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. validate_email_available(self.test_user.email, exclude=self.test_user)
  27. def test_invalid_email(self):
  28. """validate_email_available disallows unvailable emails"""
  29. with self.assertRaises(ValidationError):
  30. validate_email_available(self.test_user.email)
  31. class ValidateEmailBannedTests(TestCase):
  32. def setUp(self):
  33. Ban.objects.create(check_type=BAN_EMAIL, banned_value="ban@test.com")
  34. def test_unbanned_name(self):
  35. """unbanned email passes validation"""
  36. validate_email_banned('noban@test.com')
  37. def test_banned_name(self):
  38. """banned email fails validation"""
  39. with self.assertRaises(ValidationError):
  40. validate_email_banned('ban@test.com')
  41. class ValidateEmailTests(TestCase):
  42. def test_validate_email(self):
  43. """validate_email has no crashes"""
  44. validate_email('bob@boberson.com')
  45. with self.assertRaises(ValidationError):
  46. validate_email('*')
  47. class ValidatePasswordTests(TestCase):
  48. def test_valid_password(self):
  49. """validate_password allows valid password"""
  50. validate_password('A' * (settings.password_length_min + 1))
  51. def test_invalid_name(self):
  52. """validate_password disallows invalid password"""
  53. with self.assertRaises(ValidationError):
  54. validate_password('A' * (settings.password_length_min - 1))
  55. class ValidateUsernameTests(TestCase):
  56. def test_validate_username(self):
  57. """validate_username has no crashes"""
  58. validate_username('LeBob')
  59. with self.assertRaises(ValidationError):
  60. validate_username('*')
  61. class ValidateUsernameAvailableTests(TestCase):
  62. def setUp(self):
  63. User = get_user_model()
  64. self.test_user = User.objects.create_user('EricTheFish',
  65. 'eric@test.com',
  66. 'pass123')
  67. def test_valid_name(self):
  68. """validate_username_available allows available names"""
  69. validate_username_available('BobBoberson')
  70. validate_username_available(self.test_user.username,
  71. exclude=self.test_user)
  72. def test_invalid_name(self):
  73. """validate_username_available disallows unvailable names"""
  74. with self.assertRaises(ValidationError):
  75. validate_username_available(self.test_user.username)
  76. class ValidateUsernameBannedTests(TestCase):
  77. def setUp(self):
  78. Ban.objects.create(check_type=BAN_USERNAME, banned_value="Bob")
  79. def test_unbanned_name(self):
  80. """unbanned name passes validation"""
  81. validate_username_banned('Luke')
  82. def test_banned_name(self):
  83. """banned name fails validation"""
  84. with self.assertRaises(ValidationError):
  85. validate_username_banned('Bob')
  86. class ValidateUsernameContentTests(TestCase):
  87. def test_valid_name(self):
  88. """validate_username_content allows valid names"""
  89. validate_username_content('123')
  90. validate_username_content('Bob')
  91. validate_username_content('Bob123')
  92. def test_invalid_name(self):
  93. """validate_username_content disallows invalid names"""
  94. with self.assertRaises(ValidationError):
  95. validate_username_content('!')
  96. with self.assertRaises(ValidationError):
  97. validate_username_content('Bob!')
  98. with self.assertRaises(ValidationError):
  99. validate_username_content('Bob Boberson')
  100. with self.assertRaises(ValidationError):
  101. validate_username_content(u'Rafał')
  102. with self.assertRaises(ValidationError):
  103. validate_username_content(u'初音 ミク')
  104. class ValidateUsernameLengthTests(TestCase):
  105. def test_valid_name(self):
  106. """validate_username_length allows valid names"""
  107. validate_username_length('a' * settings.username_length_min)
  108. validate_username_length('a' * settings.username_length_max)
  109. def test_invalid_name(self):
  110. """validate_username_length disallows invalid names"""
  111. with self.assertRaises(ValidationError):
  112. validate_username_length('a' * (settings.username_length_min - 1))
  113. with self.assertRaises(ValidationError):
  114. validate_username_length('a' * (settings.username_length_max + 1))
  115. class ValidateGmailEmailTests(TestCase):
  116. def test_validate_gmail_email(self):
  117. """validate_gmail_email spots spammy gmail address"""
  118. validate_gmail_email('', '', 'the.bob.boberson@gmail.com')
  119. validate_gmail_email('', '', 'the.bob.boberson@hotmail.com')
  120. with self.assertRaises(PermissionDenied):
  121. validate_gmail_email('', '', 'the.b.o.b.b.ob.e.r.son@gmail.com')