diff --git a/api/tests/unit/features/versioning/test_unit_versioning_migrations.py b/api/tests/unit/features/versioning/test_unit_versioning_migrations.py index 88fc94b4d246..22211e0d709f 100644 --- a/api/tests/unit/features/versioning/test_unit_versioning_migrations.py +++ b/api/tests/unit/features/versioning/test_unit_versioning_migrations.py @@ -1,22 +1,36 @@ from datetime import timedelta +import pytest +from django.conf import settings as test_settings from django.utils import timezone from django_test_migrations.migrator import Migrator +@pytest.mark.skipif( + test_settings.SKIP_MIGRATION_TESTS is True, + reason="Skip migration tests to speed up tests where necessary", +) def test_fix_scheduled_fs_data_issue_caused_by_enabling_versioning( - migrator: Migrator + migrator: Migrator, ) -> None: # Given now = timezone.now() one_hour_from_now = now + timedelta(hours=1) - initial_state = migrator.apply_initial_migration(("feature_versioning", "0004_add_version_change_set")) + initial_state = migrator.apply_initial_migration( + ("feature_versioning", "0004_add_version_change_set") + ) - organisation_model_class = initial_state.apps.get_model("organisations", "Organisation") + organisation_model_class = initial_state.apps.get_model( + "organisations", "Organisation" + ) project_model_class = initial_state.apps.get_model("projects", "Project") - environment_model_class = initial_state.apps.get_model("environments", "Environment") - change_request_model_class = initial_state.apps.get_model("workflows_core", "ChangeRequest") + environment_model_class = initial_state.apps.get_model( + "environments", "Environment" + ) + change_request_model_class = initial_state.apps.get_model( + "workflows_core", "ChangeRequest" + ) environment_feature_version_model_class = initial_state.apps.get_model( "feature_versioning", "EnvironmentFeatureVersion" ) @@ -24,8 +38,12 @@ def test_fix_scheduled_fs_data_issue_caused_by_enabling_versioning( feature_model_class = initial_state.apps.get_model("features", "Feature") organisation = organisation_model_class.objects.create(name="Test Organisation") - project = project_model_class.objects.create(name="Test Project", organisation=organisation) - environment_1 = environment_model_class.objects.create(name="Environment 1", project=project) + project = project_model_class.objects.create( + name="Test Project", organisation=organisation + ) + environment_1 = environment_model_class.objects.create( + name="Environment 1", project=project + ) feature = feature_model_class.objects.create(name="test_feature", project=project) # First, let's create some regular data that should be left untouched for a @@ -56,32 +74,42 @@ def test_fix_scheduled_fs_data_issue_caused_by_enabling_versioning( project=project, use_v2_feature_versioning=True, ) - versioned_environment_version_1 = environment_feature_version_model_class.objects.create( - feature=feature, - environment=versioned_environment, + versioned_environment_version_1 = ( + environment_feature_version_model_class.objects.create( + feature=feature, + environment=versioned_environment, + ) ) - versioned_environment_default_feature_state = feature_state_model_class.objects.create( - feature=feature, - environment=versioned_environment, - environment_feature_version=versioned_environment_version_1, + versioned_environment_default_feature_state = ( + feature_state_model_class.objects.create( + feature=feature, + environment=versioned_environment, + environment_feature_version=versioned_environment_version_1, + ) ) versioned_environment_cr = change_request_model_class.objects.create( environment=versioned_environment, title="Versioned Environment CR", ) - versioned_environment_cr_version = environment_feature_version_model_class.objects.create( - feature=feature, - environment=versioned_environment, - change_request=versioned_environment_cr, + versioned_environment_cr_version = ( + environment_feature_version_model_class.objects.create( + feature=feature, + environment=versioned_environment, + change_request=versioned_environment_cr, + ) ) - versioned_environment_change_request_feature_state = feature_state_model_class.objects.create( - feature=feature, - environment=versioned_environment, - environment_feature_version=versioned_environment_cr_version, + versioned_environment_change_request_feature_state = ( + feature_state_model_class.objects.create( + feature=feature, + environment=versioned_environment, + environment_feature_version=versioned_environment_cr_version, + ) ) # Now, let's create the corrupt data that we want to correct - environment_2 = environment_model_class.objects.create(name="Environment 2", project=project) + environment_2 = environment_model_class.objects.create( + name="Environment 2", project=project + ) # Note: because migrations don't trigger the signals, we need to manually create # the default state feature_state_model_class.objects.create( @@ -133,22 +161,37 @@ def test_fix_scheduled_fs_data_issue_caused_by_enabling_versioning( feature_state_model_class = new_state.apps.get_model("features", "FeatureState") # Let's check that the regular data is untouched - assert feature_state_model_class.objects.get( - pk=environment_1_default_feature_state.pk - ).environment_feature_version is None - assert feature_state_model_class.objects.get( - pk=environment_1_live_feature_state.pk - ).environment_feature_version is None - assert feature_state_model_class.objects.get( - pk=versioned_environment_default_feature_state.pk - ).environment_feature_version_id == versioned_environment_version_1.pk - assert feature_state_model_class.objects.get( - pk=versioned_environment_change_request_feature_state.pk - ).environment_feature_version_id == versioned_environment_cr_version.pk + assert ( + feature_state_model_class.objects.get( + pk=environment_1_default_feature_state.pk + ).environment_feature_version + is None + ) + assert ( + feature_state_model_class.objects.get( + pk=environment_1_live_feature_state.pk + ).environment_feature_version + is None + ) + assert ( + feature_state_model_class.objects.get( + pk=versioned_environment_default_feature_state.pk + ).environment_feature_version_id + == versioned_environment_version_1.pk + ) + assert ( + feature_state_model_class.objects.get( + pk=versioned_environment_change_request_feature_state.pk + ).environment_feature_version_id + == versioned_environment_cr_version.pk + ) # And let's check the corrupted data issue has been solved new_environment_2_scheduled_feature_state = feature_state_model_class.objects.get( pk=environment_2_scheduled_feature_state.pk ) assert new_environment_2_scheduled_feature_state.environment_feature_version is None - assert new_environment_2_scheduled_feature_state.change_request_id == environment_2_scheduled_cr.pk + assert ( + new_environment_2_scheduled_feature_state.change_request_id + == environment_2_scheduled_cr.pk + )