test_bansmaintenance.py 2.5 KB

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