test_invalidatebans.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.core.management import call_command
  4. from django.test import TestCase
  5. from django.utils import timezone
  6. from django.utils.six import StringIO
  7. from django.utils.six.moves import range
  8. from .. import bans
  9. from ..management.commands import invalidatebans
  10. from ..models import Ban, BanCache
  11. class InvalidateBansTests(TestCase):
  12. def test_expired_bans_handling(self):
  13. """expired bans are flagged as such"""
  14. # create 5 bans then update their valid date to past one
  15. for i in range(5):
  16. Ban.objects.create(banned_value="abcd")
  17. expired_date = (timezone.now() - timedelta(days=10))
  18. Ban.objects.all().update(expires_on=expired_date, is_checked=True)
  19. self.assertEqual(Ban.objects.filter(is_checked=True).count(), 5)
  20. command = invalidatebans.Command()
  21. out = StringIO()
  22. call_command(command, stdout=out)
  23. command_output = out.getvalue().splitlines()[0].strip()
  24. self.assertEqual(command_output, 'Bans invalidated: 5')
  25. self.assertEqual(Ban.objects.filter(is_checked=True).count(), 0)
  26. def test_bans_caches_updates(self):
  27. """ban caches are updated"""
  28. # create user
  29. User = get_user_model()
  30. user = User.objects.create_user("Bob", "bob@boberson.com", "Pass.123")
  31. # ban user
  32. Ban.objects.create(banned_value="bob")
  33. user_ban = bans.get_user_ban(user)
  34. self.assertIsNotNone(user_ban)
  35. self.assertEqual(Ban.objects.filter(is_checked=True).count(), 1)
  36. # first call didn't touch ban
  37. command = invalidatebans.Command()
  38. out = StringIO()
  39. call_command(command, stdout=out)
  40. command_output = out.getvalue().splitlines()[1].strip()
  41. self.assertEqual(command_output, 'Ban caches emptied: 0')
  42. self.assertEqual(Ban.objects.filter(is_checked=True).count(), 1)
  43. # expire bans
  44. expired_date = (timezone.now() - timedelta(days=10))
  45. Ban.objects.all().update(expires_on=expired_date, is_checked=True)
  46. BanCache.objects.all().update(expires_on=expired_date)
  47. # invalidate expired ban cache
  48. out = StringIO()
  49. call_command(command, stdout=out)
  50. command_output = out.getvalue().splitlines()[1].strip()
  51. self.assertEqual(command_output, 'Ban caches emptied: 1')
  52. self.assertEqual(Ban.objects.filter(is_checked=True).count(), 0)
  53. # see if user is banned anymore
  54. user = User.objects.get(id=user.id)
  55. self.assertIsNone(bans.get_user_ban(user))