diff --git a/api/features/models.py b/api/features/models.py index 24021477d110..af0217f89d2a 100644 --- a/api/features/models.py +++ b/api/features/models.py @@ -1095,9 +1095,13 @@ def copy_from(self, source_feature_state_value: "FeatureStateValue"): def get_skip_create_audit_log(self) -> bool: try: + if self.feature_state.deleted_at: + return True + return self.feature_state.get_skip_create_audit_log() - except ObjectDoesNotExist: - return False + + except FeatureState.DoesNotExist: + return True def get_update_log_message(self, history_instance) -> typing.Optional[str]: fs = self.feature_state diff --git a/api/tests/unit/features/test_unit_features_models.py b/api/tests/unit/features/test_unit_features_models.py index 5188a199beab..eb7f2eaf41fc 100644 --- a/api/tests/unit/features/test_unit_features_models.py +++ b/api/tests/unit/features/test_unit_features_models.py @@ -744,9 +744,9 @@ def test_feature_state_value_get_skip_create_audit_log_if_environment_feature_ve assert feature_state.feature_state_value.get_skip_create_audit_log() is True -def test_feature_state_value__get_skip_create_audit_log_for_deleted_feature_state( +def test_feature_state_value__get_skip_create_audit_log_for_feature_segment_delete( feature: Feature, feature_segment: FeatureSegment, environment: Environment -): +) -> None: # Give feature_state = FeatureState.objects.create( feature=feature, feature_segment=feature_segment, environment=environment @@ -763,7 +763,51 @@ def test_feature_state_value__get_skip_create_audit_log_for_deleted_feature_stat id=feature_state_value.id, history_type="-" ).first() - assert fsv_history_instance.instance.get_skip_create_audit_log() is False + assert fsv_history_instance.instance.get_skip_create_audit_log() is True + + +def test_feature_state_value__get_skip_create_audit_log_for_identity_delete( + feature: Feature, + environment: Environment, + identity: Identity, +) -> None: + # Give + feature_state = FeatureState.objects.create( + feature=feature, identity=identity, environment=environment + ) + feature_state_value = feature_state.feature_state_value + + # When + # Delete identity to cascade delete feature state + # instead of soft delete + identity.delete() + + # Then + fsv_history_instance = FeatureStateValue.history.filter( + id=feature_state_value.id, history_type="-" + ).first() + + assert fsv_history_instance.instance.get_skip_create_audit_log() is True + + +def test_feature_state_value__get_skip_create_audit_log_for_feature_delete( + feature: Feature, + environment: Environment, + identity: Identity, +) -> None: + # Give + feature_state = FeatureState.objects.get(feature=feature, environment=environment) + feature_state_value = feature_state.feature_state_value + + # When + feature.delete() + + # Then + fsv_history_instance = FeatureStateValue.history.filter( + id=feature_state_value.id, history_type="-" + ).first() + + assert fsv_history_instance.instance.get_skip_create_audit_log() is True @pytest.mark.parametrize(