test_audittrail.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. from datetime import timedelta
  2. import pytest
  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. USER_IP = "13.41.51.41"
  8. class RequestMock:
  9. user_ip = USER_IP
  10. def __init__(self, user):
  11. self.user = user
  12. @pytest.fixture
  13. def request_mock(user):
  14. return RequestMock(user)
  15. def test_audit_trail_creation_raises_value_error_if_target_is_not_model_instance(
  16. request_mock, anonymous_user
  17. ):
  18. with pytest.raises(ValueError):
  19. create_audit_trail(request_mock, anonymous_user)
  20. def test_audit_trail_is_not_created_for_anonymous_users(anonymous_user, user):
  21. request_mock = RequestMock(anonymous_user)
  22. create_audit_trail(request_mock, user)
  23. assert not AuditTrail.objects.exists()
  24. def test_audit_trail_is_created(request_mock, other_user):
  25. assert create_audit_trail(request_mock, other_user)
  26. assert AuditTrail.objects.exists()
  27. def test_audit_trail_is_created_with_request_data(request_mock, user, other_user):
  28. audit_trail = create_audit_trail(request_mock, other_user)
  29. assert audit_trail.user == user
  30. assert audit_trail.ip_address == USER_IP
  31. def test_audit_trail_is_created_with_generic_relation_to_target(
  32. request_mock, user, other_user
  33. ):
  34. audit_trail = create_audit_trail(request_mock, other_user)
  35. assert audit_trail.content_object == other_user
  36. def test_audit_trail_is_deleted_together_with_user(request_mock, user, other_user):
  37. audit_trail = create_audit_trail(request_mock, other_user)
  38. user.delete(anonymous_username="Deleted")
  39. with pytest.raises(AuditTrail.DoesNotExist):
  40. audit_trail.refresh_from_db()
  41. def test_audit_trail_is_kept_after_its_target_is_deleted(request_mock, other_user):
  42. audit_trail = create_audit_trail(request_mock, other_user)
  43. other_user.delete(anonymous_username="Deleted")
  44. audit_trail.refresh_from_db()
  45. def test_deleting_audit_trail_leaves_user(request_mock, user, other_user):
  46. audit_trail = create_audit_trail(request_mock, other_user)
  47. audit_trail.delete()
  48. user.refresh_from_db()
  49. def test_deleting_audit_trail_leaves_target(request_mock, user, other_user):
  50. audit_trail = create_audit_trail(request_mock, other_user)
  51. audit_trail.delete()
  52. other_user.refresh_from_db()
  53. def test_audit_trail_can_be_created_without_request(user, other_user):
  54. assert create_user_audit_trail(user, USER_IP, other_user)
  55. assert AuditTrail.objects.exists()
  56. def test_audit_trail_creation_without_request_raises_value_error_if_target_is_not_model(
  57. user, anonymous_user
  58. ):
  59. with pytest.raises(ValueError):
  60. create_user_audit_trail(user, USER_IP, anonymous_user)
  61. def test_audit_trail_without_request_is_created_with_explicit_data(user, other_user):
  62. audit_trail = create_user_audit_trail(user, USER_IP, other_user)
  63. assert audit_trail.user == user
  64. assert audit_trail.ip_address == USER_IP
  65. def test_audit_trail_without_request_is_created_with_generic_relation_to_target(
  66. user, other_user
  67. ):
  68. audit_trail = create_user_audit_trail(user, USER_IP, other_user)
  69. assert audit_trail.content_object == other_user
  70. def test_recent_audit_trail_is_not_deleted_on_signal(user, other_user):
  71. create_user_audit_trail(user, USER_IP, other_user)
  72. remove_old_ips.send(None, ip_storage_time=1)
  73. assert user.audittrail_set.exists()
  74. def test_old_audit_trail_is_deleted_on_signal(user, other_user):
  75. audit_trail = create_user_audit_trail(user, USER_IP, other_user)
  76. audit_trail.created_on = timezone.now() - timedelta(days=6)
  77. audit_trail.save()
  78. remove_old_ips.send(None, ip_storage_time=5)
  79. assert not user.audittrail_set.exists()