test_audittrail.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.utils import timezone
  4. from ..audittrail import create_audit_trail, create_user_audit_trail
  5. from ..models import AuditTrail
  6. from ..signals import remove_old_ips
  7. from ..test import UserTestCase, create_test_user
  8. User = get_user_model()
  9. USER_IP = "13.41.51.41"
  10. class MockRequest:
  11. user_ip = USER_IP
  12. def __init__(self, user):
  13. self.user = user
  14. class CreateAuditTrailTests(UserTestCase):
  15. def setUp(self):
  16. super().setUp()
  17. self.obj = create_test_user("OtherUser", "user@example.com")
  18. def test_create_audit_require_model(self):
  19. """create_audit_trail requires model instance"""
  20. anonymous_user = self.get_anonymous_user()
  21. request = MockRequest(anonymous_user)
  22. with self.assertRaises(ValueError):
  23. create_audit_trail(request, anonymous_user)
  24. self.assertEqual(AuditTrail.objects.count(), 0)
  25. def test_create_audit_trail_anonymous_user(self):
  26. """create_audit_trail doesn't record anonymous users"""
  27. user = self.get_anonymous_user()
  28. request = MockRequest(user)
  29. create_audit_trail(request, self.obj)
  30. self.assertEqual(AuditTrail.objects.count(), 0)
  31. def test_create_audit_trail(self):
  32. """create_audit_trail creates new db record"""
  33. user = self.get_authenticated_user()
  34. request = MockRequest(user)
  35. create_audit_trail(request, self.obj)
  36. self.assertEqual(AuditTrail.objects.count(), 1)
  37. audit_trail = user.audittrail_set.all()[0]
  38. self.assertEqual(audit_trail.user, user)
  39. self.assertEqual(audit_trail.ip_address, request.user_ip)
  40. self.assertEqual(audit_trail.content_object, self.obj)
  41. def test_delete_user_remove_audit_trail(self):
  42. """audit trail is deleted together with user it belongs to"""
  43. user = self.get_authenticated_user()
  44. request = MockRequest(user)
  45. create_audit_trail(request, self.obj)
  46. self.assertEqual(AuditTrail.objects.count(), 1)
  47. user.delete()
  48. self.assertEqual(AuditTrail.objects.count(), 0)
  49. def test_delete_obj_keep_audit_trail(self):
  50. """audit trail is kept after with obj it points at is deleted"""
  51. user = self.get_authenticated_user()
  52. request = MockRequest(user)
  53. create_audit_trail(request, self.obj)
  54. self.assertEqual(AuditTrail.objects.count(), 1)
  55. self.obj.delete()
  56. self.assertEqual(AuditTrail.objects.count(), 1)
  57. audit_trail = user.audittrail_set.all()[0]
  58. self.assertEqual(audit_trail.user, user)
  59. self.assertEqual(audit_trail.ip_address, request.user_ip)
  60. self.assertIsNone(audit_trail.content_object)
  61. def test_delete_audit_trail(self):
  62. """audit trail deletion leaves other data untouched"""
  63. user = self.get_authenticated_user()
  64. request = MockRequest(user)
  65. create_audit_trail(request, self.obj)
  66. self.assertEqual(AuditTrail.objects.count(), 1)
  67. audit_trail = user.audittrail_set.all()[0]
  68. audit_trail.delete()
  69. User.objects.get(id=user.id)
  70. User.objects.get(id=self.obj.id)
  71. class CreateUserAuditTrailTests(UserTestCase):
  72. def setUp(self):
  73. super().setUp()
  74. self.obj = create_test_user("OtherUser", "user@example.com")
  75. def test_create_user_audit_require_model(self):
  76. """create_user_audit_trail requires model instance"""
  77. anonymous_user = self.get_anonymous_user()
  78. with self.assertRaises(ValueError):
  79. create_user_audit_trail(anonymous_user, USER_IP, anonymous_user)
  80. self.assertEqual(AuditTrail.objects.count(), 0)
  81. def test_create_user_audit_trail_anonymous_user(self):
  82. """create_user_audit_trail doesn't record anonymous users"""
  83. user = self.get_anonymous_user()
  84. create_user_audit_trail(user, USER_IP, self.obj)
  85. self.assertEqual(AuditTrail.objects.count(), 0)
  86. def test_create_user_audit_trail(self):
  87. """create_user_audit_trail creates new db record"""
  88. user = self.get_authenticated_user()
  89. create_user_audit_trail(user, USER_IP, self.obj)
  90. self.assertEqual(AuditTrail.objects.count(), 1)
  91. audit_trail = user.audittrail_set.all()[0]
  92. self.assertEqual(audit_trail.user, user)
  93. self.assertEqual(audit_trail.ip_address, USER_IP)
  94. self.assertEqual(audit_trail.content_object, self.obj)
  95. def test_delete_user_remove_audit_trail(self):
  96. """audit trail is deleted together with user it belongs to"""
  97. user = self.get_authenticated_user()
  98. create_user_audit_trail(user, USER_IP, self.obj)
  99. self.assertEqual(AuditTrail.objects.count(), 1)
  100. user.delete()
  101. self.assertEqual(AuditTrail.objects.count(), 0)
  102. def test_delete_obj_keep_audit_trail(self):
  103. """audit trail is kept after with obj it points at is deleted"""
  104. user = self.get_authenticated_user()
  105. create_user_audit_trail(user, USER_IP, self.obj)
  106. self.assertEqual(AuditTrail.objects.count(), 1)
  107. self.obj.delete()
  108. self.assertEqual(AuditTrail.objects.count(), 1)
  109. audit_trail = user.audittrail_set.all()[0]
  110. self.assertEqual(audit_trail.user, user)
  111. self.assertEqual(audit_trail.ip_address, USER_IP)
  112. self.assertIsNone(audit_trail.content_object)
  113. def test_delete_audit_trail(self):
  114. """audit trail deletion leaves other data untouched"""
  115. user = self.get_authenticated_user()
  116. create_user_audit_trail(user, USER_IP, self.obj)
  117. self.assertEqual(AuditTrail.objects.count(), 1)
  118. audit_trail = user.audittrail_set.all()[0]
  119. audit_trail.delete()
  120. User.objects.get(id=user.id)
  121. User.objects.get(id=self.obj.id)
  122. class RemoveOldAuditTrailsTest(UserTestCase):
  123. def setUp(self):
  124. super().setUp()
  125. self.obj = create_test_user("OtherUser", "user@example.com")
  126. def test_recent_audit_trail_is_kept(self):
  127. """remove_old_ips keeps recent audit trails"""
  128. user = self.get_authenticated_user()
  129. create_user_audit_trail(user, USER_IP, self.obj)
  130. remove_old_ips.send(None)
  131. self.assertEqual(user.audittrail_set.count(), 1)
  132. def test_old_audit_trail_is_removed(self):
  133. """remove_old_ips removes old audit trails"""
  134. user = self.get_authenticated_user()
  135. audit_trail = create_user_audit_trail(user, USER_IP, self.obj)
  136. audit_trail.created_on = timezone.now() - timedelta(days=50)
  137. audit_trail.save()
  138. remove_old_ips.send(None)
  139. self.assertEqual(user.audittrail_set.count(), 0)