test_validators.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 = [
  31. 'Lorem ipsum dolor met',
  32. '123 456 789 112'
  33. 'Ugabugagagagagaga',
  34. ]
  35. for title in VALID_TITLES:
  36. validate_thread_title(settings, title)
  37. def test_for_empty_thread_title_validation_error_is_raised(self):
  38. """empty title is rejected"""
  39. settings = Mock(thread_title_length_min=3)
  40. with self.assertRaises(ValidationError):
  41. validate_thread_title(settings, "")
  42. def test_for_too_short_thread_title_validation_error_is_raised(self):
  43. """too short title is rejected"""
  44. settings = Mock(thread_title_length_min=3)
  45. with self.assertRaises(ValidationError):
  46. validate_thread_title(settings, "a")
  47. def test_for_too_long_thread_title_validation_error_is_raised(self):
  48. """too long title is rejected"""
  49. settings = Mock(thread_title_length_min=1, thread_title_length_max=2)
  50. with self.assertRaises(ValidationError):
  51. validate_thread_title(settings, "abc")
  52. def test_for_unsluggable_thread_title_valdiation_error_is_raised(self):
  53. """unsluggable title is rejected"""
  54. settings = Mock(thread_title_length_min=1, thread_title_length_max=9)
  55. with self.assertRaises(ValidationError):
  56. validate_thread_title(settings, "-#%^&-")