123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- from datetime import timedelta
- from django.contrib.auth import get_user_model
- from django.utils import timezone
- from ..audittrail import create_audit_trail, create_user_audit_trail
- from ..models import AuditTrail
- from ..signals import remove_old_ips
- from ..test import UserTestCase, create_test_user
- User = get_user_model()
- USER_IP = "13.41.51.41"
- class MockRequest:
- user_ip = USER_IP
- def __init__(self, user):
- self.user = user
- class CreateAuditTrailTests(UserTestCase):
- def setUp(self):
- super().setUp()
- self.obj = create_test_user("OtherUser", "user@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()
- User.objects.get(id=user.id)
- User.objects.get(id=self.obj.id)
- class CreateUserAuditTrailTests(UserTestCase):
- def setUp(self):
- super().setUp()
- self.obj = create_test_user("OtherUser", "user@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()
- User.objects.get(id=user.id)
- User.objects.get(id=self.obj.id)
- class RemoveOldAuditTrailsTest(UserTestCase):
- def setUp(self):
- super().setUp()
- self.obj = create_test_user("OtherUser", "user@example.com")
- def test_recent_audit_trail_is_kept(self):
- """remove_old_ips keeps recent audit trails"""
- user = self.get_authenticated_user()
- 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)
|