123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- from datetime import timedelta
- from django.contrib.auth import get_user_model
- from django.utils import timezone
- from misago.users.audittrail import create_audit_trail, create_user_audit_trail
- from misago.users.models import AuditTrail
- from misago.users.signals import remove_old_ips
- from misago.users.testutils import UserTestCase
- UserModel = get_user_model()
- USER_IP = '13.41.51.41'
- class MockRequest(object):
- user_ip = USER_IP
- def __init__(self, user):
- self.user = user
- class CreateAuditTrailTests(UserTestCase):
- def setUp(self):
- super().setUp()
- self.obj = UserModel.objects.create_user('BobBoberson', 'bob@example.com')
- def test_create_audit_require_model(self):
- """create_audit_trail requires model instance"""
- anonymous_user = self.get_anonymous_user()
- request = MockRequest(anonymous_user)
- with self.assertRaises(ValueError):
- create_audit_trail(request, anonymous_user)
- self.assertEqual(AuditTrail.objects.count(), 0)
- def test_create_audit_trail_anonymous_user(self):
- """create_audit_trail doesn't record anonymous users"""
- user = self.get_anonymous_user()
- request = MockRequest(user)
- create_audit_trail(request, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 0)
- def test_create_audit_trail(self):
- """create_audit_trail creates new db record"""
- user = self.get_authenticated_user()
- request = MockRequest(user)
- create_audit_trail(request, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- audit_trail = user.audittrail_set.all()[0]
- self.assertEqual(audit_trail.user, user)
- self.assertEqual(audit_trail.ip_address, request.user_ip)
- self.assertEqual(audit_trail.content_object, self.obj)
- def test_delete_user_remove_audit_trail(self):
- """audit trail is deleted together with user it belongs to"""
- user = self.get_authenticated_user()
- request = MockRequest(user)
- create_audit_trail(request, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- user.delete()
- self.assertEqual(AuditTrail.objects.count(), 0)
- def test_delete_obj_keep_audit_trail(self):
- """audit trail is kept after with obj it points at is deleted"""
- user = self.get_authenticated_user()
- request = MockRequest(user)
- create_audit_trail(request, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- self.obj.delete()
- self.assertEqual(AuditTrail.objects.count(), 1)
- audit_trail = user.audittrail_set.all()[0]
- self.assertEqual(audit_trail.user, user)
- self.assertEqual(audit_trail.ip_address, request.user_ip)
- self.assertIsNone(audit_trail.content_object)
- def test_delete_audit_trail(self):
- """audit trail deletion leaves other data untouched"""
- user = self.get_authenticated_user()
- request = MockRequest(user)
- create_audit_trail(request, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- audit_trail = user.audittrail_set.all()[0]
- audit_trail.delete()
-
- UserModel.objects.get(id=user.id)
- UserModel.objects.get(id=self.obj.id)
- class CreateUserAuditTrailTests(UserTestCase):
- def setUp(self):
- super().setUp()
- self.obj = UserModel.objects.create_user('BobBoberson', 'bob@example.com')
- def test_create_user_audit_require_model(self):
- """create_user_audit_trail requires model instance"""
- anonymous_user = self.get_anonymous_user()
- with self.assertRaises(ValueError):
- create_user_audit_trail(anonymous_user, USER_IP, anonymous_user)
- self.assertEqual(AuditTrail.objects.count(), 0)
- def test_create_user_audit_trail_anonymous_user(self):
- """create_user_audit_trail doesn't record anonymous users"""
- user = self.get_anonymous_user()
- create_user_audit_trail(user, USER_IP, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 0)
- def test_create_user_audit_trail(self):
- """create_user_audit_trail creates new db record"""
- user = self.get_authenticated_user()
- create_user_audit_trail(user, USER_IP, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- audit_trail = user.audittrail_set.all()[0]
- self.assertEqual(audit_trail.user, user)
- self.assertEqual(audit_trail.ip_address, USER_IP)
- self.assertEqual(audit_trail.content_object, self.obj)
- def test_delete_user_remove_audit_trail(self):
- """audit trail is deleted together with user it belongs to"""
- user = self.get_authenticated_user()
- create_user_audit_trail(user, USER_IP, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- user.delete()
- self.assertEqual(AuditTrail.objects.count(), 0)
- def test_delete_obj_keep_audit_trail(self):
- """audit trail is kept after with obj it points at is deleted"""
- user = self.get_authenticated_user()
- create_user_audit_trail(user, USER_IP, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- self.obj.delete()
- self.assertEqual(AuditTrail.objects.count(), 1)
- audit_trail = user.audittrail_set.all()[0]
- self.assertEqual(audit_trail.user, user)
- self.assertEqual(audit_trail.ip_address, USER_IP)
- self.assertIsNone(audit_trail.content_object)
- def test_delete_audit_trail(self):
- """audit trail deletion leaves other data untouched"""
- user = self.get_authenticated_user()
- create_user_audit_trail(user, USER_IP, self.obj)
- self.assertEqual(AuditTrail.objects.count(), 1)
- audit_trail = user.audittrail_set.all()[0]
- audit_trail.delete()
-
- UserModel.objects.get(id=user.id)
- UserModel.objects.get(id=self.obj.id)
- class RemoveOldAuditTrailsTest(UserTestCase):
- def setUp(self):
- super().setUp()
- self.obj = UserModel.objects.create_user('BobBoberson', 'bob@example.com')
-
- def test_recent_audit_trail_is_kept(self):
- """remove_old_ips keeps recent audit trails"""
- user = self.get_authenticated_user()
- audit_trail = create_user_audit_trail(user, USER_IP, self.obj)
- remove_old_ips.send(None)
- self.assertEqual(user.audittrail_set.count(), 1)
- def test_old_audit_trail_is_removed(self):
- """remove_old_ips removes old audit trails"""
- user = self.get_authenticated_user()
- audit_trail = create_user_audit_trail(user, USER_IP, self.obj)
- audit_trail.created_on = timezone.now() - timedelta(days=50)
- audit_trail.save()
- remove_old_ips.send(None)
- self.assertEqual(user.audittrail_set.count(), 0)
|