From e2b8a9287269133f3a19fd0a51fc8bb53a63551b Mon Sep 17 00:00:00 2001 From: Matthew Elwell Date: Fri, 8 Mar 2024 17:19:35 +0000 Subject: [PATCH] fix(audit): add segment deleted audit log (#3585) --- api/audit/constants.py | 1 + api/segments/models.py | 9 ++++++- .../unit/segments/test_unit_segments_views.py | 27 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/api/audit/constants.py b/api/audit/constants.py index e639e1d0f45e..39672cf2aae2 100644 --- a/api/audit/constants.py +++ b/api/audit/constants.py @@ -3,6 +3,7 @@ FEATURE_UPDATED_MESSAGE = "Flag / Remote Config updated: %s" SEGMENT_CREATED_MESSAGE = "New Segment created: %s" SEGMENT_UPDATED_MESSAGE = "Segment updated: %s" +SEGMENT_DELETED_MESSAGE = "Segment deleted: %s" FEATURE_SEGMENT_UPDATED_MESSAGE = ( "Segment rules updated for flag: %s in environment: %s" ) diff --git a/api/segments/models.py b/api/segments/models.py index 6d953c4a2c50..78ddd68ae31d 100644 --- a/api/segments/models.py +++ b/api/segments/models.py @@ -11,7 +11,11 @@ from django.db import models from flag_engine.segments import constants -from audit.constants import SEGMENT_CREATED_MESSAGE, SEGMENT_UPDATED_MESSAGE +from audit.constants import ( + SEGMENT_CREATED_MESSAGE, + SEGMENT_DELETED_MESSAGE, + SEGMENT_UPDATED_MESSAGE, +) from audit.related_object_type import RelatedObjectType from features.models import Feature from projects.models import Project @@ -82,6 +86,9 @@ def get_create_log_message(self, history_instance) -> typing.Optional[str]: def get_update_log_message(self, history_instance) -> typing.Optional[str]: return SEGMENT_UPDATED_MESSAGE % self.name + def get_delete_log_message(self, history_instance) -> typing.Optional[str]: + return SEGMENT_DELETED_MESSAGE % self.name + def _get_project(self): return self.project diff --git a/api/tests/unit/segments/test_unit_segments_views.py b/api/tests/unit/segments/test_unit_segments_views.py index 155838f1a80f..d990bc4dc4f2 100644 --- a/api/tests/unit/segments/test_unit_segments_views.py +++ b/api/tests/unit/segments/test_unit_segments_views.py @@ -10,6 +10,7 @@ from rest_framework import status from rest_framework.test import APIClient +from audit.constants import SEGMENT_DELETED_MESSAGE from audit.models import AuditLog from audit.related_object_type import RelatedObjectType from environments.models import Environment @@ -179,6 +180,32 @@ def test_audit_log_created_when_segment_updated(project, segment, client): ) +@pytest.mark.parametrize( + "client", + [lazy_fixture("admin_master_api_key_client"), lazy_fixture("admin_client")], +) +def test_audit_log_created_when_segment_deleted(project, segment, client): + # Given + segment = Segment.objects.create(name="Test segment", project=project) + url = reverse( + "api-v1:projects:project-segments-detail", + args=[project.id, segment.id], + ) + + # When + res = client.delete(url, content_type="application/json") + + # Then + assert res.status_code == status.HTTP_204_NO_CONTENT + assert ( + AuditLog.objects.filter( + related_object_type=RelatedObjectType.SEGMENT.name, + log=SEGMENT_DELETED_MESSAGE % segment.name, + ).count() + == 1 + ) + + @pytest.mark.parametrize( "client", [lazy_fixture("admin_master_api_key_client"), lazy_fixture("admin_client")],