test_bans.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 misago.users.bans import get_user_ban, get_request_ip_ban
  6. from misago.users.models import Ban, BAN_IP
  7. class UserBansTests(TestCase):
  8. def setUp(self):
  9. User = get_user_model()
  10. self.user = User.objects.create_user('Bob',
  11. 'bob@boberson.com',
  12. 'pass123')
  13. def test_no_ban(self):
  14. """user is not caught by ban"""
  15. self.assertIsNone(get_user_ban(self.user))
  16. self.assertFalse(self.user.ban_cache.is_banned)
  17. def test_permanent_ban(self):
  18. """user is caught by permanent ban"""
  19. Ban.objects.create(banned_value='bob',
  20. user_message='User reason',
  21. staff_message='Staff reason')
  22. user_ban = get_user_ban(self.user)
  23. self.assertIsNotNone(user_ban)
  24. self.assertEqual(user_ban.user_message, 'User reason')
  25. self.assertEqual(user_ban.staff_message, 'Staff reason')
  26. self.assertTrue(self.user.ban_cache.is_banned)
  27. def test_temporary_ban(self):
  28. """user is caught by temporary ban"""
  29. Ban.objects.create(banned_value='bo*',
  30. user_message='User reason',
  31. staff_message='Staff reason',
  32. expires_on=timezone.now() + timedelta(days=7))
  33. user_ban = get_user_ban(self.user)
  34. self.assertIsNotNone(user_ban)
  35. self.assertEqual(user_ban.user_message, 'User reason')
  36. self.assertEqual(user_ban.staff_message, 'Staff reason')
  37. self.assertTrue(self.user.ban_cache.is_banned)
  38. def test_expired_ban(self):
  39. """user is not caught by expired ban"""
  40. Ban.objects.create(banned_value='bo*',
  41. expires_on=timezone.now() - timedelta(days=7))
  42. self.assertIsNone(get_user_ban(self.user))
  43. self.assertFalse(self.user.ban_cache.is_banned)
  44. class FakeRequest(object):
  45. def __init__(self):
  46. self._misago_real_ip = '127.0.0.1'
  47. self.session = {}
  48. class RequestIPBansTests(TestCase):
  49. def test_no_ban(self):
  50. """no ban found"""
  51. ip_ban = get_request_ip_ban(FakeRequest())
  52. self.assertIsNone(ip_ban)
  53. def test_permanent_ban(self):
  54. """ip is caught by permanent ban"""
  55. Ban.objects.create(check_type=BAN_IP,
  56. banned_value='127.0.0.1',
  57. user_message='User reason')
  58. ip_ban = get_request_ip_ban(FakeRequest())
  59. self.assertTrue(ip_ban['is_banned'])
  60. self.assertEqual(ip_ban['ip'], '127.0.0.1')
  61. self.assertEqual(ip_ban['message'], 'User reason')
  62. # repeated call uses cache
  63. get_request_ip_ban(FakeRequest())
  64. def test_temporary_ban(self):
  65. """ip is caught by temporary ban"""
  66. Ban.objects.create(check_type=BAN_IP,
  67. banned_value='127.0.0.1',
  68. user_message='User reason',
  69. expires_on=timezone.now() + timedelta(days=7))
  70. ip_ban = get_request_ip_ban(FakeRequest())
  71. self.assertTrue(ip_ban['is_banned'])
  72. self.assertEqual(ip_ban['ip'], '127.0.0.1')
  73. self.assertEqual(ip_ban['message'], 'User reason')
  74. # repeated call uses cache
  75. get_request_ip_ban(FakeRequest())
  76. def test_expired_ban(self):
  77. """ip is not caught by expired ban"""
  78. Ban.objects.create(check_type=BAN_IP,
  79. banned_value='127.0.0.1',
  80. user_message='User reason',
  81. expires_on=timezone.now() - timedelta(days=7))
  82. ip_ban = get_request_ip_ban(FakeRequest())
  83. self.assertIsNone(ip_ban)
  84. # repeated call uses cache
  85. get_request_ip_ban(FakeRequest())