diff --git a/api/features/versioning/tasks.py b/api/features/versioning/tasks.py index b706aa2d5674..8eaa00050df9 100644 --- a/api/features/versioning/tasks.py +++ b/api/features/versioning/tasks.py @@ -47,10 +47,10 @@ def disable_v2_versioning(environment_id: int) -> None: latest_feature_state_ids = [fs.id for fs in latest_feature_states] # delete any feature states and feature segments associated with older versions - FeatureState.objects.filter(identity_id__isnull=True).exclude( - id__in=latest_feature_state_ids - ).delete() - FeatureSegment.objects.exclude( + FeatureState.objects.filter( + identity_id__isnull=True, environment=environment + ).exclude(id__in=latest_feature_state_ids).delete() + FeatureSegment.objects.filter(environment=environment).exclude( feature_states__id__in=latest_feature_state_ids ).delete() @@ -60,7 +60,7 @@ def disable_v2_versioning(environment_id: int) -> None: version=1, live_from=timezone.now(), environment_feature_version=None ) FeatureSegment.objects.filter( - feature_states__id__in=latest_feature_state_ids + environment=environment, feature_states__id__in=latest_feature_state_ids ).update(environment_feature_version=None) EnvironmentFeatureVersion.objects.filter(environment=environment).delete() diff --git a/api/tests/unit/features/versioning/test_unit_versioning_tasks.py b/api/tests/unit/features/versioning/test_unit_versioning_tasks.py index f5569b31cfa6..dd587e24bf51 100644 --- a/api/tests/unit/features/versioning/test_unit_versioning_tasks.py +++ b/api/tests/unit/features/versioning/test_unit_versioning_tasks.py @@ -12,6 +12,7 @@ from features.versioning.versioning_service import ( get_environment_flags_queryset, ) +from projects.models import Project from segments.models import Segment from users.models import FFAdminUser from webhooks.webhooks import WebhookEventType @@ -37,6 +38,7 @@ def test_enable_v2_versioning( def test_disable_v2_versioning( environment_v2_versioning: Environment, + project: Project, feature: Feature, segment: Segment, staff_user: FFAdminUser, @@ -85,6 +87,21 @@ def test_disable_v2_versioning( environment=environment_v2_versioning, ) + # Finally, let's create another environment and confirm its + # feature states are unaffected. + unaffected_environment = Environment.objects.create( + name="Unaffected environment", project=project + ) + FeatureState.objects.create( + feature=feature, + environment=unaffected_environment, + feature_segment=FeatureSegment.objects.create( + segment=segment, + feature=feature, + environment=unaffected_environment, + ), + ) + # When disable_v2_versioning(environment_v2_versioning.id) environment_v2_versioning.refresh_from_db() @@ -114,6 +131,9 @@ def test_disable_v2_versioning( is True ) + assert unaffected_environment.feature_states.count() == 2 + assert unaffected_environment.feature_segments.count() == 1 + def test_trigger_update_version_webhooks( environment_v2_versioning: Environment, feature: Feature, mocker: MockerFixture