test_floodprotection_middleware.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from misago.acl.testutils import override_acl
  4. from misago.threads.api.postingendpoint import PostingInterrupt
  5. from misago.threads.api.postingendpoint.floodprotection import FloodProtectionMiddleware
  6. from misago.users.testutils import AuthenticatedUserTestCase
  7. def get_middleware_for_testing(**kwargs):
  8. mock_kwargs = {
  9. 'prefix': 'test',
  10. 'mode': 0,
  11. 'request': None,
  12. 'user': None,
  13. 'datetime': None,
  14. 'parsing_result': None,
  15. 'thread': None,
  16. 'post': None,
  17. }
  18. mock_kwargs.update(kwargs)
  19. return FloodProtectionMiddleware(**mock_kwargs)
  20. class FloodProtectionMiddlewareTests(AuthenticatedUserTestCase):
  21. def test_flood_protection_middleware_on_no_posts(self):
  22. """middleware sets last_posted_on on user"""
  23. self.user.update_fields = []
  24. self.assertIsNone(self.user.last_posted_on)
  25. middleware = get_middleware_for_testing(user=self.user)
  26. middleware.interrupt_posting(None)
  27. self.assertIsNotNone(self.user.last_posted_on)
  28. def test_flood_protection_middleware_old_posts(self):
  29. """middleware is not interrupting if previous post is old"""
  30. self.user.update_fields = []
  31. original_last_posted_on = timezone.now() - timedelta(days=1)
  32. self.user.last_posted_on = original_last_posted_on
  33. middleware = get_middleware_for_testing(user=self.user)
  34. middleware.interrupt_posting(None)
  35. self.assertTrue(self.user.last_posted_on > original_last_posted_on)
  36. def test_flood_protection_middleware_on_flood(self):
  37. """middleware is interrupting flood"""
  38. self.user.last_posted_on = timezone.now()
  39. with self.assertRaises(PostingInterrupt):
  40. middleware = get_middleware_for_testing(user=self.user)
  41. middleware.interrupt_posting(None)
  42. def test_flood_permission(self):
  43. """middleware is respects permission to flood for team members"""
  44. override_acl(self.user, {'can_omit_flood_protection': True})
  45. middleware = get_middleware_for_testing(user=self.user)
  46. self.assertFalse(middleware.use_this_middleware())