test_validators.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from rest_framework import serializers
  2. from django.core.exceptions import ValidationError
  3. from django.test import TestCase
  4. from misago.conf import settings
  5. from misago.core.testproject.validators import test_post_validator
  6. from misago.threads.validators import (
  7. load_post_validators, validate_post, validate_post_length, validate_title)
  8. class LoadPostValidatorsTests(TestCase):
  9. def test_empty_list(self):
  10. """empty validator list returns no validators"""
  11. self.assertEqual(load_post_validators([]), [])
  12. def test_load_validator(self):
  13. """function loads validator from list"""
  14. validators = load_post_validators([
  15. 'misago.core.testproject.validators.test_post_validator',
  16. ])
  17. self.assertEqual(validators, [test_post_validator])
  18. def test_load_nonexistant_validator(self):
  19. """nonexistant validator raises"""
  20. with self.assertRaises(ImportError):
  21. validators = load_post_validators([
  22. 'misago.core.yaddayadda.yaddayadda',
  23. ])
  24. with self.assertRaises(AttributeError):
  25. validators = load_post_validators([
  26. 'misago.core.yaddayadda',
  27. ])
  28. class ValidatePostLengthTests(TestCase):
  29. def test_valid_post(self):
  30. """valid post passes validation"""
  31. validate_post_length("Lorem ipsum dolor met sit amet elit.")
  32. def test_empty_post(self):
  33. """empty post is rejected"""
  34. with self.assertRaises(ValidationError):
  35. validate_post_length("")
  36. def test_too_short_post(self):
  37. """too short post is rejected"""
  38. with self.assertRaises(ValidationError):
  39. post = 'a' * settings.post_length_min
  40. validate_post_length(post[1:])
  41. def test_too_long_post(self):
  42. """too long post is rejected"""
  43. with self.assertRaises(ValidationError):
  44. post = 'a' * settings.post_length_max
  45. validate_post_length(post * 2)
  46. class ValidateTitleTests(TestCase):
  47. def test_valid_titles(self):
  48. """validate_title is ok with valid titles"""
  49. VALID_TITLES = [
  50. 'Lorem ipsum dolor met',
  51. '123 456 789 112'
  52. 'Ugabugagagagagaga',
  53. ]
  54. for title in VALID_TITLES:
  55. validate_title(title)
  56. def test_empty_title(self):
  57. """empty title is rejected"""
  58. with self.assertRaises(ValidationError):
  59. validate_title("")
  60. def test_too_short_title(self):
  61. """too short title is rejected"""
  62. with self.assertRaises(ValidationError):
  63. title = 'a' * settings.thread_title_length_min
  64. validate_title(title[1:])
  65. def test_too_long_title(self):
  66. """too long title is rejected"""
  67. with self.assertRaises(ValidationError):
  68. title = 'a' * settings.thread_title_length_max
  69. validate_title(title * 2)
  70. def test_unsluggable_title(self):
  71. """unsluggable title is rejected"""
  72. with self.assertRaises(ValidationError):
  73. title = '--' * settings.thread_title_length_min
  74. validate_title(title)