Skip to content

Commit ecd409b

Browse files
authored
fix(5044): handle deleted feature state (#5045)
1 parent fe69d55 commit ecd409b

File tree

2 files changed

+53
-5
lines changed

2 files changed

+53
-5
lines changed

api/features/models.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,9 +1095,13 @@ def copy_from(self, source_feature_state_value: "FeatureStateValue"):
10951095

10961096
def get_skip_create_audit_log(self) -> bool:
10971097
try:
1098+
if self.feature_state.deleted_at:
1099+
return True
1100+
10981101
return self.feature_state.get_skip_create_audit_log()
1099-
except ObjectDoesNotExist:
1100-
return False
1102+
1103+
except FeatureState.DoesNotExist:
1104+
return True
11011105

11021106
def get_update_log_message(self, history_instance) -> typing.Optional[str]:
11031107
fs = self.feature_state

api/tests/unit/features/test_unit_features_models.py

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -744,9 +744,9 @@ def test_feature_state_value_get_skip_create_audit_log_if_environment_feature_ve
744744
assert feature_state.feature_state_value.get_skip_create_audit_log() is True
745745

746746

747-
def test_feature_state_value__get_skip_create_audit_log_for_deleted_feature_state(
747+
def test_feature_state_value__get_skip_create_audit_log_for_feature_segment_delete(
748748
feature: Feature, feature_segment: FeatureSegment, environment: Environment
749-
):
749+
) -> None:
750750
# Give
751751
feature_state = FeatureState.objects.create(
752752
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
763763
id=feature_state_value.id, history_type="-"
764764
).first()
765765

766-
assert fsv_history_instance.instance.get_skip_create_audit_log() is False
766+
assert fsv_history_instance.instance.get_skip_create_audit_log() is True
767+
768+
769+
def test_feature_state_value__get_skip_create_audit_log_for_identity_delete(
770+
feature: Feature,
771+
environment: Environment,
772+
identity: Identity,
773+
) -> None:
774+
# Give
775+
feature_state = FeatureState.objects.create(
776+
feature=feature, identity=identity, environment=environment
777+
)
778+
feature_state_value = feature_state.feature_state_value
779+
780+
# When
781+
# Delete identity to cascade delete feature state
782+
# instead of soft delete
783+
identity.delete()
784+
785+
# Then
786+
fsv_history_instance = FeatureStateValue.history.filter(
787+
id=feature_state_value.id, history_type="-"
788+
).first()
789+
790+
assert fsv_history_instance.instance.get_skip_create_audit_log() is True
791+
792+
793+
def test_feature_state_value__get_skip_create_audit_log_for_feature_delete(
794+
feature: Feature,
795+
environment: Environment,
796+
identity: Identity,
797+
) -> None:
798+
# Give
799+
feature_state = FeatureState.objects.get(feature=feature, environment=environment)
800+
feature_state_value = feature_state.feature_state_value
801+
802+
# When
803+
feature.delete()
804+
805+
# Then
806+
fsv_history_instance = FeatureStateValue.history.filter(
807+
id=feature_state_value.id, history_type="-"
808+
).first()
809+
810+
assert fsv_history_instance.instance.get_skip_create_audit_log() is True
767811

768812

769813
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)