test_validators.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from unittest.mock import Mock
  2. from django.core.exceptions import ValidationError
  3. from django.test import TestCase
  4. from misago.threads.validators import validate_post_length, validate_thread_title
  5. class ValidatePostLengthTests(TestCase):
  6. def test_valid_post_length_passes_validation(self):
  7. """valid post passes validation"""
  8. settings = Mock(post_length_min=1, post_length_max=50)
  9. validate_post_length(settings, "Lorem ipsum dolor met sit amet elit.")
  10. def test_for_empty_post_validation_error_is_raised(self):
  11. """empty post is rejected"""
  12. settings = Mock(post_length_min=3)
  13. with self.assertRaises(ValidationError):
  14. validate_post_length(settings, "")
  15. def test_for_too_short_post_validation_error_is_raised(self):
  16. """too short post is rejected"""
  17. settings = Mock(post_length_min=3)
  18. with self.assertRaises(ValidationError):
  19. validate_post_length(settings, "a")
  20. def test_for_too_long_post_validation_error_is_raised(self):
  21. """too long post is rejected"""
  22. settings = Mock(post_length_min=1, post_length_max=2)
  23. with self.assertRaises(ValidationError):
  24. post = "a" * settings.post_length_max
  25. validate_post_length(settings, "abc")
  26. class ValidateThreadTitleTests(TestCase):
  27. def test_valid_thread_titles_pass_validation(self):
  28. """validate_thread_title is ok with valid titles"""
  29. settings = Mock(thread_title_length_min=1, thread_title_length_max=50)
  30. VALID_TITLES = ["Lorem ipsum dolor met", "123 456 789 112" "Ugabugagagagagaga"]
  31. for title in VALID_TITLES:
  32. validate_thread_title(settings, title)
  33. def test_for_empty_thread_title_validation_error_is_raised(self):
  34. """empty title is rejected"""
  35. settings = Mock(thread_title_length_min=3)
  36. with self.assertRaises(ValidationError):
  37. validate_thread_title(settings, "")
  38. def test_for_too_short_thread_title_validation_error_is_raised(self):
  39. """too short title is rejected"""
  40. settings = Mock(thread_title_length_min=3)
  41. with self.assertRaises(ValidationError):
  42. validate_thread_title(settings, "a")
  43. def test_for_too_long_thread_title_validation_error_is_raised(self):
  44. """too long title is rejected"""
  45. settings = Mock(thread_title_length_min=1, thread_title_length_max=2)
  46. with self.assertRaises(ValidationError):
  47. validate_thread_title(settings, "abc")
  48. def test_for_unsluggable_thread_title_valdiation_error_is_raised(self):
  49. """unsluggable title is rejected"""
  50. settings = Mock(thread_title_length_min=1, thread_title_length_max=9)
  51. with self.assertRaises(ValidationError):
  52. validate_thread_title(settings, "-#%^&-")