Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-11-18 16:16:36 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-11-18 16:16:36 +0300
commit311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch)
tree07e7870bca8aed6d61fdcc810731c50d2c40af47 /spec/migrations
parent27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff)
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'spec/migrations')
-rw-r--r--spec/migrations/20200107172020_add_timestamp_softwarelicensespolicy_spec.rb23
-rw-r--r--spec/migrations/20200122123016_backfill_project_settings_spec.rb32
-rw-r--r--spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb77
-rw-r--r--spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb64
-rw-r--r--spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb115
-rw-r--r--spec/migrations/20200313203550_remove_orphaned_chat_names_spec.rb27
-rw-r--r--spec/migrations/20200406102120_backfill_deployment_clusters_from_deployments_spec.rb50
-rw-r--r--spec/migrations/20200511145545_change_variable_interpolation_format_in_common_metrics_spec.rb39
-rw-r--r--spec/migrations/20200526115436_dedup_mr_metrics_spec.rb68
-rw-r--r--spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb175
-rw-r--r--spec/migrations/20200703125016_backfill_namespace_settings_spec.rb30
-rw-r--r--spec/migrations/20200706035141_adjust_unique_index_alert_management_alerts_spec.rb57
-rw-r--r--spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb47
-rw-r--r--spec/migrations/20200728182311_add_o_auth_paths_to_protected_paths_spec.rb52
-rw-r--r--spec/migrations/20200811130433_create_missing_vulnerabilities_issue_links_spec.rb160
-rw-r--r--spec/migrations/20200915044225_schedule_migration_to_hashed_storage_spec.rb14
-rw-r--r--spec/migrations/20200929052138_create_initial_versions_for_pre_versioning_terraform_states_spec.rb46
-rw-r--r--spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb58
-rw-r--r--spec/migrations/20201027002551_migrate_services_to_http_integrations_spec.rb26
-rw-r--r--spec/migrations/20201028182809_backfill_jira_tracker_deployment_type2_spec.rb38
-rw-r--r--spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb32
-rw-r--r--spec/migrations/20201112130715_schedule_recalculate_uuid_on_vulnerabilities_occurrences_spec.rb138
-rw-r--r--spec/migrations/20210112143418_remove_duplicate_services2_spec.rb2
-rw-r--r--spec/migrations/20210119122354_alter_vsa_issue_first_mentioned_in_commit_value_spec.rb2
-rw-r--r--spec/migrations/20210205174154_remove_bad_dependency_proxy_manifests_spec.rb2
-rw-r--r--spec/migrations/20210210093901_backfill_updated_at_after_repository_storage_move_spec.rb2
-rw-r--r--spec/migrations/20210218040814_add_environment_scope_to_group_variables_spec.rb2
-rw-r--r--spec/migrations/20210226141517_dedup_issue_metrics_spec.rb2
-rw-r--r--spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb2
-rw-r--r--spec/migrations/20210413132500_reschedule_artifact_expiry_backfill_again_spec.rb2
-rw-r--r--spec/migrations/20210421163509_schedule_update_jira_tracker_data_deployment_type_based_on_url_spec.rb2
-rw-r--r--spec/migrations/20210423160427_schedule_drop_invalid_vulnerabilities_spec.rb2
-rw-r--r--spec/migrations/20210430134202_copy_adoption_snapshot_namespace_spec.rb2
-rw-r--r--spec/migrations/20210430135954_copy_adoption_segments_namespace_spec.rb2
-rw-r--r--spec/migrations/20210503105845_add_project_value_stream_id_to_project_stages_spec.rb2
-rw-r--r--spec/migrations/20210511142748_schedule_drop_invalid_vulnerabilities2_spec.rb2
-rw-r--r--spec/migrations/20210514063252_schedule_cleanup_orphaned_lfs_objects_projects_spec.rb2
-rw-r--r--spec/migrations/20210601073400_fix_total_stage_in_vsa_spec.rb2
-rw-r--r--spec/migrations/20210601080039_group_protected_environments_add_index_and_constraint_spec.rb2
-rw-r--r--spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb2
-rw-r--r--spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb2
-rw-r--r--spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb2
-rw-r--r--spec/migrations/20210708130419_reschedule_merge_request_diff_users_background_migration_spec.rb2
-rw-r--r--spec/migrations/20210722042939_update_issuable_slas_where_issue_closed_spec.rb2
-rw-r--r--spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb2
-rw-r--r--spec/migrations/20210804150320_create_base_work_item_types_spec.rb2
-rw-r--r--spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb2
-rw-r--r--spec/migrations/20210811122206_update_external_project_bots_spec.rb2
-rw-r--r--spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb2
-rw-r--r--spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb2
-rw-r--r--spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb2
-rw-r--r--spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb2
-rw-r--r--spec/migrations/20210906100316_drop_temporary_columns_and_triggers_for_ci_build_trace_chunks_spec.rb2
-rw-r--r--spec/migrations/20210906130643_drop_temporary_columns_and_triggers_for_taggings_spec.rb2
-rw-r--r--spec/migrations/20210907013944_cleanup_bigint_conversion_for_ci_builds_metadata_spec.rb2
-rw-r--r--spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb2
-rw-r--r--spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb2
-rw-r--r--spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb2
-rw-r--r--spec/migrations/20210915022415_cleanup_bigint_conversion_for_ci_builds_spec.rb2
-rw-r--r--spec/migrations/20210922021816_drop_int4_columns_for_ci_job_artifacts_spec.rb2
-rw-r--r--spec/migrations/20210922025631_drop_int4_column_for_ci_sources_pipelines_spec.rb2
-rw-r--r--spec/migrations/20210922082019_drop_int4_column_for_events_spec.rb2
-rw-r--r--spec/migrations/20210922091402_drop_int4_column_for_push_event_payloads_spec.rb2
-rw-r--r--spec/migrations/20211006060436_schedule_populate_topics_total_projects_count_cache_spec.rb2
-rw-r--r--spec/migrations/20211012134316_clean_up_migrate_merge_request_diff_commit_users_spec.rb48
-rw-r--r--spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb (renamed from spec/migrations/20201112130710_schedule_remove_duplicate_vulnerabilities_findings_spec.rb)76
-rw-r--r--spec/migrations/20211028155449_schedule_fix_merge_request_diff_commit_users_migration_spec.rb63
-rw-r--r--spec/migrations/add_default_value_stream_to_groups_with_group_stages_spec.rb44
-rw-r--r--spec/migrations/add_deploy_token_type_to_deploy_tokens_spec.rb24
-rw-r--r--spec/migrations/add_incident_settings_to_all_existing_projects_spec.rb93
-rw-r--r--spec/migrations/add_open_source_plan_spec.rb86
-rw-r--r--spec/migrations/add_partial_index_to_ci_builds_table_on_user_id_name_spec.rb22
-rw-r--r--spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb31
-rw-r--r--spec/migrations/add_temporary_partial_index_on_project_id_to_services_spec.rb22
-rw-r--r--spec/migrations/backfill_imported_snippet_repositories_spec.rb52
-rw-r--r--spec/migrations/backfill_operations_feature_flags_iid_spec.rb32
-rw-r--r--spec/migrations/backfill_snippet_repositories_spec.rb44
-rw-r--r--spec/migrations/backfill_status_page_published_incidents_spec.rb54
-rw-r--r--spec/migrations/backfill_user_namespace_spec.rb29
-rw-r--r--spec/migrations/cap_designs_filename_length_to_new_limit_spec.rb62
-rw-r--r--spec/migrations/clean_grafana_url_spec.rb37
-rw-r--r--spec/migrations/cleanup_empty_commit_user_mentions_spec.rb36
-rw-r--r--spec/migrations/cleanup_group_import_states_with_null_user_id_spec.rb101
-rw-r--r--spec/migrations/cleanup_move_container_registry_enabled_to_project_feature_spec.rb (renamed from spec/migrations/cleanup_move_container_registry_enabled_to_project_features_spec.rb)2
-rw-r--r--spec/migrations/cleanup_optimistic_locking_nulls_pt2_fixed_spec.rb45
-rw-r--r--spec/migrations/cleanup_optimistic_locking_nulls_spec.rb52
-rw-r--r--spec/migrations/cleanup_projects_with_missing_namespace_spec.rb142
-rw-r--r--spec/migrations/cleanup_remaining_orphan_invites_spec.rb2
-rw-r--r--spec/migrations/complete_namespace_settings_migration_spec.rb24
-rw-r--r--spec/migrations/confirm_project_bot_users_spec.rb84
-rw-r--r--spec/migrations/create_environment_for_self_monitoring_project_spec.rb68
-rw-r--r--spec/migrations/deduplicate_epic_iids_spec.rb36
-rw-r--r--spec/migrations/delete_internal_ids_where_feature_flags_usage_spec.rb42
-rw-r--r--spec/migrations/delete_template_project_services_spec.rb21
-rw-r--r--spec/migrations/delete_template_services_duplicated_by_type_spec.rb24
-rw-r--r--spec/migrations/delete_user_callout_alerts_moved_spec.rb30
-rw-r--r--spec/migrations/drop_activate_prometheus_services_background_jobs_spec.rb89
-rw-r--r--spec/migrations/drop_background_migration_jobs_spec.rb61
-rw-r--r--spec/migrations/ensure_filled_external_diff_store_on_merge_request_diffs_spec.rb40
-rw-r--r--spec/migrations/ensure_filled_file_store_on_package_files_spec.rb40
-rw-r--r--spec/migrations/ensure_namespace_settings_creation_spec.rb44
-rw-r--r--spec/migrations/ensure_target_project_id_is_filled_spec.rb30
-rw-r--r--spec/migrations/ensure_u2f_registrations_migrated_spec.rb41
-rw-r--r--spec/migrations/fill_file_store_ci_job_artifacts_spec.rb44
-rw-r--r--spec/migrations/fill_file_store_lfs_objects_spec.rb36
-rw-r--r--spec/migrations/fill_store_uploads_spec.rb48
-rw-r--r--spec/migrations/fix_projects_without_project_feature_spec.rb42
-rw-r--r--spec/migrations/fix_projects_without_prometheus_services_spec.rb42
-rw-r--r--spec/migrations/generate_ci_jwt_signing_key_spec.rb42
-rw-r--r--spec/migrations/generate_missing_routes_for_bots_spec.rb80
-rw-r--r--spec/migrations/insert_daily_invites_plan_limits_spec.rb55
-rw-r--r--spec/migrations/insert_project_feature_flags_plan_limits_spec.rb76
-rw-r--r--spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb35
-rw-r--r--spec/migrations/migrate_bot_type_to_user_type_spec.rb20
-rw-r--r--spec/migrations/migrate_commit_notes_mentions_to_db_spec.rb37
-rw-r--r--spec/migrations/migrate_compliance_framework_enum_to_database_framework_record_spec.rb52
-rw-r--r--spec/migrations/migrate_create_commit_signature_worker_sidekiq_queue_spec.rb44
-rw-r--r--spec/migrations/migrate_incident_issues_to_incident_type_spec.rb55
-rw-r--r--spec/migrations/migrate_merge_request_mentions_to_db_spec.rb31
-rw-r--r--spec/migrations/migrate_store_security_reports_sidekiq_queue_spec.rb33
-rw-r--r--spec/migrations/migrate_sync_security_reports_to_report_approval_rules_sidekiq_queue_spec.rb33
-rw-r--r--spec/migrations/orphaned_invite_tokens_cleanup_spec.rb2
-rw-r--r--spec/migrations/populate_remaining_missing_dismissal_information_for_vulnerabilities_spec.rb31
-rw-r--r--spec/migrations/remove_additional_application_settings_rows_spec.rb27
-rw-r--r--spec/migrations/remove_deprecated_jenkins_service_records_spec.rb29
-rw-r--r--spec/migrations/remove_duplicate_labels_from_groups_spec.rb227
-rw-r--r--spec/migrations/remove_duplicate_labels_from_project_spec.rb239
-rw-r--r--spec/migrations/remove_gitlab_issue_tracker_service_records_spec.rb19
-rw-r--r--spec/migrations/remove_orphan_service_hooks_spec.rb26
-rw-r--r--spec/migrations/remove_orphaned_invited_members_spec.rb57
-rw-r--r--spec/migrations/remove_packages_deprecated_dependencies_spec.rb30
-rw-r--r--spec/migrations/remove_security_dashboard_feature_flag_spec.rb53
-rw-r--r--spec/migrations/rename_security_dashboard_feature_flag_to_instance_security_dashboard_spec.rb53
-rw-r--r--spec/migrations/rename_sitemap_namespace_spec.rb30
-rw-r--r--spec/migrations/rename_sitemap_root_namespaces_spec.rb36
-rw-r--r--spec/migrations/reschedule_set_default_iteration_cadences_spec.rb41
-rw-r--r--spec/migrations/reseed_merge_trains_enabled_spec.rb26
-rw-r--r--spec/migrations/reseed_repository_storages_weighted_spec.rb43
-rw-r--r--spec/migrations/save_instance_administrators_group_id_spec.rb99
-rw-r--r--spec/migrations/schedule_add_primary_email_to_emails_if_user_confirmed_spec.rb31
-rw-r--r--spec/migrations/schedule_backfill_push_rules_id_in_projects_spec.rb49
-rw-r--r--spec/migrations/schedule_blocked_by_links_replacement_second_try_spec.rb37
-rw-r--r--spec/migrations/schedule_link_lfs_objects_projects_spec.rb76
-rw-r--r--spec/migrations/schedule_merge_request_cleanup_schedules_backfill_spec.rb41
-rw-r--r--spec/migrations/schedule_migrate_security_scans_spec.rb67
-rw-r--r--spec/migrations/schedule_migrate_u2f_webauthn_spec.rb58
-rw-r--r--spec/migrations/schedule_populate_has_vulnerabilities_spec.rb36
-rw-r--r--spec/migrations/schedule_populate_issue_email_participants_spec.rb33
-rw-r--r--spec/migrations/schedule_populate_missing_dismissal_information_for_vulnerabilities_spec.rb37
-rw-r--r--spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb60
-rw-r--r--spec/migrations/schedule_populate_project_snippet_statistics_spec.rb61
-rw-r--r--spec/migrations/schedule_populate_user_highest_roles_table_spec.rb46
-rw-r--r--spec/migrations/schedule_recalculate_project_authorizations_second_run_spec.rb28
-rw-r--r--spec/migrations/schedule_recalculate_project_authorizations_spec.rb57
-rw-r--r--spec/migrations/schedule_recalculate_project_authorizations_third_run_spec.rb28
-rw-r--r--spec/migrations/schedule_repopulate_historical_vulnerability_statistics_spec.rb36
-rw-r--r--spec/migrations/schedule_update_existing_subgroup_to_match_visibility_level_of_parent_spec.rb79
-rw-r--r--spec/migrations/schedule_update_existing_users_that_require_two_factor_auth_spec.rb29
-rw-r--r--spec/migrations/seed_merge_trains_enabled_spec.rb28
-rw-r--r--spec/migrations/seed_repository_storages_weighted_spec.rb31
-rw-r--r--spec/migrations/services_remove_temporary_index_on_project_id_spec.rb40
-rw-r--r--spec/migrations/set_job_waiter_ttl_spec.rb30
-rw-r--r--spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb2
-rw-r--r--spec/migrations/steal_merge_request_diff_commit_users_migration_spec.rb2
-rw-r--r--spec/migrations/unconfirm_wrongfully_verified_emails_spec.rb55
-rw-r--r--spec/migrations/update_application_setting_npm_package_requests_forwarding_default_spec.rb38
-rw-r--r--spec/migrations/update_fingerprint_sha256_within_keys_spec.rb30
-rw-r--r--spec/migrations/update_historical_data_recorded_at_spec.rb31
-rw-r--r--spec/migrations/update_internal_ids_last_value_for_epics_renamed_spec.rb30
-rw-r--r--spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb223
-rw-r--r--spec/migrations/update_timestamp_softwarelicensespolicy_spec.rb24
171 files changed, 356 insertions, 6295 deletions
diff --git a/spec/migrations/20200107172020_add_timestamp_softwarelicensespolicy_spec.rb b/spec/migrations/20200107172020_add_timestamp_softwarelicensespolicy_spec.rb
deleted file mode 100644
index fff0745e8af..00000000000
--- a/spec/migrations/20200107172020_add_timestamp_softwarelicensespolicy_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('add_timestamp_softwarelicensespolicy')
-
-RSpec.describe AddTimestampSoftwarelicensespolicy do
- let(:software_licenses_policy) { table(:software_license_policies) }
- let(:projects) { table(:projects) }
- let(:licenses) { table(:software_licenses) }
-
- before do
- projects.create!(name: 'gitlab', path: 'gitlab-org/gitlab-ce', namespace_id: 1)
- licenses.create!(name: 'MIT')
- software_licenses_policy.create!(project_id: projects.first.id, software_license_id: licenses.first.id)
- end
-
- it 'creates timestamps' do
- migrate!
-
- expect(software_licenses_policy.first.created_at).to be_nil
- expect(software_licenses_policy.first.updated_at).to be_nil
- end
-end
diff --git a/spec/migrations/20200122123016_backfill_project_settings_spec.rb b/spec/migrations/20200122123016_backfill_project_settings_spec.rb
deleted file mode 100644
index 7fc8eb0e368..00000000000
--- a/spec/migrations/20200122123016_backfill_project_settings_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('backfill_project_settings')
-
-RSpec.describe BackfillProjectSettings, :sidekiq, schema: 20200114113341 do
- let(:projects) { table(:projects) }
- let(:namespace) { table(:namespaces).create!(name: 'user', path: 'user') }
- let(:project) { projects.create!(namespace_id: namespace.id) }
-
- describe '#up' do
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
-
- projects.create!(id: 1, namespace_id: namespace.id)
- projects.create!(id: 2, namespace_id: namespace.id)
- projects.create!(id: 3, namespace_id: namespace.id)
- end
-
- it 'schedules BackfillProjectSettings background jobs' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, 1, 2)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, 3, 3)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb b/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb
deleted file mode 100644
index 9000d4b7fef..00000000000
--- a/spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('remove_invalid_jira_data')
-
-RSpec.describe RemoveInvalidJiraData do
- let(:jira_tracker_data) { table(:jira_tracker_data) }
- let(:services) { table(:services) }
-
- let(:service) { services.create!(id: 1) }
- let(:data) do
- {
- service_id: service.id,
- encrypted_api_url: 'http:url.com',
- encrypted_api_url_iv: 'somevalue',
- encrypted_url: 'http:url.com',
- encrypted_url_iv: 'somevalue',
- encrypted_username: 'username',
- encrypted_username_iv: 'somevalue',
- encrypted_password: 'username',
- encrypted_password_iv: 'somevalue'
- }
- end
-
- let!(:valid_data) { jira_tracker_data.create!(data) }
- let!(:empty_data) { jira_tracker_data.create!(service_id: service.id) }
- let!(:invalid_api_url) do
- data[:encrypted_api_url_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- let!(:missing_api_url) do
- data[:encrypted_api_url] = ''
- data[:encrypted_api_url_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- let!(:invalid_url) do
- data[:encrypted_url_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- let!(:missing_url) do
- data[:encrypted_url] = ''
- jira_tracker_data.create!(data)
- end
-
- let!(:invalid_username) do
- data[:encrypted_username_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- let!(:missing_username) do
- data[:encrypted_username] = nil
- data[:encrypted_username_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- let!(:invalid_password) do
- data[:encrypted_password_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- let!(:missing_password) do
- data[:encrypted_password] = nil
- data[:encrypted_username_iv] = nil
- jira_tracker_data.create!(data)
- end
-
- it 'removes the invalid data' do
- valid_data_records = [valid_data, empty_data, missing_api_url, missing_url, missing_username, missing_password]
-
- expect { migrate! }.to change { jira_tracker_data.count }.from(10).to(6)
-
- expect(jira_tracker_data.all).to match_array(valid_data_records)
- end
-end
diff --git a/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb b/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb
deleted file mode 100644
index 1d3476d6d61..00000000000
--- a/spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('remove_invalid_issue_tracker_data')
-
-RSpec.describe RemoveInvalidIssueTrackerData do
- let(:issue_tracker_data) { table(:issue_tracker_data) }
- let(:services) { table(:services) }
-
- let(:service) { services.create!(id: 1) }
- let(:data) do
- {
- service_id: service.id,
- encrypted_issues_url: 'http:url.com',
- encrypted_issues_url_iv: 'somevalue',
- encrypted_new_issue_url: 'http:url.com',
- encrypted_new_issue_url_iv: 'somevalue',
- encrypted_project_url: 'username',
- encrypted_project_url_iv: 'somevalue'
- }
- end
-
- let!(:valid_data) { issue_tracker_data.create!(data) }
- let!(:empty_data) { issue_tracker_data.create!(service_id: service.id) }
- let!(:invalid_issues_url) do
- data[:encrypted_issues_url_iv] = nil
- issue_tracker_data.create!(data)
- end
-
- let!(:missing_issues_url) do
- data[:encrypted_issues_url] = ''
- data[:encrypted_issues_url_iv] = nil
- issue_tracker_data.create!(data)
- end
-
- let!(:invalid_new_isue_url) do
- data[:encrypted_new_issue_url_iv] = nil
- issue_tracker_data.create!(data)
- end
-
- let!(:missing_new_issue_url) do
- data[:encrypted_new_issue_url] = ''
- issue_tracker_data.create!(data)
- end
-
- let!(:invalid_project_url) do
- data[:encrypted_project_url_iv] = nil
- issue_tracker_data.create!(data)
- end
-
- let!(:missing_project_url) do
- data[:encrypted_project_url] = nil
- data[:encrypted_project_url_iv] = nil
- issue_tracker_data.create!(data)
- end
-
- it 'removes the invalid data' do
- valid_data_records = [valid_data, empty_data, missing_issues_url, missing_new_issue_url, missing_project_url]
-
- expect { migrate! }.to change { issue_tracker_data.count }.from(8).to(5)
-
- expect(issue_tracker_data.all).to match_array(valid_data_records)
- end
-end
diff --git a/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb b/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb
deleted file mode 100644
index cf8bc608483..00000000000
--- a/spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('reschedule_migrate_issue_trackers_data')
-
-RSpec.describe RescheduleMigrateIssueTrackersData do
- let(:services) { table(:services) }
- let(:migration_class) { Gitlab::BackgroundMigration::MigrateIssueTrackersSensitiveData }
- let(:migration_name) { migration_class.to_s.demodulize }
-
- let(:properties) do
- {
- 'url' => 'http://example.com'
- }
- end
-
- let!(:jira_integration) do
- services.create!(id: 10, type: 'JiraService', properties: properties, category: 'issue_tracker')
- end
-
- let!(:jira_integration_nil) do
- services.create!(id: 11, type: 'JiraService', properties: nil, category: 'issue_tracker')
- end
-
- let!(:bugzilla_integration) do
- services.create!(id: 12, type: 'BugzillaService', properties: properties, category: 'issue_tracker')
- end
-
- let!(:youtrack_integration) do
- services.create!(id: 13, type: 'YoutrackService', properties: properties, category: 'issue_tracker')
- end
-
- let!(:youtrack_integration_empty) do
- services.create!(id: 14, type: 'YoutrackService', properties: '', category: 'issue_tracker')
- end
-
- let!(:gitlab_service) do
- services.create!(id: 15, type: 'GitlabIssueTrackerService', properties: properties, category: 'issue_tracker')
- end
-
- let!(:gitlab_service_empty) do
- services.create!(id: 16, type: 'GitlabIssueTrackerService', properties: {}, category: 'issue_tracker')
- end
-
- let!(:other_service) do
- services.create!(id: 17, type: 'OtherService', properties: properties, category: 'other_category')
- end
-
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
- end
-
- describe "#up" do
- it 'schedules background migrations at correct time' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(migration_name).to be_scheduled_delayed_migration(3.minutes, jira_integration.id, bugzilla_integration.id)
- expect(migration_name).to be_scheduled_delayed_migration(6.minutes, youtrack_integration.id, gitlab_service.id)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-
- describe "#down" do
- let(:issue_tracker_data) { table(:issue_tracker_data) }
- let(:jira_tracker_data) { table(:jira_tracker_data) }
-
- let!(:valid_issue_tracker_data) do
- issue_tracker_data.create!(
- service_id: bugzilla_integration.id,
- encrypted_issues_url: 'http://url.com',
- encrypted_issues_url_iv: 'somevalue'
- )
- end
-
- let!(:invalid_issue_tracker_data) do
- issue_tracker_data.create!(
- service_id: bugzilla_integration.id,
- encrypted_issues_url: 'http:url.com',
- encrypted_issues_url_iv: nil
- )
- end
-
- let!(:valid_jira_tracker_data) do
- jira_tracker_data.create!(
- service_id: bugzilla_integration.id,
- encrypted_url: 'http://url.com',
- encrypted_url_iv: 'somevalue'
- )
- end
-
- let!(:invalid_jira_tracker_data) do
- jira_tracker_data.create!(
- service_id: bugzilla_integration.id,
- encrypted_url: 'http://url.com',
- encrypted_url_iv: nil
- )
- end
-
- it 'removes the invalid jira tracker data' do
- expect { described_class.new.down }.to change { jira_tracker_data.count }.from(2).to(1)
-
- expect(jira_tracker_data.all).to eq([valid_jira_tracker_data])
- end
-
- it 'removes the invalid issue tracker data' do
- expect { described_class.new.down }.to change { issue_tracker_data.count }.from(2).to(1)
-
- expect(issue_tracker_data.all).to eq([valid_issue_tracker_data])
- end
- end
-end
diff --git a/spec/migrations/20200313203550_remove_orphaned_chat_names_spec.rb b/spec/migrations/20200313203550_remove_orphaned_chat_names_spec.rb
deleted file mode 100644
index 6b1126ca53e..00000000000
--- a/spec/migrations/20200313203550_remove_orphaned_chat_names_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('remove_orphaned_chat_names')
-
-RSpec.describe RemoveOrphanedChatNames, schema: 20200313202430 do
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
- let(:services) { table(:services) }
- let(:chat_names) { table(:chat_names) }
-
- let(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let(:project) { projects.create!(namespace_id: namespace.id) }
- let(:service) { services.create!(project_id: project.id, type: 'chat') }
- let(:chat_name) { chat_names.create!(service_id: service.id, team_id: 'TEAM', user_id: 12345, chat_id: 12345) }
- let(:orphaned_chat_name) { chat_names.create!(team_id: 'TEAM', service_id: 0, user_id: 12345, chat_id: 12345) }
-
- it 'removes the orphaned chat_name' do
- expect(chat_name).to be_present
- expect(orphaned_chat_name).to be_present
-
- migrate!
-
- expect(chat_names.where(id: orphaned_chat_name.id)).to be_empty
- expect(chat_name.reload).to be_present
- end
-end
diff --git a/spec/migrations/20200406102120_backfill_deployment_clusters_from_deployments_spec.rb b/spec/migrations/20200406102120_backfill_deployment_clusters_from_deployments_spec.rb
deleted file mode 100644
index c6a512a1ec9..00000000000
--- a/spec/migrations/20200406102120_backfill_deployment_clusters_from_deployments_spec.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('backfill_deployment_clusters_from_deployments')
-
-RSpec.describe BackfillDeploymentClustersFromDeployments, :migration, :sidekiq, schema: 20200227140242 do
- describe '#up' do
- it 'schedules BackfillDeploymentClustersFromDeployments background jobs' do
- stub_const("#{described_class}::BATCH_SIZE", 2)
-
- namespace = table(:namespaces).create!(name: 'the-namespace', path: 'the-path')
- project = table(:projects).create!(name: 'the-project', namespace_id: namespace.id)
- environment = table(:environments).create!(name: 'the-environment', project_id: project.id, slug: 'slug')
- cluster = table(:clusters).create!(name: 'the-cluster')
-
- deployment_data = { cluster_id: cluster.id, project_id: project.id, environment_id: environment.id, ref: 'abc', tag: false, sha: 'sha', status: 1 }
-
- # batch 1
- batch_1_begin = create_deployment(**deployment_data)
- batch_1_end = create_deployment(**deployment_data)
-
- # value that should not be included due to default scope
- create_deployment(**deployment_data, cluster_id: nil)
-
- # batch 2
- batch_2_begin = create_deployment(**deployment_data)
- batch_2_end = create_deployment(**deployment_data)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- # batch 1
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, batch_1_begin.id, batch_1_end.id)
-
- # batch 2
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, batch_2_begin.id, batch_2_end.id)
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
-
- def create_deployment(**data)
- @iid ||= 0
- @iid += 1
- table(:deployments).create!(iid: @iid, **data)
- end
- end
-end
diff --git a/spec/migrations/20200511145545_change_variable_interpolation_format_in_common_metrics_spec.rb b/spec/migrations/20200511145545_change_variable_interpolation_format_in_common_metrics_spec.rb
deleted file mode 100644
index e712e555b70..00000000000
--- a/spec/migrations/20200511145545_change_variable_interpolation_format_in_common_metrics_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('change_variable_interpolation_format_in_common_metrics')
-
-RSpec.describe ChangeVariableInterpolationFormatInCommonMetrics, :migration do
- let(:prometheus_metrics) { table(:prometheus_metrics) }
-
- let!(:common_metric) do
- prometheus_metrics.create!(
- identifier: 'system_metrics_kubernetes_container_memory_total',
- query: 'avg(sum(container_memory_usage_bytes{container_name!="POD",' \
- 'pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"})' \
- ' by (job)) without (job) /1024/1024/1024',
- project_id: nil,
- title: 'Memory Usage (Total)',
- y_label: 'Total Memory Used (GB)',
- unit: 'GB',
- legend: 'Total (GB)',
- group: -5,
- common: true
- )
- end
-
- it 'updates query to use {{}}' do
- expected_query = <<~EOS.chomp
- avg(sum(container_memory_usage_bytes{container!="POD",\
- pod=~"^{{ci_environment_slug}}-(.*)",namespace="{{kube_namespace}}"}) \
- by (job)) without (job) /1024/1024/1024 OR \
- avg(sum(container_memory_usage_bytes{container_name!="POD",\
- pod_name=~"^{{ci_environment_slug}}-(.*)",namespace="{{kube_namespace}}"}) \
- by (job)) without (job) /1024/1024/1024
- EOS
-
- migrate!
-
- expect(common_metric.reload.query).to eq(expected_query)
- end
-end
diff --git a/spec/migrations/20200526115436_dedup_mr_metrics_spec.rb b/spec/migrations/20200526115436_dedup_mr_metrics_spec.rb
deleted file mode 100644
index f16026884f5..00000000000
--- a/spec/migrations/20200526115436_dedup_mr_metrics_spec.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('dedup_mr_metrics')
-
-RSpec.describe DedupMrMetrics, :migration, schema: 20200526013844 do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:merge_requests) { table(:merge_requests) }
- let(:metrics) { table(:merge_request_metrics) }
- let(:merge_request_params) { { source_branch: 'x', target_branch: 'y', target_project_id: project.id } }
-
- let!(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:project) { projects.create!(namespace_id: namespace.id) }
- let!(:merge_request_1) { merge_requests.create!(merge_request_params) }
- let!(:merge_request_2) { merge_requests.create!(merge_request_params) }
- let!(:merge_request_3) { merge_requests.create!(merge_request_params) }
-
- let!(:duplicated_metrics_1) { metrics.create!(merge_request_id: merge_request_1.id, latest_build_started_at: 1.day.ago, first_deployed_to_production_at: 5.days.ago, updated_at: 2.months.ago) }
- let!(:duplicated_metrics_2) { metrics.create!(merge_request_id: merge_request_1.id, latest_build_started_at: Time.now, merged_at: Time.now, updated_at: 1.month.ago) }
-
- let!(:duplicated_metrics_3) { metrics.create!(merge_request_id: merge_request_3.id, diff_size: 30, commits_count: 20, updated_at: 2.months.ago) }
- let!(:duplicated_metrics_4) { metrics.create!(merge_request_id: merge_request_3.id, added_lines: 5, commits_count: nil, updated_at: 1.month.ago) }
-
- let!(:non_duplicated_metrics) { metrics.create!(merge_request_id: merge_request_2.id, latest_build_started_at: 2.days.ago) }
-
- it 'deduplicates merge_request_metrics table' do
- expect { migrate! }.to change { metrics.count }.from(5).to(3)
- end
-
- it 'merges `duplicated_metrics_1` with `duplicated_metrics_2`' do
- migrate!
-
- expect(metrics.where(id: duplicated_metrics_1.id)).not_to exist
-
- merged_metrics = metrics.find_by(id: duplicated_metrics_2.id)
-
- expect(merged_metrics).to be_present
- expect(merged_metrics.latest_build_started_at).to be_like_time(duplicated_metrics_2.latest_build_started_at)
- expect(merged_metrics.merged_at).to be_like_time(duplicated_metrics_2.merged_at)
- expect(merged_metrics.first_deployed_to_production_at).to be_like_time(duplicated_metrics_1.first_deployed_to_production_at)
- end
-
- it 'merges `duplicated_metrics_3` with `duplicated_metrics_4`' do
- migrate!
-
- expect(metrics.where(id: duplicated_metrics_3.id)).not_to exist
-
- merged_metrics = metrics.find_by(id: duplicated_metrics_4.id)
-
- expect(merged_metrics).to be_present
- expect(merged_metrics.diff_size).to eq(duplicated_metrics_3.diff_size)
- expect(merged_metrics.commits_count).to eq(duplicated_metrics_3.commits_count)
- expect(merged_metrics.added_lines).to eq(duplicated_metrics_4.added_lines)
- end
-
- it 'does not change non duplicated records' do
- expect { migrate! }.not_to change { non_duplicated_metrics.reload.attributes }
- end
-
- it 'does nothing when there are no metrics' do
- metrics.delete_all
-
- migrate!
-
- expect(metrics.count).to eq(0)
- end
-end
diff --git a/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb b/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb
deleted file mode 100644
index 9b72559234e..00000000000
--- a/spec/migrations/20200526231421_update_index_approval_rule_name_for_code_owners_rule_type_spec.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('update_index_approval_rule_name_for_code_owners_rule_type')
-
-RSpec.describe UpdateIndexApprovalRuleNameForCodeOwnersRuleType do
- let(:migration) { described_class.new }
-
- let(:approval_rules) { table(:approval_merge_request_rules) }
- let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab') }
-
- let(:project) do
- table(:projects).create!(
- namespace_id: namespace.id,
- name: 'gitlab',
- path: 'gitlab'
- )
- end
-
- let(:merge_request) do
- table(:merge_requests).create!(
- target_project_id: project.id,
- source_project_id: project.id,
- target_branch: 'feature',
- source_branch: 'master'
- )
- end
-
- let(:index_names) do
- ActiveRecord::Base.connection
- .indexes(:approval_merge_request_rules)
- .collect(&:name)
- end
-
- def create_sectional_approval_rules
- approval_rules.create!(
- merge_request_id: merge_request.id,
- name: "*.rb",
- code_owner: true,
- rule_type: 2,
- section: "First Section"
- )
-
- approval_rules.create!(
- merge_request_id: merge_request.id,
- name: "*.rb",
- code_owner: true,
- rule_type: 2,
- section: "Second Section"
- )
- end
-
- def create_two_matching_nil_section_approval_rules
- 2.times do
- approval_rules.create!(
- merge_request_id: merge_request.id,
- name: "nil_section",
- code_owner: true,
- rule_type: 2
- )
- end
- end
-
- before do
- approval_rules.delete_all
- end
-
- describe "#up" do
- it "creates the new index and removes the 'legacy' indices" do
- # Confirm that existing legacy indices prevent duplicate entries
- #
- expect { create_sectional_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- approval_rules.delete_all
-
- disable_migrations_output { migrate! }
-
- # After running the migration, expect `section == nil` rules to still be
- # blocked by the legacy indices, but sectional rules are allowed.
- #
- expect { create_sectional_approval_rules }
- .to change { approval_rules.count }.by(2)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- # Attempt to rerun the creation of sectional rules, and see that sectional
- # rules are unique by section
- #
- expect { create_sectional_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- expect(index_names).to include(
- described_class::SECTIONAL_INDEX_NAME,
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
- end
- end
-
- describe "#down" do
- context "run as FOSS" do
- before do
- expect(Gitlab).to receive(:ee?).twice.and_return(false)
- end
-
- it "recreates legacy indices, but does not invoke EE-specific code" do
- disable_migrations_output { migrate! }
-
- expect(index_names).to include(
- described_class::SECTIONAL_INDEX_NAME,
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
-
- # Since ApprovalMergeRequestRules are EE-specific, we expect none to be
- # deleted during the migration.
- #
- expect { disable_migrations_output { migration.down } }
- .not_to change { approval_rules.count }
-
- index_names = ActiveRecord::Base.connection
- .indexes(:approval_merge_request_rules)
- .collect(&:name)
-
- expect(index_names).not_to include(described_class::SECTIONAL_INDEX_NAME)
- expect(index_names).to include(
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
- end
- end
-
- context "EE" do
- it "recreates 'legacy' indices and removes duplicate code owner approval rules" do
- skip("This test is skipped under FOSS") unless Gitlab.ee?
-
- disable_migrations_output { migrate! }
-
- expect { create_sectional_approval_rules }
- .to change { approval_rules.count }.by(2)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- expect(MergeRequests::SyncCodeOwnerApprovalRules)
- .to receive(:new).with(MergeRequest.find(merge_request.id)).once.and_call_original
-
- # Run the down migration. This will remove the 3 approval rules we create
- # above, and call MergeRequests::SyncCodeOwnerApprovalRules to recreate
- # new ones. However, as there is no CODEOWNERS file in this test
- # context, no approval rules will be created, so we can expect
- # approval_rules.count to be changed by -3.
- #
- expect { disable_migrations_output { migration.down } }
- .to change { approval_rules.count }.by(-3)
-
- # Test that the index does not allow us to create the same rules as the
- # previous sectional index.
- #
- expect { create_sectional_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
- expect { create_two_matching_nil_section_approval_rules }
- .to raise_exception(ActiveRecord::RecordNotUnique)
-
- expect(index_names).not_to include(described_class::SECTIONAL_INDEX_NAME)
- expect(index_names).to include(
- described_class::LEGACY_INDEX_NAME_RULE_TYPE,
- described_class::LEGACY_INDEX_NAME_CODE_OWNERS
- )
- end
- end
- end
-end
diff --git a/spec/migrations/20200703125016_backfill_namespace_settings_spec.rb b/spec/migrations/20200703125016_backfill_namespace_settings_spec.rb
deleted file mode 100644
index c9f7a66a0b9..00000000000
--- a/spec/migrations/20200703125016_backfill_namespace_settings_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('backfill_namespace_settings')
-
-RSpec.describe BackfillNamespaceSettings, :sidekiq, schema: 20200703124823 do
- let(:namespaces) { table(:namespaces) }
-
- describe '#up' do
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
-
- namespaces.create!(id: 1, name: 'test1', path: 'test1')
- namespaces.create!(id: 2, name: 'test2', path: 'test2')
- namespaces.create!(id: 3, name: 'test3', path: 'test3')
- end
-
- it 'schedules BackfillNamespaceSettings background jobs' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, 1, 2)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, 3, 3)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/20200706035141_adjust_unique_index_alert_management_alerts_spec.rb b/spec/migrations/20200706035141_adjust_unique_index_alert_management_alerts_spec.rb
deleted file mode 100644
index 121b1729dd2..00000000000
--- a/spec/migrations/20200706035141_adjust_unique_index_alert_management_alerts_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('adjust_unique_index_alert_management_alerts')
-
-RSpec.describe AdjustUniqueIndexAlertManagementAlerts, :migration do
- let(:migration) { described_class.new }
- let(:alerts) { AlertManagement::Alert }
- let(:project) { create_project }
- let(:other_project) { create_project }
- let(:resolved_state) { 2 }
- let(:triggered_state) { 1 }
- let!(:existing_alert) { create_alert(project, resolved_state, '1234', 1) }
- let!(:p2_alert) { create_alert(other_project, resolved_state, '1234', 1) }
- let!(:p2_alert_diff_fingerprint) { create_alert(other_project, resolved_state, '4567', 2) }
-
- it 'can reverse the migration' do
- expect(existing_alert.fingerprint).not_to eq(nil)
- expect(p2_alert.fingerprint).not_to eq(nil)
- expect(p2_alert_diff_fingerprint.fingerprint).not_to eq(nil)
-
- migrate!
-
- # Adding a second alert with the same fingerprint now that we can
- second_alert = create_alert(project, triggered_state, '1234', 2)
- expect(alerts.count).to eq(4)
-
- schema_migrate_down!
-
- # We keep the alerts, but the oldest ones fingerprint is removed
- expect(alerts.count).to eq(4)
- expect(second_alert.reload.fingerprint).not_to eq(nil)
- expect(p2_alert.fingerprint).not_to eq(nil)
- expect(p2_alert_diff_fingerprint.fingerprint).not_to eq(nil)
- expect(existing_alert.reload.fingerprint).to eq(nil)
- end
-
- def namespace
- @namespace ||= table(:namespaces).create!(name: 'foo', path: 'foo')
- end
-
- def create_project
- table(:projects).create!(namespace_id: namespace.id)
- end
-
- def create_alert(project, status, fingerprint, iid)
- params = {
- title: 'test',
- started_at: Time.current,
- iid: iid,
- project_id: project.id,
- status: status,
- fingerprint: fingerprint
- }
- table(:alert_management_alerts).create!(params)
- end
-end
diff --git a/spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb b/spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb
deleted file mode 100644
index a632065946d..00000000000
--- a/spec/migrations/20200728080250_replace_unique_index_on_cycle_analytics_stages_spec.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('replace_unique_index_on_cycle_analytics_stages')
-
-RSpec.describe ReplaceUniqueIndexOnCycleAnalyticsStages, :migration, schema: 20200727142337 do
- let(:namespaces) { table(:namespaces) }
- let(:group_value_streams) { table(:analytics_cycle_analytics_group_value_streams) }
- let(:group_stages) { table(:analytics_cycle_analytics_group_stages) }
-
- let(:group) { namespaces.create!(type: 'Group', name: 'test', path: 'test') }
-
- let(:value_stream_1) { group_value_streams.create!(group_id: group.id, name: 'vs1') }
- let(:value_stream_2) { group_value_streams.create!(group_id: group.id, name: 'vs2') }
-
- let(:duplicated_stage_1) { group_stages.create!(group_id: group.id, group_value_stream_id: value_stream_1.id, name: 'stage', start_event_identifier: 1, end_event_identifier: 1) }
- let(:duplicated_stage_2) { group_stages.create!(group_id: group.id, group_value_stream_id: value_stream_2.id, name: 'stage', start_event_identifier: 1, end_event_identifier: 1) }
-
- let(:stage_record) { group_stages.create!(group_id: group.id, group_value_stream_id: value_stream_2.id, name: 'other stage', start_event_identifier: 1, end_event_identifier: 1) }
-
- describe '#down' do
- subject { described_class.new.down }
-
- before do
- described_class.new.up
-
- duplicated_stage_1
- duplicated_stage_2
- stage_record
- end
-
- it 'removes duplicated stage records' do
- subject
-
- stage = group_stages.find_by_id(duplicated_stage_2.id)
- expect(stage).to be_nil
- end
-
- it 'does not change the first duplicated stage record' do
- expect { subject }.not_to change { duplicated_stage_1.reload.attributes }
- end
-
- it 'does not change not duplicated stage record' do
- expect { subject }.not_to change { stage_record.reload.attributes }
- end
- end
-end
diff --git a/spec/migrations/20200728182311_add_o_auth_paths_to_protected_paths_spec.rb b/spec/migrations/20200728182311_add_o_auth_paths_to_protected_paths_spec.rb
deleted file mode 100644
index 5c65d45c6e0..00000000000
--- a/spec/migrations/20200728182311_add_o_auth_paths_to_protected_paths_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('add_o_auth_paths_to_protected_paths')
-
-RSpec.describe AddOAuthPathsToProtectedPaths do
- subject(:migration) { described_class.new }
-
- let(:application_settings) { table(:application_settings) }
- let(:new_paths) do
- [
- '/oauth/authorize',
- '/oauth/token'
- ]
- end
-
- it 'appends new OAuth paths' do
- application_settings.create!
-
- protected_paths_before = application_settings.first.protected_paths
- protected_paths_after = protected_paths_before + new_paths
-
- expect { migrate! }.to change { application_settings.first.protected_paths }.from(protected_paths_before).to(protected_paths_after)
- end
-
- it 'new default includes new paths' do
- settings_before = application_settings.create!
-
- expect(settings_before.protected_paths).not_to include(*new_paths)
-
- migrate!
-
- application_settings.reset_column_information
- settings_after = application_settings.create!
-
- expect(settings_after.protected_paths).to include(*new_paths)
- end
-
- it 'does not change the value when the new paths are already included' do
- application_settings.create!(protected_paths: %w(/users/sign_in /users/password) + new_paths)
-
- expect { migrate! }.not_to change { application_settings.first.protected_paths }
- end
-
- it 'adds one value when the other is already present' do
- application_settings.create!(protected_paths: %W(/users/sign_in /users/password #{new_paths.first}))
-
- migrate!
-
- expect(application_settings.first.protected_paths).to include(new_paths.second)
- end
-end
diff --git a/spec/migrations/20200811130433_create_missing_vulnerabilities_issue_links_spec.rb b/spec/migrations/20200811130433_create_missing_vulnerabilities_issue_links_spec.rb
deleted file mode 100644
index d166ff3617b..00000000000
--- a/spec/migrations/20200811130433_create_missing_vulnerabilities_issue_links_spec.rb
+++ /dev/null
@@ -1,160 +0,0 @@
-# frozen_string_literal: true
-require 'spec_helper'
-require_migration!('create_missing_vulnerabilities_issue_links')
-
-RSpec.describe CreateMissingVulnerabilitiesIssueLinks, :migration do
- let(:namespace) { table(:namespaces).create!(name: 'user', path: 'user') }
- let(:users) { table(:users) }
- let(:user) { create_user! }
- let(:project) { table(:projects).create!(id: 123, namespace_id: namespace.id) }
- let(:scanners) { table(:vulnerability_scanners) }
- let(:scanner) { scanners.create!(project_id: project.id, external_id: 'test 1', name: 'test scanner 1') }
- let(:different_scanner) { scanners.create!(project_id: project.id, external_id: 'test 2', name: 'test scanner 2') }
- let(:issues) { table(:issues) }
- let(:issue1) { issues.create!(id: 123, project_id: project.id) }
- let(:issue2) { issues.create!(id: 124, project_id: project.id) }
- let(:issue3) { issues.create!(id: 125, project_id: project.id) }
- let(:vulnerabilities) { table(:vulnerabilities) }
- let(:vulnerabilities_findings) { table(:vulnerability_occurrences) }
- let(:vulnerability_feedback) { table(:vulnerability_feedback) }
- let(:vulnerability_issue_links) { table(:vulnerability_issue_links) }
- let(:vulnerability_identifiers) { table(:vulnerability_identifiers) }
- let(:vulnerability_identifier) { vulnerability_identifiers.create!(project_id: project.id, external_type: 'test 1', external_id: 'test 1', fingerprint: 'test 1', name: 'test 1') }
- let(:different_vulnerability_identifier) { vulnerability_identifiers.create!(project_id: project.id, external_type: 'test 2', external_id: 'test 2', fingerprint: 'test 2', name: 'test 2') }
-
- let!(:vulnerability) do
- create_vulnerability!(
- project_id: project.id,
- author_id: user.id
- )
- end
-
- before do
- create_finding!(
- vulnerability_id: vulnerability.id,
- project_id: project.id,
- scanner_id: scanner.id,
- primary_identifier_id: vulnerability_identifier.id
- )
- create_feedback!(
- issue_id: issue1.id,
- project_id: project.id,
- author_id: user.id
- )
-
- # Create a finding with no vulnerability_id
- # https://gitlab.com/gitlab-com/gl-infra/production/-/issues/2539
- create_finding!(
- vulnerability_id: nil,
- project_id: project.id,
- scanner_id: different_scanner.id,
- primary_identifier_id: different_vulnerability_identifier.id,
- location_fingerprint: 'somewhereinspace',
- uuid: 'test2'
- )
- create_feedback!(
- category: 2,
- issue_id: issue2.id,
- project_id: project.id,
- author_id: user.id
- )
- end
-
- context 'with no Vulnerabilities::IssueLinks present' do
- it 'creates missing Vulnerabilities::IssueLinks' do
- expect(vulnerability_issue_links.count).to eq(0)
-
- migrate!
-
- expect(vulnerability_issue_links.count).to eq(1)
- end
- end
-
- context 'when an Vulnerabilities::IssueLink already exists' do
- before do
- vulnerability_issue_links.create!(vulnerability_id: vulnerability.id, issue_id: issue1.id)
- end
-
- it 'creates no duplicates' do
- expect(vulnerability_issue_links.count).to eq(1)
-
- migrate!
-
- expect(vulnerability_issue_links.count).to eq(1)
- end
- end
-
- context 'when an Vulnerabilities::IssueLink of type created already exists' do
- before do
- vulnerability_issue_links.create!(vulnerability_id: vulnerability.id, issue_id: issue3.id, link_type: 2)
- end
-
- it 'creates no duplicates' do
- expect(vulnerability_issue_links.count).to eq(1)
-
- migrate!
-
- expect(vulnerability_issue_links.count).to eq(1)
- end
- end
-
- private
-
- def create_vulnerability!(project_id:, author_id:, title: 'test', severity: 7, confidence: 7, report_type: 0)
- vulnerabilities.create!(
- project_id: project_id,
- author_id: author_id,
- title: title,
- severity: severity,
- confidence: confidence,
- report_type: report_type
- )
- end
-
- # rubocop:disable Metrics/ParameterLists
- def create_finding!(
- vulnerability_id:, project_id:, scanner_id:, primary_identifier_id:,
- name: "test", severity: 7, confidence: 7, report_type: 0,
- project_fingerprint: '123qweasdzxc', location_fingerprint: 'test',
- metadata_version: 'test', raw_metadata: 'test', uuid: 'test')
- vulnerabilities_findings.create!(
- vulnerability_id: vulnerability_id,
- project_id: project_id,
- name: name,
- severity: severity,
- confidence: confidence,
- report_type: report_type,
- project_fingerprint: project_fingerprint,
- scanner_id: scanner.id,
- primary_identifier_id: vulnerability_identifier.id,
- location_fingerprint: location_fingerprint,
- metadata_version: metadata_version,
- raw_metadata: raw_metadata,
- uuid: uuid
- )
- end
- # rubocop:enable Metrics/ParameterLists
-
- # project_fingerprint on Vulnerabilities::Finding is a bytea and we need to match this
- def create_feedback!(issue_id:, project_id:, author_id:, feedback_type: 1, category: 0, project_fingerprint: '3132337177656173647a7863')
- vulnerability_feedback.create!(
- feedback_type: feedback_type,
- issue_id: issue_id,
- category: category,
- project_fingerprint: project_fingerprint,
- project_id: project_id,
- author_id: author_id
- )
- end
-
- def create_user!(name: "Example User", email: "user@example.com", user_type: nil, created_at: Time.now, confirmed_at: Time.now)
- users.create!(
- name: name,
- email: email,
- username: name,
- projects_limit: 0,
- user_type: user_type,
- confirmed_at: confirmed_at
- )
- end
-end
diff --git a/spec/migrations/20200915044225_schedule_migration_to_hashed_storage_spec.rb b/spec/migrations/20200915044225_schedule_migration_to_hashed_storage_spec.rb
deleted file mode 100644
index 69f7525d265..00000000000
--- a/spec/migrations/20200915044225_schedule_migration_to_hashed_storage_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('schedule_migration_to_hashed_storage')
-
-RSpec.describe ScheduleMigrationToHashedStorage, :sidekiq do
- describe '#up' do
- it 'schedules background migration job' do
- Sidekiq::Testing.fake! do
- expect { migrate! }.to change { BackgroundMigrationWorker.jobs.size }.by(1)
- end
- end
- end
-end
diff --git a/spec/migrations/20200929052138_create_initial_versions_for_pre_versioning_terraform_states_spec.rb b/spec/migrations/20200929052138_create_initial_versions_for_pre_versioning_terraform_states_spec.rb
deleted file mode 100644
index 34bd8f1c869..00000000000
--- a/spec/migrations/20200929052138_create_initial_versions_for_pre_versioning_terraform_states_spec.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('create_initial_versions_for_pre_versioning_terraform_states')
-
-RSpec.describe CreateInitialVersionsForPreVersioningTerraformStates do
- let(:namespace) { table(:namespaces).create!(name: 'terraform', path: 'terraform') }
- let(:project) { table(:projects).create!(id: 1, namespace_id: namespace.id) }
- let(:terraform_state_versions) { table(:terraform_state_versions) }
-
- def create_state!(project, versioning_enabled:)
- table(:terraform_states).create!(
- project_id: project.id,
- uuid: 'uuid',
- file_store: 2,
- file: 'state.tfstate',
- versioning_enabled: versioning_enabled
- )
- end
-
- describe '#up' do
- context 'for a state that is already versioned' do
- let!(:terraform_state) { create_state!(project, versioning_enabled: true) }
-
- it 'does not insert a version record' do
- expect { migrate! }.not_to change { terraform_state_versions.count }
- end
- end
-
- context 'for a state that is not yet versioned' do
- let!(:terraform_state) { create_state!(project, versioning_enabled: false) }
-
- it 'creates a version using the current state data' do
- expect { migrate! }.to change { terraform_state_versions.count }.by(1)
-
- migrated_version = terraform_state_versions.last
- expect(migrated_version.terraform_state_id).to eq(terraform_state.id)
- expect(migrated_version.version).to be_zero
- expect(migrated_version.file_store).to eq(terraform_state.file_store)
- expect(migrated_version.file).to eq(terraform_state.file)
- expect(migrated_version.created_at).to be_present
- expect(migrated_version.updated_at).to be_present
- end
- end
- end
-end
diff --git a/spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb b/spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb
deleted file mode 100644
index ef9bc5788c1..00000000000
--- a/spec/migrations/20201014205300_drop_backfill_jira_tracker_deployment_type_jobs_spec.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('drop_backfill_jira_tracker_deployment_type_jobs')
-
-RSpec.describe DropBackfillJiraTrackerDeploymentTypeJobs, :sidekiq, :redis, schema: 2020_10_14_205300 do
- subject(:migration) { described_class.new }
-
- describe '#up' do
- let(:retry_set) { Sidekiq::RetrySet.new }
- let(:scheduled_set) { Sidekiq::ScheduledSet.new }
-
- context 'there are only affected jobs on the queue' do
- let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1] } }
- let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) }
-
- it 'removes enqueued BackfillJiraTrackerDeploymentType background jobs' do
- Sidekiq::Testing.disable! do # https://github.com/mperham/sidekiq/wiki/testing#api Sidekiq's API does not have a testing mode
- retry_set.schedule(1.hour.from_now, payload)
- scheduled_set.schedule(1.hour.from_now, payload)
- Sidekiq::Client.push(queue_payload)
-
- expect { migration.up }.to change { Sidekiq::Queue.new(described_class::QUEUE).size }.from(1).to(0)
- expect(retry_set.size).to eq(0)
- expect(scheduled_set.size).to eq(0)
- end
- end
- end
-
- context 'there are not any affected jobs on the queue' do
- let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1] } }
- let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) }
-
- it 'skips other enqueued jobs' do
- Sidekiq::Testing.disable! do
- retry_set.schedule(1.hour.from_now, payload)
- scheduled_set.schedule(1.hour.from_now, payload)
- Sidekiq::Client.push(queue_payload)
-
- expect { migration.up }.not_to change { Sidekiq::Queue.new(described_class::QUEUE).size }
- expect(retry_set.size).to eq(1)
- expect(scheduled_set.size).to eq(1)
- end
- end
- end
-
- context 'other queues' do
- it 'does not modify them' do
- Sidekiq::Testing.disable! do
- Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1])
- Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1])
-
- expect { migration.up }.not_to change { Sidekiq::Queue.new('other').size }
- end
- end
- end
- end
-end
diff --git a/spec/migrations/20201027002551_migrate_services_to_http_integrations_spec.rb b/spec/migrations/20201027002551_migrate_services_to_http_integrations_spec.rb
deleted file mode 100644
index f9f6cd9589c..00000000000
--- a/spec/migrations/20201027002551_migrate_services_to_http_integrations_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('migrate_services_to_http_integrations')
-
-RSpec.describe MigrateServicesToHttpIntegrations do
- let!(:namespace) { table(:namespaces).create!(name: 'namespace', path: 'namespace') }
- let!(:project) { table(:projects).create!(id: 1, namespace_id: namespace.id) }
- let!(:alert_service) { table(:services).create!(type: 'AlertsService', project_id: project.id, active: true) }
- let!(:alert_service_data) { table(:alerts_service_data).create!(service_id: alert_service.id, encrypted_token: 'test', encrypted_token_iv: 'test')}
- let(:http_integrations) { table(:alert_management_http_integrations) }
-
- describe '#up' do
- it 'creates the http integrations from the alert services', :aggregate_failures do
- expect { migrate! }.to change { http_integrations.count }.by(1)
-
- http_integration = http_integrations.last
- expect(http_integration.project_id).to eq(alert_service.project_id)
- expect(http_integration.encrypted_token).to eq(alert_service_data.encrypted_token)
- expect(http_integration.encrypted_token_iv).to eq(alert_service_data.encrypted_token_iv)
- expect(http_integration.active).to eq(alert_service.active)
- expect(http_integration.name).to eq(described_class::SERVICE_NAMES_IDENTIFIER[:name])
- expect(http_integration.endpoint_identifier).to eq(described_class::SERVICE_NAMES_IDENTIFIER[:identifier])
- end
- end
-end
diff --git a/spec/migrations/20201028182809_backfill_jira_tracker_deployment_type2_spec.rb b/spec/migrations/20201028182809_backfill_jira_tracker_deployment_type2_spec.rb
deleted file mode 100644
index 0746ad7e44f..00000000000
--- a/spec/migrations/20201028182809_backfill_jira_tracker_deployment_type2_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('backfill_jira_tracker_deployment_type2')
-
-RSpec.describe BackfillJiraTrackerDeploymentType2, :sidekiq, schema: 20201028182809 do
- let(:services) { table(:services) }
- let(:jira_tracker_data) { table(:jira_tracker_data) }
- let(:migration) { described_class.new }
- let(:batch_interval) { described_class::DELAY_INTERVAL }
-
- describe '#up' do
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
-
- active_service = services.create!(type: 'JiraService', active: true)
- inactive_service = services.create!(type: 'JiraService', active: false)
-
- jira_tracker_data.create!(id: 1, service_id: active_service.id, deployment_type: 0)
- jira_tracker_data.create!(id: 2, service_id: active_service.id, deployment_type: 1)
- jira_tracker_data.create!(id: 3, service_id: inactive_service.id, deployment_type: 2)
- jira_tracker_data.create!(id: 4, service_id: inactive_service.id, deployment_type: 0)
- jira_tracker_data.create!(id: 5, service_id: active_service.id, deployment_type: 0)
- end
-
- it 'schedules BackfillJiraTrackerDeploymentType2 background jobs' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migration.up
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval, 1, 4)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval * 2, 5, 5)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb b/spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb
deleted file mode 100644
index 7a79406ac80..00000000000
--- a/spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('cleanup_transfered_projects_shared_runners')
-
-RSpec.describe CleanupTransferedProjectsSharedRunners, :sidekiq, schema: 20201110161542 do
- let(:namespaces) { table(:namespaces) }
- let(:migration) { described_class.new }
- let(:batch_interval) { described_class::INTERVAL }
-
- let!(:namespace_1) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:namespace_2) { namespaces.create!(name: 'bar', path: 'bar') }
- let!(:namespace_3) { namespaces.create!(name: 'baz', path: 'baz') }
-
- describe '#up' do
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
- end
-
- it 'schedules ResetSharedRunnersForTransferredProjects background jobs' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migration.up
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval, namespace_1.id, namespace_2.id)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval * 2, namespace_3.id, namespace_3.id)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/20201112130715_schedule_recalculate_uuid_on_vulnerabilities_occurrences_spec.rb b/spec/migrations/20201112130715_schedule_recalculate_uuid_on_vulnerabilities_occurrences_spec.rb
deleted file mode 100644
index dda919d70d9..00000000000
--- a/spec/migrations/20201112130715_schedule_recalculate_uuid_on_vulnerabilities_occurrences_spec.rb
+++ /dev/null
@@ -1,138 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('schedule_recalculate_uuid_on_vulnerabilities_occurrences')
-
-RSpec.describe ScheduleRecalculateUuidOnVulnerabilitiesOccurrences, :migration do
- let(:namespace) { table(:namespaces).create!(name: 'user', path: 'user') }
- let(:users) { table(:users) }
- let(:user) { create_user! }
- let(:project) { table(:projects).create!(id: 123, namespace_id: namespace.id) }
- let(:scanners) { table(:vulnerability_scanners) }
- let(:scanner) { scanners.create!(project_id: project.id, external_id: 'test 1', name: 'test scanner 1') }
- let(:different_scanner) { scanners.create!(project_id: project.id, external_id: 'test 2', name: 'test scanner 2') }
- let(:vulnerabilities) { table(:vulnerabilities) }
- let(:vulnerabilities_findings) { table(:vulnerability_occurrences) }
- let(:vulnerability_identifiers) { table(:vulnerability_identifiers) }
- let(:vulnerability_identifier) do
- vulnerability_identifiers.create!(
- project_id: project.id,
- external_type: 'uuid-v5',
- external_id: 'uuid-v5',
- fingerprint: '7e394d1b1eb461a7406d7b1e08f057a1cf11287a',
- name: 'Identifier for UUIDv5')
- end
-
- let(:different_vulnerability_identifier) do
- vulnerability_identifiers.create!(
- project_id: project.id,
- external_type: 'uuid-v4',
- external_id: 'uuid-v4',
- fingerprint: '772da93d34a1ba010bcb5efa9fb6f8e01bafcc89',
- name: 'Identifier for UUIDv4')
- end
-
- let!(:vulnerability_for_uuidv4) do
- create_vulnerability!(
- project_id: project.id,
- author_id: user.id
- )
- end
-
- let!(:vulnerability_for_uuidv5) do
- create_vulnerability!(
- project_id: project.id,
- author_id: user.id
- )
- end
-
- let(:known_uuid_v4) { "b3cc2518-5446-4dea-871c-89d5e999c1ac" }
- let!(:finding_with_uuid_v4) do
- create_finding!(
- vulnerability_id: vulnerability_for_uuidv4.id,
- project_id: project.id,
- scanner_id: different_scanner.id,
- primary_identifier_id: different_vulnerability_identifier.id,
- report_type: 0, # "sast"
- location_fingerprint: "fa18f432f1d56675f4098d318739c3cd5b14eb3e",
- uuid: known_uuid_v4
- )
- end
-
- let(:known_uuid_v5) { "e7d3d99d-04bb-5771-bb44-d80a9702d0a2" }
- let!(:finding_with_uuid_v5) do
- create_finding!(
- vulnerability_id: vulnerability_for_uuidv5.id,
- project_id: project.id,
- scanner_id: scanner.id,
- primary_identifier_id: vulnerability_identifier.id,
- report_type: 0, # "sast"
- location_fingerprint: "838574be0210968bf6b9f569df9c2576242cbf0a",
- uuid: known_uuid_v5
- )
- end
-
- before do
- stub_const("#{described_class}::BATCH_SIZE", 1)
- end
-
- around do |example|
- freeze_time { Sidekiq::Testing.fake! { example.run } }
- end
-
- it 'schedules background migration' do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_migration(finding_with_uuid_v4.id, finding_with_uuid_v4.id)
- expect(described_class::MIGRATION).to be_scheduled_migration(finding_with_uuid_v5.id, finding_with_uuid_v5.id)
- end
-
- private
-
- def create_vulnerability!(project_id:, author_id:, title: 'test', severity: 7, confidence: 7, report_type: 0)
- vulnerabilities.create!(
- project_id: project_id,
- author_id: author_id,
- title: title,
- severity: severity,
- confidence: confidence,
- report_type: report_type
- )
- end
-
- # rubocop:disable Metrics/ParameterLists
- def create_finding!(
- vulnerability_id:, project_id:, scanner_id:, primary_identifier_id:,
- name: "test", severity: 7, confidence: 7, report_type: 0,
- project_fingerprint: '123qweasdzxc', location_fingerprint: 'test',
- metadata_version: 'test', raw_metadata: 'test', uuid: 'test')
- vulnerabilities_findings.create!(
- vulnerability_id: vulnerability_id,
- project_id: project_id,
- name: name,
- severity: severity,
- confidence: confidence,
- report_type: report_type,
- project_fingerprint: project_fingerprint,
- scanner_id: scanner.id,
- primary_identifier_id: vulnerability_identifier.id,
- location_fingerprint: location_fingerprint,
- metadata_version: metadata_version,
- raw_metadata: raw_metadata,
- uuid: uuid
- )
- end
- # rubocop:enable Metrics/ParameterLists
-
- def create_user!(name: "Example User", email: "user@example.com", user_type: nil, created_at: Time.now, confirmed_at: Time.now)
- users.create!(
- name: name,
- email: email,
- username: name,
- projects_limit: 0,
- user_type: user_type,
- confirmed_at: confirmed_at
- )
- end
-end
diff --git a/spec/migrations/20210112143418_remove_duplicate_services2_spec.rb b/spec/migrations/20210112143418_remove_duplicate_services2_spec.rb
index 289416c22cf..b8dc4d7c8ae 100644
--- a/spec/migrations/20210112143418_remove_duplicate_services2_spec.rb
+++ b/spec/migrations/20210112143418_remove_duplicate_services2_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('remove_duplicate_services2')
+require_migration!
RSpec.describe RemoveDuplicateServices2 do
let_it_be(:namespaces) { table(:namespaces) }
diff --git a/spec/migrations/20210119122354_alter_vsa_issue_first_mentioned_in_commit_value_spec.rb b/spec/migrations/20210119122354_alter_vsa_issue_first_mentioned_in_commit_value_spec.rb
index 469dbb4f946..e07b5a48909 100644
--- a/spec/migrations/20210119122354_alter_vsa_issue_first_mentioned_in_commit_value_spec.rb
+++ b/spec/migrations/20210119122354_alter_vsa_issue_first_mentioned_in_commit_value_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('alter_vsa_issue_first_mentioned_in_commit_value')
+require_migration!
RSpec.describe AlterVsaIssueFirstMentionedInCommitValue, schema: 20210114033715 do
let(:group_stages) { table(:analytics_cycle_analytics_group_stages) }
diff --git a/spec/migrations/20210205174154_remove_bad_dependency_proxy_manifests_spec.rb b/spec/migrations/20210205174154_remove_bad_dependency_proxy_manifests_spec.rb
index cb48df20d58..97438062458 100644
--- a/spec/migrations/20210205174154_remove_bad_dependency_proxy_manifests_spec.rb
+++ b/spec/migrations/20210205174154_remove_bad_dependency_proxy_manifests_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('remove_bad_dependency_proxy_manifests')
+require_migration!
RSpec.describe RemoveBadDependencyProxyManifests, schema: 20210128140157 do
let_it_be(:namespaces) { table(:namespaces) }
diff --git a/spec/migrations/20210210093901_backfill_updated_at_after_repository_storage_move_spec.rb b/spec/migrations/20210210093901_backfill_updated_at_after_repository_storage_move_spec.rb
index 1932bc00cee..4a31d36e2bc 100644
--- a/spec/migrations/20210210093901_backfill_updated_at_after_repository_storage_move_spec.rb
+++ b/spec/migrations/20210210093901_backfill_updated_at_after_repository_storage_move_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('backfill_updated_at_after_repository_storage_move')
+require_migration!
RSpec.describe BackfillUpdatedAtAfterRepositoryStorageMove, :sidekiq do
let_it_be(:projects) { table(:projects) }
diff --git a/spec/migrations/20210218040814_add_environment_scope_to_group_variables_spec.rb b/spec/migrations/20210218040814_add_environment_scope_to_group_variables_spec.rb
index e525101f3a0..039ce53cac4 100644
--- a/spec/migrations/20210218040814_add_environment_scope_to_group_variables_spec.rb
+++ b/spec/migrations/20210218040814_add_environment_scope_to_group_variables_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('add_environment_scope_to_group_variables')
+require_migration!
RSpec.describe AddEnvironmentScopeToGroupVariables do
let(:migration) { described_class.new }
diff --git a/spec/migrations/20210226141517_dedup_issue_metrics_spec.rb b/spec/migrations/20210226141517_dedup_issue_metrics_spec.rb
index 6068df85e2e..1b57bf0431f 100644
--- a/spec/migrations/20210226141517_dedup_issue_metrics_spec.rb
+++ b/spec/migrations/20210226141517_dedup_issue_metrics_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('dedup_issue_metrics')
+require_migration!
RSpec.describe DedupIssueMetrics, :migration, schema: 20210205104425 do
let(:namespaces) { table(:namespaces) }
diff --git a/spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb b/spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb
index 94ed2320c50..1f18f7e581a 100644
--- a/spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb
+++ b/spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('backfill_total_tuple_count_for_batched_migrations')
+require_migration!
RSpec.describe BackfillTotalTupleCountForBatchedMigrations, :migration, schema: 20210406140057 do
let_it_be(:table_name) { 'projects' }
diff --git a/spec/migrations/20210413132500_reschedule_artifact_expiry_backfill_again_spec.rb b/spec/migrations/20210413132500_reschedule_artifact_expiry_backfill_again_spec.rb
index 78b6a71c609..e1dc7487222 100644
--- a/spec/migrations/20210413132500_reschedule_artifact_expiry_backfill_again_spec.rb
+++ b/spec/migrations/20210413132500_reschedule_artifact_expiry_backfill_again_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('reschedule_artifact_expiry_backfill_again')
+require_migration!
RSpec.describe RescheduleArtifactExpiryBackfillAgain, :migration do
let(:migration_class) { Gitlab::BackgroundMigration::BackfillArtifactExpiryDate }
diff --git a/spec/migrations/20210421163509_schedule_update_jira_tracker_data_deployment_type_based_on_url_spec.rb b/spec/migrations/20210421163509_schedule_update_jira_tracker_data_deployment_type_based_on_url_spec.rb
index ea0a16212dd..9a59c739ecd 100644
--- a/spec/migrations/20210421163509_schedule_update_jira_tracker_data_deployment_type_based_on_url_spec.rb
+++ b/spec/migrations/20210421163509_schedule_update_jira_tracker_data_deployment_type_based_on_url_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('schedule_update_jira_tracker_data_deployment_type_based_on_url')
+require_migration!
RSpec.describe ScheduleUpdateJiraTrackerDataDeploymentTypeBasedOnUrl, :migration do
let(:services_table) { table(:services) }
diff --git a/spec/migrations/20210423160427_schedule_drop_invalid_vulnerabilities_spec.rb b/spec/migrations/20210423160427_schedule_drop_invalid_vulnerabilities_spec.rb
index 3b462c884c4..faf440eb117 100644
--- a/spec/migrations/20210423160427_schedule_drop_invalid_vulnerabilities_spec.rb
+++ b/spec/migrations/20210423160427_schedule_drop_invalid_vulnerabilities_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('schedule_drop_invalid_vulnerabilities')
+require_migration!
RSpec.describe ScheduleDropInvalidVulnerabilities, :migration do
let_it_be(:namespace) { table(:namespaces).create!(name: 'user', path: 'user') }
diff --git a/spec/migrations/20210430134202_copy_adoption_snapshot_namespace_spec.rb b/spec/migrations/20210430134202_copy_adoption_snapshot_namespace_spec.rb
index 03ce0a430e5..598da495195 100644
--- a/spec/migrations/20210430134202_copy_adoption_snapshot_namespace_spec.rb
+++ b/spec/migrations/20210430134202_copy_adoption_snapshot_namespace_spec.rb
@@ -2,7 +2,7 @@
#
require 'spec_helper'
-require_migration!('copy_adoption_snapshot_namespace')
+require_migration!
RSpec.describe CopyAdoptionSnapshotNamespace, :migration, schema: 20210430124630 do
let(:namespaces_table) { table(:namespaces) }
diff --git a/spec/migrations/20210430135954_copy_adoption_segments_namespace_spec.rb b/spec/migrations/20210430135954_copy_adoption_segments_namespace_spec.rb
index abdfd03f97e..25dfaa2e314 100644
--- a/spec/migrations/20210430135954_copy_adoption_segments_namespace_spec.rb
+++ b/spec/migrations/20210430135954_copy_adoption_segments_namespace_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('copy_adoption_segments_namespace')
+require_migration!
RSpec.describe CopyAdoptionSegmentsNamespace, :migration do
let(:namespaces_table) { table(:namespaces) }
diff --git a/spec/migrations/20210503105845_add_project_value_stream_id_to_project_stages_spec.rb b/spec/migrations/20210503105845_add_project_value_stream_id_to_project_stages_spec.rb
index 4969d82d183..187b9115ba7 100644
--- a/spec/migrations/20210503105845_add_project_value_stream_id_to_project_stages_spec.rb
+++ b/spec/migrations/20210503105845_add_project_value_stream_id_to_project_stages_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('add_project_value_stream_id_to_project_stages')
+require_migration!
RSpec.describe AddProjectValueStreamIdToProjectStages, schema: 20210503105022 do
let(:stages) { table(:analytics_cycle_analytics_project_stages) }
diff --git a/spec/migrations/20210511142748_schedule_drop_invalid_vulnerabilities2_spec.rb b/spec/migrations/20210511142748_schedule_drop_invalid_vulnerabilities2_spec.rb
index 969a2e58947..dd557c833f3 100644
--- a/spec/migrations/20210511142748_schedule_drop_invalid_vulnerabilities2_spec.rb
+++ b/spec/migrations/20210511142748_schedule_drop_invalid_vulnerabilities2_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('schedule_drop_invalid_vulnerabilities2')
+require_migration!
RSpec.describe ScheduleDropInvalidVulnerabilities2, :migration do
let_it_be(:background_migration_jobs) { table(:background_migration_jobs) }
diff --git a/spec/migrations/20210514063252_schedule_cleanup_orphaned_lfs_objects_projects_spec.rb b/spec/migrations/20210514063252_schedule_cleanup_orphaned_lfs_objects_projects_spec.rb
index b7524ee0bff..4ac4af19eb9 100644
--- a/spec/migrations/20210514063252_schedule_cleanup_orphaned_lfs_objects_projects_spec.rb
+++ b/spec/migrations/20210514063252_schedule_cleanup_orphaned_lfs_objects_projects_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('schedule_cleanup_orphaned_lfs_objects_projects')
+require_migration!
RSpec.describe ScheduleCleanupOrphanedLfsObjectsProjects, schema: 20210511165250 do
let(:lfs_objects_projects) { table(:lfs_objects_projects) }
diff --git a/spec/migrations/20210601073400_fix_total_stage_in_vsa_spec.rb b/spec/migrations/20210601073400_fix_total_stage_in_vsa_spec.rb
index 36d85d1f745..fa4b747aaed 100644
--- a/spec/migrations/20210601073400_fix_total_stage_in_vsa_spec.rb
+++ b/spec/migrations/20210601073400_fix_total_stage_in_vsa_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('fix_total_stage_in_vsa')
+require_migration!
RSpec.describe FixTotalStageInVsa, :migration, schema: 20210518001450 do
let(:namespaces) { table(:namespaces) }
diff --git a/spec/migrations/20210601080039_group_protected_environments_add_index_and_constraint_spec.rb b/spec/migrations/20210601080039_group_protected_environments_add_index_and_constraint_spec.rb
index d3154596b26..8d45f571969 100644
--- a/spec/migrations/20210601080039_group_protected_environments_add_index_and_constraint_spec.rb
+++ b/spec/migrations/20210601080039_group_protected_environments_add_index_and_constraint_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('group_protected_environments_add_index_and_constraint')
+require_migration!
RSpec.describe GroupProtectedEnvironmentsAddIndexAndConstraint do
let(:migration) { described_class.new }
diff --git a/spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb b/spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb
index c457be79834..14aa4fe8da7 100644
--- a/spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb
+++ b/spec/migrations/20210603222333_remove_builds_email_service_from_services_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('remove_builds_email_service_from_services')
+require_migration!
RSpec.describe RemoveBuildsEmailServiceFromServices do
let(:namespaces) { table(:namespaces) }
diff --git a/spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb b/spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb
index 4f621d0670c..17599e75947 100644
--- a/spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb
+++ b/spec/migrations/20210610153556_delete_legacy_operations_feature_flags_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('delete_legacy_operations_feature_flags')
+require_migration!
RSpec.describe DeleteLegacyOperationsFeatureFlags do
let(:namespace) { table(:namespaces).create!(name: 'foo', path: 'bar') }
diff --git a/spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb b/spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb
index fd664d99f06..d35184e78a8 100644
--- a/spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb
+++ b/spec/migrations/2021061716138_cascade_delete_freeze_periods_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('cascade_delete_freeze_periods')
+require_migration!
RSpec.describe CascadeDeleteFreezePeriods do
let(:namespace) { table(:namespaces).create!(name: 'deploy_freeze', path: 'deploy_freeze') }
diff --git a/spec/migrations/20210708130419_reschedule_merge_request_diff_users_background_migration_spec.rb b/spec/migrations/20210708130419_reschedule_merge_request_diff_users_background_migration_spec.rb
index 9cc454662f9..7a281611650 100644
--- a/spec/migrations/20210708130419_reschedule_merge_request_diff_users_background_migration_spec.rb
+++ b/spec/migrations/20210708130419_reschedule_merge_request_diff_users_background_migration_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration! 'reschedule_merge_request_diff_users_background_migration'
+require_migration!
RSpec.describe RescheduleMergeRequestDiffUsersBackgroundMigration, :migration do
let(:migration) { described_class.new }
diff --git a/spec/migrations/20210722042939_update_issuable_slas_where_issue_closed_spec.rb b/spec/migrations/20210722042939_update_issuable_slas_where_issue_closed_spec.rb
index a0aae00776d..63802acceb5 100644
--- a/spec/migrations/20210722042939_update_issuable_slas_where_issue_closed_spec.rb
+++ b/spec/migrations/20210722042939_update_issuable_slas_where_issue_closed_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('update_issuable_slas_where_issue_closed')
+require_migration!
RSpec.describe UpdateIssuableSlasWhereIssueClosed, :migration do
let(:namespaces) { table(:namespaces) }
diff --git a/spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb b/spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb
index 130ad45ffc1..94af2bb1e9a 100644
--- a/spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb
+++ b/spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('operations_feature_flags_correct_flexible_rollout_values')
+require_migration!
RSpec.describe OperationsFeatureFlagsCorrectFlexibleRolloutValues, :migration do
let_it_be(:strategies) { table(:operations_strategies) }
diff --git a/spec/migrations/20210804150320_create_base_work_item_types_spec.rb b/spec/migrations/20210804150320_create_base_work_item_types_spec.rb
index 9ba29637e00..34ea7f53f51 100644
--- a/spec/migrations/20210804150320_create_base_work_item_types_spec.rb
+++ b/spec/migrations/20210804150320_create_base_work_item_types_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('create_base_work_item_types')
+require_migration!
RSpec.describe CreateBaseWorkItemTypes, :migration do
let!(:work_item_types) { table(:work_item_types) }
diff --git a/spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb b/spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb
index 819120d43ef..0b2f76baf1a 100644
--- a/spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb
+++ b/spec/migrations/20210805192450_update_trial_plans_ci_daily_pipeline_schedule_triggers_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-require_migration!('update_trial_plans_ci_daily_pipeline_schedule_triggers')
+require_migration!
RSpec.describe UpdateTrialPlansCiDailyPipelineScheduleTriggers, :migration do
let!(:plans) { table(:plans) }
diff --git a/spec/migrations/20210811122206_update_external_project_bots_spec.rb b/spec/migrations/20210811122206_update_external_project_bots_spec.rb
index a9c7b485cc6..365fb8e3218 100644
--- a/spec/migrations/20210811122206_update_external_project_bots_spec.rb
+++ b/spec/migrations/20210811122206_update_external_project_bots_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('update_external_project_bots')
+require_migration!
RSpec.describe UpdateExternalProjectBots, :migration do
def create_user(**extra_options)
diff --git a/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb b/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb
index d87f952b5da..29f554a003b 100644
--- a/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb
+++ b/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('backfill_projects_with_coverage')
+require_migration!
RSpec.describe BackfillProjectsWithCoverage do
let(:projects) { table(:projects) }
diff --git a/spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb b/spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb
index b1751216732..4ad4bea058b 100644
--- a/spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb
+++ b/spec/migrations/20210819145000_drop_temporary_columns_and_triggers_for_ci_builds_runner_session_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_temporary_columns_and_triggers_for_ci_builds_runner_session')
+require_migration!
RSpec.describe DropTemporaryColumnsAndTriggersForCiBuildsRunnerSession, :migration do
let(:ci_builds_runner_session_table) { table(:ci_builds_runner_session) }
diff --git a/spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb b/spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb
index c23110750c3..3c8c55ccb80 100644
--- a/spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb
+++ b/spec/migrations/20210831203408_upsert_base_work_item_types_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('upsert_base_work_item_types')
+require_migration!
RSpec.describe UpsertBaseWorkItemTypes, :migration do
let!(:work_item_types) { table(:work_item_types) }
diff --git a/spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb b/spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb
index 1b35982c41d..4ec3c5b7211 100644
--- a/spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb
+++ b/spec/migrations/20210902144144_drop_temporary_columns_and_triggers_for_ci_build_needs_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_temporary_columns_and_triggers_for_ci_build_needs')
+require_migration!
RSpec.describe DropTemporaryColumnsAndTriggersForCiBuildNeeds do
let(:ci_build_needs_table) { table(:ci_build_needs) }
diff --git a/spec/migrations/20210906100316_drop_temporary_columns_and_triggers_for_ci_build_trace_chunks_spec.rb b/spec/migrations/20210906100316_drop_temporary_columns_and_triggers_for_ci_build_trace_chunks_spec.rb
index 8d46ba7eb58..f1408e4ecab 100644
--- a/spec/migrations/20210906100316_drop_temporary_columns_and_triggers_for_ci_build_trace_chunks_spec.rb
+++ b/spec/migrations/20210906100316_drop_temporary_columns_and_triggers_for_ci_build_trace_chunks_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_temporary_columns_and_triggers_for_ci_build_trace_chunks')
+require_migration!
RSpec.describe DropTemporaryColumnsAndTriggersForCiBuildTraceChunks do
let(:ci_build_trace_chunks_table) { table(:ci_build_trace_chunks) }
diff --git a/spec/migrations/20210906130643_drop_temporary_columns_and_triggers_for_taggings_spec.rb b/spec/migrations/20210906130643_drop_temporary_columns_and_triggers_for_taggings_spec.rb
index 2e7ce733373..e4385e501b2 100644
--- a/spec/migrations/20210906130643_drop_temporary_columns_and_triggers_for_taggings_spec.rb
+++ b/spec/migrations/20210906130643_drop_temporary_columns_and_triggers_for_taggings_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_temporary_columns_and_triggers_for_taggings')
+require_migration!
RSpec.describe DropTemporaryColumnsAndTriggersForTaggings do
let(:taggings_table) { table(:taggings) }
diff --git a/spec/migrations/20210907013944_cleanup_bigint_conversion_for_ci_builds_metadata_spec.rb b/spec/migrations/20210907013944_cleanup_bigint_conversion_for_ci_builds_metadata_spec.rb
index ece5ed8251d..194832fbc43 100644
--- a/spec/migrations/20210907013944_cleanup_bigint_conversion_for_ci_builds_metadata_spec.rb
+++ b/spec/migrations/20210907013944_cleanup_bigint_conversion_for_ci_builds_metadata_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('cleanup_bigint_conversion_for_ci_builds_metadata')
+require_migration!
RSpec.describe CleanupBigintConversionForCiBuildsMetadata do
let(:ci_builds_metadata) { table(:ci_builds_metadata) }
diff --git a/spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb b/spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb
index 362b4be1bc6..c0f56da7b4f 100644
--- a/spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb
+++ b/spec/migrations/20210907211557_finalize_ci_builds_bigint_conversion_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('finalize_ci_builds_bigint_conversion')
+require_migration!
RSpec.describe FinalizeCiBuildsBigintConversion, :migration, schema: 20210907182359 do
context 'with an unexpected FK fk_3f0c88d7dc' do
diff --git a/spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb b/spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb
index 46a6d8d92ec..c90eabbe4eb 100644
--- a/spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb
+++ b/spec/migrations/20210910194952_update_report_type_for_existing_approval_project_rules_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('update_report_type_for_existing_approval_project_rules')
+require_migration!
RSpec.describe UpdateReportTypeForExistingApprovalProjectRules, :migration do
using RSpec::Parameterized::TableSyntax
diff --git a/spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb b/spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb
index 0d0f6a3df67..2b755dfe11c 100644
--- a/spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb
+++ b/spec/migrations/20210914095310_cleanup_orphan_project_access_tokens_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('cleanup_orphan_project_access_tokens')
+require_migration!
RSpec.describe CleanupOrphanProjectAccessTokens, :migration do
def create_user(**extra_options)
diff --git a/spec/migrations/20210915022415_cleanup_bigint_conversion_for_ci_builds_spec.rb b/spec/migrations/20210915022415_cleanup_bigint_conversion_for_ci_builds_spec.rb
index ee71322433d..cedc62a6565 100644
--- a/spec/migrations/20210915022415_cleanup_bigint_conversion_for_ci_builds_spec.rb
+++ b/spec/migrations/20210915022415_cleanup_bigint_conversion_for_ci_builds_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('cleanup_bigint_conversion_for_ci_builds')
+require_migration!
RSpec.describe CleanupBigintConversionForCiBuilds do
let(:ci_builds) { table(:ci_builds) }
diff --git a/spec/migrations/20210922021816_drop_int4_columns_for_ci_job_artifacts_spec.rb b/spec/migrations/20210922021816_drop_int4_columns_for_ci_job_artifacts_spec.rb
index cf326cf0c0a..a6eede8a8f1 100644
--- a/spec/migrations/20210922021816_drop_int4_columns_for_ci_job_artifacts_spec.rb
+++ b/spec/migrations/20210922021816_drop_int4_columns_for_ci_job_artifacts_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_int4_columns_for_ci_job_artifacts')
+require_migration!
RSpec.describe DropInt4ColumnsForCiJobArtifacts do
let(:ci_job_artifacts) { table(:ci_job_artifacts) }
diff --git a/spec/migrations/20210922025631_drop_int4_column_for_ci_sources_pipelines_spec.rb b/spec/migrations/20210922025631_drop_int4_column_for_ci_sources_pipelines_spec.rb
index 00b922ee4f8..730c9ade1fb 100644
--- a/spec/migrations/20210922025631_drop_int4_column_for_ci_sources_pipelines_spec.rb
+++ b/spec/migrations/20210922025631_drop_int4_column_for_ci_sources_pipelines_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_int4_column_for_ci_sources_pipelines')
+require_migration!
RSpec.describe DropInt4ColumnForCiSourcesPipelines do
let(:ci_sources_pipelines) { table(:ci_sources_pipelines) }
diff --git a/spec/migrations/20210922082019_drop_int4_column_for_events_spec.rb b/spec/migrations/20210922082019_drop_int4_column_for_events_spec.rb
index 412556fc283..e460612a7d5 100644
--- a/spec/migrations/20210922082019_drop_int4_column_for_events_spec.rb
+++ b/spec/migrations/20210922082019_drop_int4_column_for_events_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_int4_column_for_events')
+require_migration!
RSpec.describe DropInt4ColumnForEvents do
let(:events) { table(:events) }
diff --git a/spec/migrations/20210922091402_drop_int4_column_for_push_event_payloads_spec.rb b/spec/migrations/20210922091402_drop_int4_column_for_push_event_payloads_spec.rb
index 2b286e3e5e0..8c89cd19f7f 100644
--- a/spec/migrations/20210922091402_drop_int4_column_for_push_event_payloads_spec.rb
+++ b/spec/migrations/20210922091402_drop_int4_column_for_push_event_payloads_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('drop_int4_column_for_push_event_payloads')
+require_migration!
RSpec.describe DropInt4ColumnForPushEventPayloads do
let(:push_event_payloads) { table(:push_event_payloads) }
diff --git a/spec/migrations/20211006060436_schedule_populate_topics_total_projects_count_cache_spec.rb b/spec/migrations/20211006060436_schedule_populate_topics_total_projects_count_cache_spec.rb
index d07d9a71b06..09ce0858b12 100644
--- a/spec/migrations/20211006060436_schedule_populate_topics_total_projects_count_cache_spec.rb
+++ b/spec/migrations/20211006060436_schedule_populate_topics_total_projects_count_cache_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('schedule_populate_topics_total_projects_count_cache')
+require_migration!
RSpec.describe SchedulePopulateTopicsTotalProjectsCountCache do
let(:topics) { table(:topics) }
diff --git a/spec/migrations/20211012134316_clean_up_migrate_merge_request_diff_commit_users_spec.rb b/spec/migrations/20211012134316_clean_up_migrate_merge_request_diff_commit_users_spec.rb
new file mode 100644
index 00000000000..910e6d1d91b
--- /dev/null
+++ b/spec/migrations/20211012134316_clean_up_migrate_merge_request_diff_commit_users_spec.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration! 'clean_up_migrate_merge_request_diff_commit_users'
+
+RSpec.describe CleanUpMigrateMergeRequestDiffCommitUsers, :migration do
+ describe '#up' do
+ context 'when there are pending jobs' do
+ it 'processes the jobs immediately' do
+ Gitlab::Database::BackgroundMigrationJob.create!(
+ class_name: 'MigrateMergeRequestDiffCommitUsers',
+ status: :pending,
+ arguments: [10, 20]
+ )
+
+ spy = Gitlab::BackgroundMigration::MigrateMergeRequestDiffCommitUsers
+ migration = described_class.new
+
+ allow(Gitlab::BackgroundMigration::MigrateMergeRequestDiffCommitUsers)
+ .to receive(:new)
+ .and_return(spy)
+
+ expect(migration).to receive(:say)
+ expect(spy).to receive(:perform).with(10, 20)
+
+ migration.up
+ end
+ end
+
+ context 'when all jobs are completed' do
+ it 'does nothing' do
+ Gitlab::Database::BackgroundMigrationJob.create!(
+ class_name: 'MigrateMergeRequestDiffCommitUsers',
+ status: :succeeded,
+ arguments: [10, 20]
+ )
+
+ migration = described_class.new
+
+ expect(migration).not_to receive(:say)
+ expect(Gitlab::BackgroundMigration::MigrateMergeRequestDiffCommitUsers)
+ .not_to receive(:new)
+
+ migration.up
+ end
+ end
+ end
+end
diff --git a/spec/migrations/20201112130710_schedule_remove_duplicate_vulnerabilities_findings_spec.rb b/spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb
index 92a716c355b..95c5be2fc30 100644
--- a/spec/migrations/20201112130710_schedule_remove_duplicate_vulnerabilities_findings_spec.rb
+++ b/spec/migrations/20211018152654_schedule_remove_duplicate_vulnerabilities_findings3_spec.rb
@@ -1,14 +1,14 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('schedule_remove_duplicate_vulnerabilities_findings')
+require_migration!('schedule_remove_duplicate_vulnerabilities_findings3')
-RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings, :migration do
+RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings3, :migration do
let(:namespace) { table(:namespaces).create!(name: 'user', path: 'user') }
let(:users) { table(:users) }
let(:user) { create_user! }
- let(:project) { table(:projects).create!(id: 123, namespace_id: namespace.id) }
+ let(:project) { table(:projects).create!(id: 14219619, namespace_id: namespace.id) }
let(:scanners) { table(:vulnerability_scanners) }
- let!(:scanner) { scanners.create!(project_id: project.id, external_id: 'test 1', name: 'test scanner 1') }
+ let!(:scanner1) { scanners.create!(project_id: project.id, external_id: 'test 1', name: 'test scanner 1') }
let!(:scanner2) { scanners.create!(project_id: project.id, external_id: 'test 2', name: 'test scanner 2') }
let!(:scanner3) { scanners.create!(project_id: project.id, external_id: 'test 3', name: 'test scanner 3') }
let!(:unrelated_scanner) { scanners.create!(project_id: project.id, external_id: 'unreleated_scanner', name: 'unrelated scanner') }
@@ -17,43 +17,68 @@ RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings, :migration do
let(:vulnerability_identifiers) { table(:vulnerability_identifiers) }
let(:vulnerability_identifier) do
vulnerability_identifiers.create!(
+ id: 1244459,
project_id: project.id,
external_type: 'vulnerability-identifier',
external_id: 'vulnerability-identifier',
- fingerprint: '7e394d1b1eb461a7406d7b1e08f057a1cf11287a',
+ fingerprint: '0a203e8cd5260a1948edbedc76c7cb91ad6a2e45',
name: 'vulnerability identifier')
end
- let!(:first_finding) do
+ let!(:vulnerability_for_first_duplicate) do
+ create_vulnerability!(
+ project_id: project.id,
+ author_id: user.id
+ )
+ end
+
+ let!(:first_finding_duplicate) do
create_finding!(
- uuid: "test1",
- vulnerability_id: nil,
+ id: 5606961,
+ uuid: "bd95c085-71aa-51d7-9bb6-08ae669c262e",
+ vulnerability_id: vulnerability_for_first_duplicate.id,
report_type: 0,
- location_fingerprint: '2bda3014914481791847d8eca38d1a8d13b6ad76',
+ location_fingerprint: '00049d5119c2cb3bfb3d1ee1f6e031fe925aed75',
primary_identifier_id: vulnerability_identifier.id,
- scanner_id: scanner.id,
+ scanner_id: scanner1.id,
project_id: project.id
)
end
- let!(:first_duplicate) do
+ let!(:vulnerability_for_second_duplicate) do
+ create_vulnerability!(
+ project_id: project.id,
+ author_id: user.id
+ )
+ end
+
+ let!(:second_finding_duplicate) do
create_finding!(
- uuid: "test2",
- vulnerability_id: nil,
+ id: 8765432,
+ uuid: "5b714f58-1176-5b26-8fd5-e11dfcb031b5",
+ vulnerability_id: vulnerability_for_second_duplicate.id,
report_type: 0,
- location_fingerprint: '2bda3014914481791847d8eca38d1a8d13b6ad76',
+ location_fingerprint: '00049d5119c2cb3bfb3d1ee1f6e031fe925aed75',
primary_identifier_id: vulnerability_identifier.id,
scanner_id: scanner2.id,
project_id: project.id
)
end
- let!(:second_duplicate) do
+ let!(:vulnerability_for_third_duplicate) do
+ create_vulnerability!(
+ project_id: project.id,
+ author_id: user.id
+ )
+ end
+
+ let!(:third_finding_duplicate) do
create_finding!(
- uuid: "test3",
- vulnerability_id: nil,
+ id: 8832995,
+ uuid: "cfe435fa-b25b-5199-a56d-7b007cc9e2d4",
+ vulnerability_id: vulnerability_for_third_duplicate.id,
report_type: 0,
- location_fingerprint: '2bda3014914481791847d8eca38d1a8d13b6ad76',
+ location_fingerprint: '00049d5119c2cb3bfb3d1ee1f6e031fe925aed75',
primary_identifier_id: vulnerability_identifier.id,
scanner_id: scanner3.id,
project_id: project.id
@@ -62,6 +87,7 @@ RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings, :migration do
let!(:unrelated_finding) do
create_finding!(
+ id: 9999999,
uuid: "unreleated_finding",
vulnerability_id: nil,
report_type: 1,
@@ -84,9 +110,9 @@ RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings, :migration do
migrate!
expect(BackgroundMigrationWorker.jobs.size).to eq(4)
- expect(described_class::MIGRATION).to be_scheduled_migration(first_finding.id, first_finding.id)
- expect(described_class::MIGRATION).to be_scheduled_migration(first_duplicate.id, first_duplicate.id)
- expect(described_class::MIGRATION).to be_scheduled_migration(second_duplicate.id, second_duplicate.id)
+ expect(described_class::MIGRATION).to be_scheduled_migration(first_finding_duplicate.id, first_finding_duplicate.id)
+ expect(described_class::MIGRATION).to be_scheduled_migration(second_finding_duplicate.id, second_finding_duplicate.id)
+ expect(described_class::MIGRATION).to be_scheduled_migration(third_finding_duplicate.id, third_finding_duplicate.id)
expect(described_class::MIGRATION).to be_scheduled_migration(unrelated_finding.id, unrelated_finding.id)
end
@@ -105,11 +131,13 @@ RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings, :migration do
# rubocop:disable Metrics/ParameterLists
def create_finding!(
+ id: nil,
vulnerability_id:, project_id:, scanner_id:, primary_identifier_id:,
name: "test", severity: 7, confidence: 7, report_type: 0,
project_fingerprint: '123qweasdzxc', location_fingerprint: 'test',
metadata_version: 'test', raw_metadata: 'test', uuid: 'test')
- vulnerability_findings.create!(
+ vulnerability_findings.create!({
+ id: id,
vulnerability_id: vulnerability_id,
project_id: project_id,
name: name,
@@ -123,11 +151,11 @@ RSpec.describe ScheduleRemoveDuplicateVulnerabilitiesFindings, :migration do
metadata_version: metadata_version,
raw_metadata: raw_metadata,
uuid: uuid
- )
+ }.compact)
end
# rubocop:enable Metrics/ParameterLists
- def create_user!(name: "Example User", email: "user@example.com", user_type: nil, created_at: Time.now, confirmed_at: Time.now)
+ def create_user!(name: "Example User", email: "user@example.com", user_type: nil, created_at: Time.zone.now, confirmed_at: Time.zone.now)
users.create!(
name: name,
email: email,
diff --git a/spec/migrations/20211028155449_schedule_fix_merge_request_diff_commit_users_migration_spec.rb b/spec/migrations/20211028155449_schedule_fix_merge_request_diff_commit_users_migration_spec.rb
new file mode 100644
index 00000000000..6511f554436
--- /dev/null
+++ b/spec/migrations/20211028155449_schedule_fix_merge_request_diff_commit_users_migration_spec.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration! 'schedule_fix_merge_request_diff_commit_users_migration'
+
+RSpec.describe ScheduleFixMergeRequestDiffCommitUsersMigration, :migration do
+ let(:migration) { described_class.new }
+ let(:namespaces) { table(:namespaces) }
+ let(:projects) { table(:projects) }
+ let(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
+
+ describe '#up' do
+ it 'does nothing when there are no projects to correct' do
+ migration.up
+
+ expect(Gitlab::Database::BackgroundMigrationJob.count).to be_zero
+ end
+
+ it 'schedules imported projects created after July' do
+ project = projects.create!(
+ namespace_id: namespace.id,
+ import_type: 'gitlab_project',
+ created_at: '2021-08-01'
+ )
+
+ expect(migration)
+ .to receive(:migrate_in)
+ .with(2.minutes, 'FixMergeRequestDiffCommitUsers', [project.id])
+
+ migration.up
+
+ expect(Gitlab::Database::BackgroundMigrationJob.count).to eq(1)
+
+ job = Gitlab::Database::BackgroundMigrationJob.first
+
+ expect(job.class_name).to eq('FixMergeRequestDiffCommitUsers')
+ expect(job.arguments).to eq([project.id])
+ end
+
+ it 'ignores projects imported before July' do
+ projects.create!(
+ namespace_id: namespace.id,
+ import_type: 'gitlab_project',
+ created_at: '2020-08-01'
+ )
+
+ migration.up
+
+ expect(Gitlab::Database::BackgroundMigrationJob.count).to be_zero
+ end
+
+ it 'ignores projects that are not imported' do
+ projects.create!(
+ namespace_id: namespace.id,
+ created_at: '2021-08-01'
+ )
+
+ migration.up
+
+ expect(Gitlab::Database::BackgroundMigrationJob.count).to be_zero
+ end
+ end
+end
diff --git a/spec/migrations/add_default_value_stream_to_groups_with_group_stages_spec.rb b/spec/migrations/add_default_value_stream_to_groups_with_group_stages_spec.rb
deleted file mode 100644
index f21acbc56df..00000000000
--- a/spec/migrations/add_default_value_stream_to_groups_with_group_stages_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe AddDefaultValueStreamToGroupsWithGroupStages, schema: 20200624142207 do
- let(:groups) { table(:namespaces) }
- let(:group_stages) { table(:analytics_cycle_analytics_group_stages) }
- let(:value_streams) { table(:analytics_cycle_analytics_group_value_streams) }
-
- let!(:group) { groups.create!(name: 'test', path: 'path', type: 'Group') }
- let!(:group_stage) { group_stages.create!(name: 'test', group_id: group.id, start_event_identifier: 1, end_event_identifier: 2) }
-
- describe '#up' do
- it 'creates default value stream record for the group' do
- migrate!
-
- group_value_streams = value_streams.where(group_id: group.id)
- expect(group_value_streams.size).to eq(1)
-
- value_stream = group_value_streams.first
- expect(value_stream.name).to eq('default')
- end
-
- it 'migrates existing stages to the default value stream' do
- migrate!
-
- group_stage.reload
-
- value_stream = value_streams.find_by(group_id: group.id, name: 'default')
- expect(group_stage.group_value_stream_id).to eq(value_stream.id)
- end
- end
-
- describe '#down' do
- it 'sets the group_value_stream_id to nil' do
- described_class.new.down
-
- group_stage.reload
-
- expect(group_stage.group_value_stream_id).to be_nil
- end
- end
-end
diff --git a/spec/migrations/add_deploy_token_type_to_deploy_tokens_spec.rb b/spec/migrations/add_deploy_token_type_to_deploy_tokens_spec.rb
deleted file mode 100644
index f90bfcd313c..00000000000
--- a/spec/migrations/add_deploy_token_type_to_deploy_tokens_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe AddDeployTokenTypeToDeployTokens do
- let(:deploy_tokens) { table(:deploy_tokens) }
- let(:deploy_token) do
- deploy_tokens.create!(name: 'token_test',
- username: 'gitlab+deploy-token-1',
- token_encrypted: 'dr8rPXwM+Mbs2p3Bg1+gpnXqrnH/wu6vaHdcc7A3isPR67WB',
- read_repository: true,
- expires_at: Time.now + 1.year)
- end
-
- it 'updates the deploy_token_type column to 2' do
- expect(deploy_token).not_to respond_to(:deploy_token_type)
-
- migrate!
-
- deploy_token.reload
- expect(deploy_token.deploy_token_type).to eq(2)
- end
-end
diff --git a/spec/migrations/add_incident_settings_to_all_existing_projects_spec.rb b/spec/migrations/add_incident_settings_to_all_existing_projects_spec.rb
deleted file mode 100644
index 3e0bc64bb23..00000000000
--- a/spec/migrations/add_incident_settings_to_all_existing_projects_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe AddIncidentSettingsToAllExistingProjects, :migration do
- let(:project_incident_management_settings) { table(:project_incident_management_settings) }
- let(:labels) { table(:labels) }
- let(:label_links) { table(:label_links) }
- let(:issues) { table(:issues) }
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
-
- RSpec.shared_examples 'setting not added' do
- it 'does not add settings' do
- migrate!
-
- expect { migrate! }.not_to change { IncidentManagement::ProjectIncidentManagementSetting.count }
- end
- end
-
- RSpec.shared_examples 'project has no incident settings' do
- it 'has no settings' do
- migrate!
-
- expect(settings).to eq(nil)
- end
- end
-
- RSpec.shared_examples 'no change to incident settings' do
- it 'does not change existing settings' do
- migrate!
-
- expect(settings.create_issue).to eq(existing_create_issue)
- end
- end
-
- RSpec.shared_context 'with incident settings' do
- let(:existing_create_issue) { false }
- before do
- project_incident_management_settings.create!(
- project_id: project.id,
- create_issue: existing_create_issue
- )
- end
- end
-
- describe 'migrate!' do
- let(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:project) { projects.create!(namespace_id: namespace.id) }
- let(:settings) { project_incident_management_settings.find_by(project_id: project.id) }
-
- context 'when project does not have incident label' do
- context 'does not have incident settings' do
- include_examples 'setting not added'
- include_examples 'project has no incident settings'
- end
-
- context 'and has incident settings' do
- include_context 'with incident settings'
-
- include_examples 'setting not added'
- include_examples 'no change to incident settings'
- end
- end
-
- context 'when project has incident labels' do
- before do
- issue = issues.create!(project_id: project.id)
- incident_label_attrs = IncidentManagement::CreateIncidentLabelService::LABEL_PROPERTIES
- incident_label = labels.create!(project_id: project.id, **incident_label_attrs)
- label_links.create!(target_id: issue.id, label_id: incident_label.id, target_type: 'Issue')
- end
-
- context 'when project has incident settings' do
- include_context 'with incident settings'
-
- include_examples 'setting not added'
- include_examples 'no change to incident settings'
- end
-
- context 'does not have incident settings' do
- it 'adds incident settings with old defaults' do
- migrate!
-
- expect(settings.create_issue).to eq(true)
- expect(settings.send_email).to eq(false)
- expect(settings.issue_template_key).to eq(nil)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/add_open_source_plan_spec.rb b/spec/migrations/add_open_source_plan_spec.rb
new file mode 100644
index 00000000000..04b26662f82
--- /dev/null
+++ b/spec/migrations/add_open_source_plan_spec.rb
@@ -0,0 +1,86 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+require_migration!
+
+RSpec.describe AddOpenSourcePlan, :migration do
+ describe '#up' do
+ before do
+ allow(Gitlab).to receive(:dev_env_or_com?).and_return true
+ end
+
+ it 'creates 1 entry within the plans table' do
+ expect { migrate! }.to change { AddOpenSourcePlan::Plan.count }.by 1
+ expect(AddOpenSourcePlan::Plan.last.name).to eql('opensource')
+ end
+
+ it 'creates 1 entry for plan limits' do
+ expect { migrate! }.to change { AddOpenSourcePlan::PlanLimits.count }.by 1
+ end
+
+ context 'when the plan limits for gold and silver exists' do
+ before do
+ table(:plans).create!(id: 1, name: 'ultimate', title: 'Ultimate')
+ table(:plan_limits).create!(id: 1, plan_id: 1, storage_size_limit: 2000)
+ end
+
+ it 'duplicates the gold and silvers plan limits entries' do
+ migrate!
+
+ opensource_limits = AddOpenSourcePlan::Plan.find_by(name: 'opensource').limits
+ expect(opensource_limits.storage_size_limit).to be 2000
+ end
+ end
+
+ context 'when the instance is not SaaS' do
+ before do
+ allow(Gitlab).to receive(:dev_env_or_com?).and_return false
+ end
+
+ it 'does not create plans and plan limits and returns' do
+ expect { migrate! }.not_to change { AddOpenSourcePlan::Plan.count }
+ end
+ end
+ end
+
+ describe '#down' do
+ before do
+ table(:plans).create!(id: 3, name: 'other')
+ table(:plan_limits).create!(plan_id: 3)
+ end
+
+ context 'when the instance is SaaS' do
+ before do
+ allow(Gitlab).to receive(:dev_env_or_com?).and_return true
+ end
+
+ it 'removes the newly added opensource entry' do
+ migrate!
+
+ expect { described_class.new.down }.to change { AddOpenSourcePlan::Plan.count }.by(-1)
+ expect(AddOpenSourcePlan::Plan.find_by(name: 'opensource')).to be_nil
+
+ other_plan = AddOpenSourcePlan::Plan.find_by(name: 'other')
+ expect(other_plan).to be_persisted
+ expect(AddOpenSourcePlan::PlanLimits.count).to eq(1)
+ expect(AddOpenSourcePlan::PlanLimits.first.plan_id).to eq(other_plan.id)
+ end
+ end
+
+ context 'when the instance is not SaaS' do
+ before do
+ allow(Gitlab).to receive(:dev_env_or_com?).and_return false
+ table(:plans).create!(id: 1, name: 'opensource', title: 'Open Source Program')
+ table(:plan_limits).create!(id: 1, plan_id: 1)
+ end
+
+ it 'does not delete plans and plan limits and returns' do
+ migrate!
+
+ expect { described_class.new.down }.not_to change { AddOpenSourcePlan::Plan.count }
+ expect(AddOpenSourcePlan::PlanLimits.count).to eq(2)
+ end
+ end
+ end
+end
diff --git a/spec/migrations/add_partial_index_to_ci_builds_table_on_user_id_name_spec.rb b/spec/migrations/add_partial_index_to_ci_builds_table_on_user_id_name_spec.rb
deleted file mode 100644
index ab4d6f43797..00000000000
--- a/spec/migrations/add_partial_index_to_ci_builds_table_on_user_id_name_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe AddPartialIndexToCiBuildsTableOnUserIdName do
- let(:migration) { described_class.new }
-
- describe '#up' do
- it 'creates temporary partial index on type' do
- expect { migration.up }.to change { migration.index_exists?(:ci_builds, [:user_id, :name], name: described_class::INDEX_NAME) }.from(false).to(true)
- end
- end
-
- describe '#down' do
- it 'removes temporary partial index on type' do
- migration.up
-
- expect { migration.down }.to change { migration.index_exists?(:ci_builds, [:user_id, :name], name: described_class::INDEX_NAME) }.from(true).to(false)
- end
- end
-end
diff --git a/spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb b/spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb
deleted file mode 100644
index bc4c510fea3..00000000000
--- a/spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe AddRepositoryStoragesWeightedToApplicationSettings, :migration do
- let(:storages) { { "foo" => {}, "baz" => {} } }
- let(:application_settings) do
- table(:application_settings).tap do |klass|
- klass.class_eval do
- serialize :repository_storages
- end
- end
- end
-
- before do
- allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
- end
-
- let(:application_setting) { application_settings.create! }
- let(:repository_storages) { ["foo"] }
-
- it 'populates repository_storages_weighted properly' do
- application_setting.repository_storages = repository_storages
- application_setting.save!
-
- migrate!
-
- expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq({ "foo" => 100, "baz" => 0 })
- end
-end
diff --git a/spec/migrations/add_temporary_partial_index_on_project_id_to_services_spec.rb b/spec/migrations/add_temporary_partial_index_on_project_id_to_services_spec.rb
deleted file mode 100644
index dae0241b895..00000000000
--- a/spec/migrations/add_temporary_partial_index_on_project_id_to_services_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe AddTemporaryPartialIndexOnProjectIdToServices do
- let(:migration) { described_class.new }
-
- describe '#up' do
- it 'creates temporary partial index on type' do
- expect { migration.up }.to change { migration.index_exists?(:services, :project_id, name: described_class::INDEX_NAME) }.from(false).to(true)
- end
- end
-
- describe '#down' do
- it 'removes temporary partial index on type' do
- migration.up
-
- expect { migration.down }.to change { migration.index_exists?(:services, :project_id, name: described_class::INDEX_NAME) }.from(true).to(false)
- end
- end
-end
diff --git a/spec/migrations/backfill_imported_snippet_repositories_spec.rb b/spec/migrations/backfill_imported_snippet_repositories_spec.rb
deleted file mode 100644
index 7052433c66d..00000000000
--- a/spec/migrations/backfill_imported_snippet_repositories_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe BackfillImportedSnippetRepositories do
- let(:users) { table(:users) }
- let(:snippets) { table(:snippets) }
- let(:user) { users.create!(id: 1, email: 'user@example.com', projects_limit: 10, username: 'test', name: 'Test', state: 'active') }
-
- def create_snippet(id)
- params = {
- id: id,
- type: 'PersonalSnippet',
- author_id: user.id,
- file_name: 'foo',
- content: 'bar'
- }
-
- snippets.create!(params)
- end
-
- it 'correctly schedules background migrations' do
- create_snippet(1)
- create_snippet(2)
- create_snippet(3)
- create_snippet(5)
- create_snippet(7)
- create_snippet(8)
- create_snippet(10)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, 1, 3)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, 5, 5)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(6.minutes, 7, 8)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(8.minutes, 10, 10)
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(4)
- end
- end
- end
-end
diff --git a/spec/migrations/backfill_operations_feature_flags_iid_spec.rb b/spec/migrations/backfill_operations_feature_flags_iid_spec.rb
deleted file mode 100644
index 3c400840f98..00000000000
--- a/spec/migrations/backfill_operations_feature_flags_iid_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe BackfillOperationsFeatureFlagsIid do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:flags) { table(:operations_feature_flags) }
-
- def setup
- namespace = namespaces.create!(name: 'foo', path: 'foo')
- projects.create!(namespace_id: namespace.id)
- end
-
- it 'migrates successfully when there are no flags in the database' do
- setup
-
- disable_migrations_output { migrate! }
-
- expect(flags.count).to eq(0)
- end
-
- it 'migrates successfully with a row in the table in both FOSS and EE' do
- project = setup
- flags.create!(project_id: project.id, active: true, name: 'test_flag')
-
- disable_migrations_output { migrate! }
-
- expect(flags.count).to eq(1)
- end
-end
diff --git a/spec/migrations/backfill_snippet_repositories_spec.rb b/spec/migrations/backfill_snippet_repositories_spec.rb
deleted file mode 100644
index 64cfc9cc57b..00000000000
--- a/spec/migrations/backfill_snippet_repositories_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe BackfillSnippetRepositories do
- let(:users) { table(:users) }
- let(:snippets) { table(:snippets) }
- let(:user) { users.create!(id: 1, email: 'user@example.com', projects_limit: 10, username: 'test', name: 'Test', state: 'active') }
-
- def create_snippet(id)
- params = {
- id: id,
- type: 'PersonalSnippet',
- author_id: user.id,
- file_name: 'foo',
- content: 'bar'
- }
-
- snippets.create!(params)
- end
-
- it 'correctly schedules background migrations' do
- create_snippet(1)
- create_snippet(2)
- create_snippet(3)
-
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(3.minutes, 1, 2)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(6.minutes, 3, 3)
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
-end
diff --git a/spec/migrations/backfill_status_page_published_incidents_spec.rb b/spec/migrations/backfill_status_page_published_incidents_spec.rb
deleted file mode 100644
index fa4bb182362..00000000000
--- a/spec/migrations/backfill_status_page_published_incidents_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe BackfillStatusPagePublishedIncidents, :migration do
- subject(:migration) { described_class.new }
-
- describe '#up' do
- let(:projects) { table(:projects) }
- let(:status_page_settings) { table(:status_page_settings) }
- let(:issues) { table(:issues) }
- let(:incidents) { table(:status_page_published_incidents) }
-
- let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab') }
- let(:project_without_status_page) { projects.create!(namespace_id: namespace.id) }
- let(:enabled_project) { projects.create!(namespace_id: namespace.id) }
- let(:disabled_project) { projects.create!(namespace_id: namespace.id) }
-
- let!(:enabled_setting) { status_page_settings.create!(enabled: true, project_id: enabled_project.id, **status_page_setting_attrs) }
- let!(:disabled_setting) { status_page_settings.create!(enabled: false, project_id: disabled_project.id, **status_page_setting_attrs) }
-
- let!(:published_issue) { issues.create!(confidential: false, project_id: enabled_project.id) }
- let!(:nonpublished_issue_1) { issues.create!(confidential: true, project_id: enabled_project.id) }
- let!(:nonpublished_issue_2) { issues.create!(confidential: false, project_id: disabled_project.id) }
- let!(:nonpublished_issue_3) { issues.create!(confidential: false, project_id: project_without_status_page.id) }
-
- let(:current_time) { Time.current.change(usec: 0) }
- let(:status_page_setting_attrs) do
- {
- aws_s3_bucket_name: 'bucket',
- aws_region: 'region',
- aws_access_key: 'key',
- encrypted_aws_secret_key: 'abc123',
- encrypted_aws_secret_key_iv: 'abc123'
- }
- end
-
- it 'creates a StatusPage::PublishedIncident record for each published issue' do
- travel_to(current_time) do
- expect(incidents.all).to be_empty
-
- migrate!
-
- incident = incidents.first
-
- expect(incidents.count).to eq(1)
- expect(incident.issue_id).to eq(published_issue.id)
- expect(incident.created_at).to eq(current_time)
- expect(incident.updated_at).to eq(current_time)
- end
- end
- end
-end
diff --git a/spec/migrations/backfill_user_namespace_spec.rb b/spec/migrations/backfill_user_namespace_spec.rb
new file mode 100644
index 00000000000..094aec82e9c
--- /dev/null
+++ b/spec/migrations/backfill_user_namespace_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe BackfillUserNamespace do
+ let_it_be(:migration) { described_class::MIGRATION }
+
+ describe '#up' do
+ it 'schedules background jobs for each batch of namespaces' do
+ migrate!
+
+ expect(migration).to have_scheduled_batched_migration(
+ table_name: :namespaces,
+ column_name: :id,
+ interval: described_class::INTERVAL
+ )
+ end
+ end
+
+ describe '#down' do
+ it 'deletes all batched migration records' do
+ migrate!
+ schema_migrate_down!
+
+ expect(migration).not_to have_scheduled_batched_migration
+ end
+ end
+end
diff --git a/spec/migrations/cap_designs_filename_length_to_new_limit_spec.rb b/spec/migrations/cap_designs_filename_length_to_new_limit_spec.rb
deleted file mode 100644
index 702f2e6d9bd..00000000000
--- a/spec/migrations/cap_designs_filename_length_to_new_limit_spec.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe CapDesignsFilenameLengthToNewLimit, :migration, schema: 20200528125905 do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:issues) { table(:issues) }
- let(:designs) { table(:design_management_designs) }
-
- let(:filename_below_limit) { generate_filename(254) }
- let(:filename_at_limit) { generate_filename(255) }
- let(:filename_above_limit) { generate_filename(256) }
-
- let!(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:project) { projects.create!(name: 'gitlab', path: 'gitlab-org/gitlab', namespace_id: namespace.id) }
- let!(:issue) { issues.create!(description: 'issue', project_id: project.id) }
-
- def generate_filename(length, extension: '.png')
- name = 'a' * (length - extension.length)
-
- "#{name}#{extension}"
- end
-
- def create_design(filename)
- designs.create!(
- issue_id: issue.id,
- project_id: project.id,
- filename: filename
- )
- end
-
- it 'correctly sets filenames that are above the limit' do
- designs = [
- filename_below_limit,
- filename_at_limit,
- filename_above_limit
- ].map(&method(:create_design))
-
- migrate!
-
- designs.each(&:reload)
-
- expect(designs[0].filename).to eq(filename_below_limit)
- expect(designs[1].filename).to eq(filename_at_limit)
- expect(designs[2].filename).to eq([described_class::MODIFIED_NAME, designs[2].id, described_class::MODIFIED_EXTENSION].join)
- end
-
- it 'runs after filename limit has been set' do
- # This spec file uses the `schema:` keyword to run these tests
- # against a schema version before the one that sets the limit,
- # as otherwise we can't create the design data with filenames greater
- # than the limit.
- #
- # For this test, we migrate any skipped versions up to this migration.
- migration_context.migrate(20200602013901)
-
- create_design(filename_at_limit)
- expect { create_design(filename_above_limit) }.to raise_error(ActiveRecord::StatementInvalid)
- end
-end
diff --git a/spec/migrations/clean_grafana_url_spec.rb b/spec/migrations/clean_grafana_url_spec.rb
deleted file mode 100644
index 7a81eb3058b..00000000000
--- a/spec/migrations/clean_grafana_url_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe CleanGrafanaUrl do
- let(:application_settings_table) { table(:application_settings) }
-
- [
- 'javascript:alert(window.opener.document.location)',
- ' javascript:alert(window.opener.document.location)'
- ].each do |grafana_url|
- it "sets grafana_url back to its default value when grafana_url is '#{grafana_url}'" do
- application_settings = application_settings_table.create!(grafana_url: grafana_url)
-
- migrate!
-
- expect(application_settings.reload.grafana_url).to eq('/-/grafana')
- end
- end
-
- ['/-/grafana', '/some/relative/url', 'http://localhost:9000'].each do |grafana_url|
- it "does not modify grafana_url when grafana_url is '#{grafana_url}'" do
- application_settings = application_settings_table.create!(grafana_url: grafana_url)
-
- migrate!
-
- expect(application_settings.reload.grafana_url).to eq(grafana_url)
- end
- end
-
- context 'when application_settings table has no rows' do
- it 'does not fail' do
- migrate!
- end
- end
-end
diff --git a/spec/migrations/cleanup_empty_commit_user_mentions_spec.rb b/spec/migrations/cleanup_empty_commit_user_mentions_spec.rb
deleted file mode 100644
index d128c13e212..00000000000
--- a/spec/migrations/cleanup_empty_commit_user_mentions_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe CleanupEmptyCommitUserMentions, :migration, :sidekiq do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:notes) { table(:notes) }
-
- let(:user) { users.create!(name: 'root', email: 'root@example.com', username: 'root', projects_limit: 0) }
- let(:group) { namespaces.create!(name: 'group1', path: 'group1', owner_id: user.id) }
- let(:project) { projects.create!(name: 'gitlab1', path: 'gitlab1', namespace_id: group.id, visibility_level: 0) }
-
- let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '', 'group/project') }
- let(:commit) { Commit.new(RepoHelpers.sample_commit, project) }
- let(:commit_user_mentions) { table(:commit_user_mentions) }
-
- let!(:resource1) { notes.create!(commit_id: commit.id, noteable_type: 'Commit', project_id: project.id, author_id: user.id, note: 'note1 for @root to check') }
- let!(:resource2) { notes.create!(commit_id: commit.id, noteable_type: 'Commit', project_id: project.id, author_id: user.id, note: 'note1 for @root to check') }
- let!(:resource3) { notes.create!(commit_id: commit.id, noteable_type: 'Commit', project_id: project.id, author_id: user.id, note: 'note1 for @root to check', system: true) }
-
- # this note is already migrated, as it has a record in the commit_user_mentions table
- let!(:resource4) { notes.create!(note: 'note3 for @root to check', commit_id: commit.id, noteable_type: 'Commit') }
- let!(:user_mention) { commit_user_mentions.create!(commit_id: commit.id, note_id: resource4.id, mentioned_users_ids: [1]) }
-
- # these should get cleanup, by the migration
- let!(:blank_commit_user_mention1) { commit_user_mentions.create!(commit_id: commit.id, note_id: resource1.id)}
- let!(:blank_commit_user_mention2) { commit_user_mentions.create!(commit_id: commit.id, note_id: resource2.id)}
- let!(:blank_commit_user_mention3) { commit_user_mentions.create!(commit_id: commit.id, note_id: resource3.id)}
-
- it 'cleanups blank user mentions' do
- expect { migrate! }.to change { commit_user_mentions.count }.by(-3)
- end
-end
diff --git a/spec/migrations/cleanup_group_import_states_with_null_user_id_spec.rb b/spec/migrations/cleanup_group_import_states_with_null_user_id_spec.rb
deleted file mode 100644
index acd6a19779d..00000000000
--- a/spec/migrations/cleanup_group_import_states_with_null_user_id_spec.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-# frozen_string_literal: true
-
-# In order to test the CleanupGroupImportStatesWithNullUserId migration, we need
-# to first create GroupImportState with NULL user_id
-# and then run the migration to check that user_id was populated or record removed
-#
-# The problem is that the CleanupGroupImportStatesWithNullUserId migration comes
-# after the NOT NULL constraint has been added with a previous migration (AddNotNullConstraintToUserOnGroupImportStates)
-# That means that while testing the current class we can not insert GroupImportState records with an
-# invalid user_id as constraint is blocking it from doing so
-#
-# To solve this problem, use SchemaVersionFinder to set schema one version prior to AddNotNullConstraintToUserOnGroupImportStates
-
-require 'spec_helper'
-require_migration!('add_not_null_constraint_to_user_on_group_import_states')
-require_migration!
-
-RSpec.describe CleanupGroupImportStatesWithNullUserId, :migration,
- schema: MigrationHelpers::SchemaVersionFinder.migration_prior(AddNotNullConstraintToUserOnGroupImportStates) do
- let(:namespaces_table) { table(:namespaces) }
- let(:users_table) { table(:users) }
- let(:group_import_states_table) { table(:group_import_states) }
- let(:members_table) { table(:members) }
-
- describe 'Group import states clean up' do
- context 'when user_id is present' do
- it 'does not update group_import_state record' do
- user_1 = users_table.create!(name: 'user1', email: 'user1@example.com', projects_limit: 1)
- group_1 = namespaces_table.create!(name: 'group_1', path: 'group_1', type: 'Group')
- create_member(user_id: user_1.id, type: 'GroupMember', source_type: 'Namespace', source_id: group_1.id, access_level: described_class::Group::OWNER)
- group_import_state_1 = group_import_states_table.create!(group_id: group_1.id, user_id: user_1.id, status: 0)
-
- expect(group_import_state_1.user_id).to eq(user_1.id)
-
- disable_migrations_output { migrate! }
-
- expect(group_import_state_1.reload.user_id).to eq(user_1.id)
- end
- end
-
- context 'when user_id is missing' do
- it 'updates user_id with group default owner id' do
- user_2 = users_table.create!(name: 'user2', email: 'user2@example.com', projects_limit: 1)
- group_2 = namespaces_table.create!(name: 'group_2', path: 'group_2', type: 'Group')
- create_member(user_id: user_2.id, type: 'GroupMember', source_type: 'Namespace', source_id: group_2.id, access_level: described_class::Group::OWNER)
- group_import_state_2 = group_import_states_table.create!(group_id: group_2.id, user_id: nil, status: 0)
-
- disable_migrations_output { migrate! }
-
- expect(group_import_state_2.reload.user_id).to eq(user_2.id)
- end
- end
-
- context 'when group does not contain any owners' do
- it 'removes group_import_state record' do
- group_3 = namespaces_table.create!(name: 'group_3', path: 'group_3', type: 'Group')
- group_import_state_3 = group_import_states_table.create!(group_id: group_3.id, user_id: nil, status: 0)
-
- disable_migrations_output { migrate! }
-
- expect { group_import_state_3.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
- end
-
- context 'when group has parent' do
- it 'updates user_id with parent group default owner id' do
- user = users_table.create!(name: 'user4', email: 'user4@example.com', projects_limit: 1)
- group_1 = namespaces_table.create!(name: 'group_1', path: 'group_1', type: 'Group')
- create_member(user_id: user.id, type: 'GroupMember', source_type: 'Namespace', source_id: group_1.id, access_level: described_class::Group::OWNER)
- group_2 = namespaces_table.create!(name: 'group_2', path: 'group_2', type: 'Group', parent_id: group_1.id)
- group_import_state = group_import_states_table.create!(group_id: group_2.id, user_id: nil, status: 0)
-
- disable_migrations_output { migrate! }
-
- expect(group_import_state.reload.user_id).to eq(user.id)
- end
- end
-
- context 'when group has owner_id' do
- it 'updates user_id with owner_id' do
- user = users_table.create!(name: 'user', email: 'user@example.com', projects_limit: 1)
- group = namespaces_table.create!(name: 'group', path: 'group', type: 'Group', owner_id: user.id)
- group_import_state = group_import_states_table.create!(group_id: group.id, user_id: nil, status: 0)
-
- disable_migrations_output { migrate! }
-
- expect(group_import_state.reload.user_id).to eq(user.id)
- end
- end
- end
-
- def create_member(options)
- members_table.create!(
- {
- notification_level: 0,
- ldap: false,
- override: false
- }.merge(options)
- )
- end
-end
diff --git a/spec/migrations/cleanup_move_container_registry_enabled_to_project_features_spec.rb b/spec/migrations/cleanup_move_container_registry_enabled_to_project_feature_spec.rb
index 3c39327304e..f0f9249515b 100644
--- a/spec/migrations/cleanup_move_container_registry_enabled_to_project_features_spec.rb
+++ b/spec/migrations/cleanup_move_container_registry_enabled_to_project_feature_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration!('cleanup_move_container_registry_enabled_to_project_feature')
+require_migration!
RSpec.describe CleanupMoveContainerRegistryEnabledToProjectFeature, :migration do
let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab-org') }
diff --git a/spec/migrations/cleanup_optimistic_locking_nulls_pt2_fixed_spec.rb b/spec/migrations/cleanup_optimistic_locking_nulls_pt2_fixed_spec.rb
deleted file mode 100644
index 2f461ebc1d5..00000000000
--- a/spec/migrations/cleanup_optimistic_locking_nulls_pt2_fixed_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('cleanup_optimistic_locking_nulls_pt2_fixed')
-
-RSpec.describe CleanupOptimisticLockingNullsPt2Fixed, :migration, schema: 20200219193117 do
- test_tables = %w(ci_stages ci_builds ci_pipelines).freeze
- test_tables.each do |table|
- let(table.to_sym) { table(table.to_sym) }
- end
- let(:tables) { test_tables.map { |t| method(t.to_sym).call } }
-
- before do
- # Create necessary rows
- ci_stages.create!
- ci_builds.create!
- ci_pipelines.create!
-
- # Nullify `lock_version` column for all rows
- # Needs to be done with a SQL fragment, otherwise Rails will coerce it to 0
- tables.each do |table|
- table.update_all('lock_version = NULL')
- end
- end
-
- it 'correctly migrates nullified lock_version column', :sidekiq_might_not_need_inline do
- tables.each do |table|
- expect(table.where(lock_version: nil).count).to eq(1)
- end
-
- tables.each do |table|
- expect(table.where(lock_version: 0).count).to eq(0)
- end
-
- migrate!
-
- tables.each do |table|
- expect(table.where(lock_version: nil).count).to eq(0)
- end
-
- tables.each do |table|
- expect(table.where(lock_version: 0).count).to eq(1)
- end
- end
-end
diff --git a/spec/migrations/cleanup_optimistic_locking_nulls_spec.rb b/spec/migrations/cleanup_optimistic_locking_nulls_spec.rb
deleted file mode 100644
index a287d950c89..00000000000
--- a/spec/migrations/cleanup_optimistic_locking_nulls_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('cleanup_optimistic_locking_nulls')
-
-RSpec.describe CleanupOptimisticLockingNulls do
- let(:epics) { table(:epics) }
- let(:merge_requests) { table(:merge_requests) }
- let(:issues) { table(:issues) }
- let(:tables) { [epics, merge_requests, issues] }
-
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:users) { table(:users)}
-
- before do
- namespaces.create!(id: 123, name: 'gitlab1', path: 'gitlab1')
- projects.create!(id: 123, name: 'gitlab1', path: 'gitlab1', namespace_id: 123)
- users.create!(id: 123, username: 'author', projects_limit: 1000)
-
- # Create necessary rows
- epics.create!(iid: 123, group_id: 123, author_id: 123, title: 'a', title_html: 'a')
- merge_requests.create!(iid: 123, target_project_id: 123, source_project_id: 123, target_branch: 'master', source_branch: 'hmm', title: 'a', title_html: 'a')
- issues.create!(iid: 123, project_id: 123, title: 'a', title_html: 'a')
-
- # Nullify `lock_version` column for all rows
- # Needs to be done with a SQL fragment, otherwise Rails will coerce it to 0
- tables.each do |table|
- table.update_all('lock_version = NULL')
- end
- end
-
- it 'correctly migrates nullified lock_version column', :sidekiq_inline do
- tables.each do |table|
- expect(table.where(lock_version: nil).count).to eq(1)
- end
-
- tables.each do |table|
- expect(table.where(lock_version: 0).count).to eq(0)
- end
-
- migrate!
-
- tables.each do |table|
- expect(table.where(lock_version: nil).count).to eq(0)
- end
-
- tables.each do |table|
- expect(table.where(lock_version: 0).count).to eq(1)
- end
- end
-end
diff --git a/spec/migrations/cleanup_projects_with_missing_namespace_spec.rb b/spec/migrations/cleanup_projects_with_missing_namespace_spec.rb
deleted file mode 100644
index c640bfcd174..00000000000
--- a/spec/migrations/cleanup_projects_with_missing_namespace_spec.rb
+++ /dev/null
@@ -1,142 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!('add_projects_foreign_key_to_namespaces')
-require_migration!
-
-# In order to test the CleanupProjectsWithMissingNamespace migration, we need
-# to first create an orphaned project (one with an invalid namespace_id)
-# and then run the migration to check that the project was properly cleaned up
-#
-# The problem is that the CleanupProjectsWithMissingNamespace migration comes
-# after the FK has been added with a previous migration (AddProjectsForeignKeyToNamespaces)
-# That means that while testing the current class we can not insert projects with an
-# invalid namespace_id as the existing FK is correctly blocking us from doing so
-#
-# The approach that solves that problem is to:
-# - Set the schema of this test to the one prior to AddProjectsForeignKeyToNamespaces
-# - We could hardcode it to `20200508091106` (which currently is the previous
-# migration before adding the FK) but that would mean that this test depends
-# on migration 20200508091106 not being reverted or deleted
-# - So, we use SchemaVersionFinder that finds the previous migration and returns
-# its schema, which we then use in the describe
-#
-# That means that we lock the schema version to the one returned by
-# SchemaVersionFinder.previous_migration and only test the cleanup migration
-# *without* the migration that adds the Foreign Key ever running
-# That's acceptable as the cleanup script should not be affected in any way
-# by the migration that adds the Foreign Key
-class SchemaVersionFinder
- def self.migrations_paths
- ActiveRecord::Migrator.migrations_paths
- end
-
- def self.migration_context
- ActiveRecord::MigrationContext.new(migrations_paths, ActiveRecord::SchemaMigration)
- end
-
- def self.migrations
- migration_context.migrations
- end
-
- def self.previous_migration
- migrations.each_cons(2) do |previous, migration|
- break previous.version if migration.name == AddProjectsForeignKeyToNamespaces.name
- end
- end
-end
-
-RSpec.describe CleanupProjectsWithMissingNamespace, :migration, schema: SchemaVersionFinder.previous_migration do
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
- let(:users) { table(:users) }
-
- before do
- namespace = namespaces.create!(name: 'existing_namespace', path: 'existing_namespace')
-
- projects.create!(
- name: 'project_with_existing_namespace',
- path: 'project_with_existing_namespace',
- visibility_level: 20,
- archived: false,
- namespace_id: namespace.id
- )
-
- projects.create!(
- name: 'project_with_non_existing_namespace',
- path: 'project_with_non_existing_namespace',
- visibility_level: 20,
- archived: false,
- namespace_id: non_existing_record_id
- )
- end
-
- it 'creates the ghost user' do
- expect(users.where(user_type: described_class::User::USER_TYPE_GHOST).count).to eq(0)
-
- disable_migrations_output { migrate! }
-
- expect(users.where(user_type: described_class::User::USER_TYPE_GHOST).count).to eq(1)
- end
-
- it 'creates the lost-and-found group, owned by the ghost user' do
- expect(
- described_class::Group.where(
- described_class::Group
- .arel_table[:name]
- .matches("#{described_class::User::LOST_AND_FOUND_GROUP}%")
- ).count
- ).to eq(0)
-
- disable_migrations_output { migrate! }
-
- ghost_user = users.find_by(user_type: described_class::User::USER_TYPE_GHOST)
- expect(
- described_class::Group
- .joins('INNER JOIN members ON namespaces.id = members.source_id')
- .where(namespaces: { type: 'Group' })
- .where(members: { type: 'GroupMember' })
- .where(members: { source_type: 'Namespace' })
- .where(members: { user_id: ghost_user.id })
- .where(members: { requested_at: nil })
- .where(members: { access_level: described_class::ACCESS_LEVEL_OWNER })
- .where(
- described_class::Group
- .arel_table[:name]
- .matches("#{described_class::User::LOST_AND_FOUND_GROUP}%")
- )
- .count
- ).to eq(1)
- end
-
- it 'moves the orphaned project to the lost-and-found group' do
- orphaned_project = projects.find_by(name: 'project_with_non_existing_namespace')
- expect(orphaned_project.visibility_level).to eq(20)
- expect(orphaned_project.archived).to eq(false)
- expect(orphaned_project.namespace_id).to eq(non_existing_record_id)
-
- disable_migrations_output { migrate! }
-
- lost_and_found_group = described_class::Group.find_by(
- described_class::Group
- .arel_table[:name]
- .matches("#{described_class::User::LOST_AND_FOUND_GROUP}%")
- )
- orphaned_project = projects.find_by(id: orphaned_project.id)
-
- expect(orphaned_project.visibility_level).to eq(0)
- expect(orphaned_project.namespace_id).to eq(lost_and_found_group.id)
- expect(orphaned_project.name).to eq("project_with_non_existing_namespace_#{orphaned_project.id}")
- expect(orphaned_project.path).to eq("project_with_non_existing_namespace_#{orphaned_project.id}")
- expect(orphaned_project.archived).to eq(true)
-
- valid_project = projects.find_by(name: 'project_with_existing_namespace')
- existing_namespace = namespaces.find_by(name: 'existing_namespace')
-
- expect(valid_project.visibility_level).to eq(20)
- expect(valid_project.namespace_id).to eq(existing_namespace.id)
- expect(valid_project.path).to eq('project_with_existing_namespace')
- expect(valid_project.archived).to eq(false)
- end
-end
diff --git a/spec/migrations/cleanup_remaining_orphan_invites_spec.rb b/spec/migrations/cleanup_remaining_orphan_invites_spec.rb
index 0eb1f5a578a..987535a4f09 100644
--- a/spec/migrations/cleanup_remaining_orphan_invites_spec.rb
+++ b/spec/migrations/cleanup_remaining_orphan_invites_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration! 'cleanup_remaining_orphan_invites'
+require_migration!
RSpec.describe CleanupRemainingOrphanInvites, :migration do
def create_member(**extra_attributes)
diff --git a/spec/migrations/complete_namespace_settings_migration_spec.rb b/spec/migrations/complete_namespace_settings_migration_spec.rb
deleted file mode 100644
index 46c455d8b19..00000000000
--- a/spec/migrations/complete_namespace_settings_migration_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe CompleteNamespaceSettingsMigration, :redis do
- let(:migration) { spy('migration') }
-
- context 'when still legacy artifacts exist' do
- let(:namespaces) { table(:namespaces) }
- let(:namespace_settings) { table(:namespace_settings) }
- let!(:namespace) { namespaces.create!(name: 'gitlab', path: 'gitlab-org') }
-
- it 'steals sidekiq jobs from BackfillNamespaceSettings background migration' do
- expect(Gitlab::BackgroundMigration).to receive(:steal).with('BackfillNamespaceSettings')
-
- migrate!
- end
-
- it 'migrates namespaces without namespace_settings' do
- expect { migrate! }.to change { namespace_settings.count }.from(0).to(1)
- end
- end
-end
diff --git a/spec/migrations/confirm_project_bot_users_spec.rb b/spec/migrations/confirm_project_bot_users_spec.rb
deleted file mode 100644
index 5f70181e70a..00000000000
--- a/spec/migrations/confirm_project_bot_users_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ConfirmProjectBotUsers, :migration do
- let(:users) { table(:users) }
-
- context 'project bot users that are currently unconfirmed' do
- let!(:project_bot_1) do
- create_user!(
- name: 'bot_1',
- email: 'bot_1@example.com',
- created_at: 2.days.ago,
- user_type: described_class::User::USER_TYPE_PROJECT_BOT
- )
- end
-
- let!(:project_bot_2) do
- create_user!(
- name: 'bot_2',
- email: 'bot_2@example.com',
- created_at: 4.days.ago,
- user_type: described_class::User::USER_TYPE_PROJECT_BOT
- )
- end
-
- it 'updates their `confirmed_at` attribute' do
- expect { migrate! }
- .to change { project_bot_1.reload.confirmed_at }
- .and change { project_bot_2.reload.confirmed_at }
- end
-
- it 'sets `confirmed_at` to be the same as their `created_at` attribute' do
- migrate!
-
- [project_bot_1, project_bot_2].each do |bot|
- expect(bot.reload.confirmed_at).to eq(bot.created_at)
- end
- end
- end
-
- context 'project bot users that are currently confirmed' do
- let!(:confirmed_project_bot) do
- create_user!(
- name: 'bot_1',
- email: 'bot_1@example.com',
- user_type: described_class::User::USER_TYPE_PROJECT_BOT,
- confirmed_at: 1.day.ago
- )
- end
-
- it 'does not update their `confirmed_at` attribute' do
- expect { migrate! }.not_to change { confirmed_project_bot.reload.confirmed_at }
- end
- end
-
- context 'human users that are currently unconfirmed' do
- let!(:unconfirmed_human) do
- create_user!(
- name: 'human',
- email: 'human@example.com',
- user_type: nil
- )
- end
-
- it 'does not update their `confirmed_at` attribute' do
- expect { migrate! }.not_to change { unconfirmed_human.reload.confirmed_at }
- end
- end
-
- private
-
- def create_user!(name:, email:, user_type:, created_at: Time.now, confirmed_at: nil)
- users.create!(
- name: name,
- email: email,
- username: name,
- projects_limit: 0,
- user_type: user_type,
- confirmed_at: confirmed_at
- )
- end
-end
diff --git a/spec/migrations/create_environment_for_self_monitoring_project_spec.rb b/spec/migrations/create_environment_for_self_monitoring_project_spec.rb
deleted file mode 100644
index 4615c231510..00000000000
--- a/spec/migrations/create_environment_for_self_monitoring_project_spec.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe CreateEnvironmentForSelfMonitoringProject do
- let(:application_settings_table) { table(:application_settings) }
-
- let(:environments) { table(:environments) }
-
- let(:instance_administrators_group) do
- table(:namespaces).create!(
- id: 1,
- name: 'GitLab Instance Administrators',
- path: 'gitlab-instance-administrators-random',
- type: 'Group'
- )
- end
-
- let(:self_monitoring_project) do
- table(:projects).create!(
- id: 2,
- name: 'Self Monitoring',
- path: 'self_monitoring',
- namespace_id: instance_administrators_group.id
- )
- end
-
- context 'when the self monitoring project ID is not set' do
- it 'does not make changes' do
- expect(environments.find_by(project_id: self_monitoring_project.id)).to be_nil
-
- migrate!
-
- expect(environments.find_by(project_id: self_monitoring_project.id)).to be_nil
- end
- end
-
- context 'when the self monitoring project ID is set' do
- before do
- application_settings_table.create!(instance_administration_project_id: self_monitoring_project.id)
- end
-
- context 'when the environment already exists' do
- let!(:environment) do
- environments.create!(project_id: self_monitoring_project.id, name: 'production', slug: 'production')
- end
-
- it 'does not make changes' do
- expect(environments.find_by(project_id: self_monitoring_project.id)).to eq(environment)
-
- migrate!
-
- expect(environments.find_by(project_id: self_monitoring_project.id)).to eq(environment)
- end
- end
-
- context 'when the environment does not exist' do
- it 'creates the environment' do
- expect(environments.find_by(project_id: self_monitoring_project.id)).to be_nil
-
- migrate!
-
- expect(environments.find_by(project_id: self_monitoring_project.id)).to be
- end
- end
- end
-end
diff --git a/spec/migrations/deduplicate_epic_iids_spec.rb b/spec/migrations/deduplicate_epic_iids_spec.rb
deleted file mode 100644
index c9dd5b3253b..00000000000
--- a/spec/migrations/deduplicate_epic_iids_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DeduplicateEpicIids, :migration, schema: 20201106082723 do
- let(:routes) { table(:routes) }
- let(:epics) { table(:epics) }
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
-
- let!(:group) { create_group('foo') }
- let!(:user) { users.create!(email: 'test@example.com', projects_limit: 100, username: 'test') }
- let!(:dup_epic1) { epics.create!(iid: 1, title: 'epic 1', group_id: group.id, author_id: user.id, created_at: Time.now, updated_at: Time.now, title_html: 'any') }
- let!(:dup_epic2) { epics.create!(iid: 1, title: 'epic 2', group_id: group.id, author_id: user.id, created_at: Time.now, updated_at: Time.now, title_html: 'any') }
- let!(:dup_epic3) { epics.create!(iid: 1, title: 'epic 3', group_id: group.id, author_id: user.id, created_at: Time.now, updated_at: Time.now, title_html: 'any') }
-
- it 'deduplicates epic iids', :aggregate_failures do
- duplicate_epics_count = epics.where(iid: 1, group_id: group.id).count
- expect(duplicate_epics_count).to eq 3
-
- migrate!
-
- duplicate_epics_count = epics.where(iid: 1, group_id: group.id).count
- expect(duplicate_epics_count).to eq 1
- expect(dup_epic1.reload.iid).to eq 1
- expect(dup_epic2.reload.iid).to eq 2
- expect(dup_epic3.reload.iid).to eq 3
- end
-
- def create_group(path)
- namespaces.create!(name: path, path: path, type: 'Group').tap do |namespace|
- routes.create!(path: namespace.path, name: namespace.name, source_id: namespace.id, source_type: 'Namespace')
- end
- end
-end
diff --git a/spec/migrations/delete_internal_ids_where_feature_flags_usage_spec.rb b/spec/migrations/delete_internal_ids_where_feature_flags_usage_spec.rb
deleted file mode 100644
index 30d776c498b..00000000000
--- a/spec/migrations/delete_internal_ids_where_feature_flags_usage_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DeleteInternalIdsWhereFeatureFlagsUsage do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:internal_ids) { table(:internal_ids) }
-
- def setup
- namespace = namespaces.create!(name: 'foo', path: 'foo')
- projects.create!(namespace_id: namespace.id)
- end
-
- it 'deletes feature flag rows from the internal_ids table' do
- project = setup
- internal_ids.create!(project_id: project.id, usage: 6, last_value: 1)
-
- disable_migrations_output { migrate! }
-
- expect(internal_ids.count).to eq(0)
- end
-
- it 'does not delete issue rows from the internal_ids table' do
- project = setup
- internal_ids.create!(project_id: project.id, usage: 0, last_value: 1)
-
- disable_migrations_output { migrate! }
-
- expect(internal_ids.count).to eq(1)
- end
-
- it 'does not delete merge request rows from the internal_ids table' do
- project = setup
- internal_ids.create!(project_id: project.id, usage: 1, last_value: 1)
-
- disable_migrations_output { migrate! }
-
- expect(internal_ids.count).to eq(1)
- end
-end
diff --git a/spec/migrations/delete_template_project_services_spec.rb b/spec/migrations/delete_template_project_services_spec.rb
deleted file mode 100644
index 20532e4187a..00000000000
--- a/spec/migrations/delete_template_project_services_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DeleteTemplateProjectServices, :migration do
- let(:services) { table(:services) }
- let(:project) { table(:projects).create!(namespace_id: 1) }
-
- before do
- services.create!(template: true, project_id: project.id)
- services.create!(template: true)
- services.create!(template: false, project_id: project.id)
- end
-
- it 'deletes services when template and attached to a project' do
- expect { migrate! }.to change { services.where(template: true, project_id: project.id).count }.from(1).to(0)
- .and not_change { services.where(template: true, project_id: nil).count }
- .and not_change { services.where(template: false).where.not(project_id: nil).count }
- end
-end
diff --git a/spec/migrations/delete_template_services_duplicated_by_type_spec.rb b/spec/migrations/delete_template_services_duplicated_by_type_spec.rb
deleted file mode 100644
index 577fea984da..00000000000
--- a/spec/migrations/delete_template_services_duplicated_by_type_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DeleteTemplateServicesDuplicatedByType do
- let(:services) { table(:services) }
-
- before do
- services.create!(template: true, type: 'JenkinsService')
- services.create!(template: true, type: 'JenkinsService')
- services.create!(template: true, type: 'JiraService')
- services.create!(template: true, type: 'JenkinsService')
- end
-
- it 'deletes service templates duplicated by type except the one with the lowest ID' do
- jenkins_integration_id = services.where(type: 'JenkinsService').order(:id).pluck(:id).first
- jira_integration_id = services.where(type: 'JiraService').pluck(:id).first
-
- migrate!
-
- expect(services.pluck(:id)).to contain_exactly(jenkins_integration_id, jira_integration_id)
- end
-end
diff --git a/spec/migrations/delete_user_callout_alerts_moved_spec.rb b/spec/migrations/delete_user_callout_alerts_moved_spec.rb
deleted file mode 100644
index 401cf77628d..00000000000
--- a/spec/migrations/delete_user_callout_alerts_moved_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DeleteUserCalloutAlertsMoved do
- let(:users) { table(:users) }
- let(:user_callouts) { table(:user_callouts) }
- let(:alerts_moved_feature) { described_class::FEATURE_NAME_ALERTS_MOVED }
- let(:unrelated_feature) { 1 }
-
- let!(:user1) { users.create!(email: '1', projects_limit: 0) }
- let!(:user2) { users.create!(email: '2', projects_limit: 0) }
-
- subject(:migration) { described_class.new }
-
- before do
- user_callouts.create!(user_id: user1.id, feature_name: alerts_moved_feature)
- user_callouts.create!(user_id: user1.id, feature_name: unrelated_feature)
- user_callouts.create!(user_id: user2.id, feature_name: alerts_moved_feature)
- end
-
- describe '#up' do
- it 'deletes `alerts_moved` user callouts' do
- migration.up
-
- expect(user_callouts.all.map(&:feature_name)).to eq([unrelated_feature])
- end
- end
-end
diff --git a/spec/migrations/drop_activate_prometheus_services_background_jobs_spec.rb b/spec/migrations/drop_activate_prometheus_services_background_jobs_spec.rb
deleted file mode 100644
index c6115d5889c..00000000000
--- a/spec/migrations/drop_activate_prometheus_services_background_jobs_spec.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DropActivatePrometheusServicesBackgroundJobs, :sidekiq, :redis, schema: 2020_02_21_144534 do
- subject(:migration) { described_class.new }
-
- describe '#up' do
- let(:retry_set) { Sidekiq::RetrySet.new }
- let(:scheduled_set) { Sidekiq::ScheduledSet.new }
-
- context 'there are only affected jobs on the queue' do
- let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1] } }
- let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) }
-
- it 'removes enqueued ActivatePrometheusServicesForSharedClusterApplications background jobs' do
- Sidekiq::Testing.disable! do # https://github.com/mperham/sidekiq/wiki/testing#api Sidekiq's API does not have a testing mode
- retry_set.schedule(1.hour.from_now, payload)
- scheduled_set.schedule(1.hour.from_now, payload)
- Sidekiq::Client.push(queue_payload)
-
- expect { migration.up }.to change { Sidekiq::Queue.new(described_class::QUEUE).size }.from(1).to(0)
- expect(retry_set.size).to eq(0)
- expect(scheduled_set.size).to eq(0)
- end
- end
- end
-
- context "there aren't any affected jobs on the queue" do
- let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1] } }
- let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) }
-
- it 'skips other enqueued jobs' do
- Sidekiq::Testing.disable! do
- retry_set.schedule(1.hour.from_now, payload)
- scheduled_set.schedule(1.hour.from_now, payload)
- Sidekiq::Client.push(queue_payload)
-
- expect { migration.up }.not_to change { Sidekiq::Queue.new(described_class::QUEUE).size }
- expect(retry_set.size).to eq(1)
- expect(scheduled_set.size).to eq(1)
- end
- end
- end
-
- context "there are multiple types of jobs on the queue" do
- let(:payload) { { 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1] } }
- let(:queue_payload) { payload.merge('queue' => described_class::QUEUE) }
-
- it 'skips other enqueued jobs' do
- Sidekiq::Testing.disable! do
- queue = Sidekiq::Queue.new(described_class::QUEUE)
- # these jobs will be deleted
- retry_set.schedule(1.hour.from_now, payload)
- scheduled_set.schedule(1.hour.from_now, payload)
- Sidekiq::Client.push(queue_payload)
- # this jobs will be skipped
- skipped_jobs_args = [['SomeOtherClass', 1], [described_class::DROPPED_JOB_CLASS, 'wrong id type'], [described_class::DROPPED_JOB_CLASS, 1, 'some wired argument']]
- skipped_jobs_args.each do |args|
- retry_set.schedule(1.hour.from_now, { 'class' => ::BackgroundMigrationWorker, 'args' => args })
- scheduled_set.schedule(1.hour.from_now, { 'class' => ::BackgroundMigrationWorker, 'args' => args })
- Sidekiq::Client.push('queue' => described_class::QUEUE, 'class' => ::BackgroundMigrationWorker, 'args' => args)
- end
-
- migration.up
-
- expect(retry_set.size).to be 3
- expect(scheduled_set.size).to be 3
- expect(queue.size).to be 3
- expect(queue.map(&:args)).to match_array skipped_jobs_args
- expect(retry_set.map(&:args)).to match_array skipped_jobs_args
- expect(scheduled_set.map(&:args)).to match_array skipped_jobs_args
- end
- end
- end
-
- context "other queues" do
- it 'does not modify them' do
- Sidekiq::Testing.disable! do
- Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1])
- Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1])
-
- expect { migration.up }.not_to change { Sidekiq::Queue.new('other').size }
- end
- end
- end
- end
-end
diff --git a/spec/migrations/drop_background_migration_jobs_spec.rb b/spec/migrations/drop_background_migration_jobs_spec.rb
deleted file mode 100644
index 82b3f9f7187..00000000000
--- a/spec/migrations/drop_background_migration_jobs_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe DropBackgroundMigrationJobs, :sidekiq, :redis, schema: 2020_01_16_051619 do
- subject(:migration) { described_class.new }
-
- describe '#up' do
- context 'there are only affected jobs on the queue' do
- it 'removes enqueued ActivatePrometheusServicesForSharedClusterApplications background jobs' do
- Sidekiq::Testing.disable! do # https://github.com/mperham/sidekiq/wiki/testing#api Sidekiq's API does not have a testing mode
- Sidekiq::Client.push('queue' => described_class::QUEUE, 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1])
-
- expect { migration.up }.to change { Sidekiq::Queue.new(described_class::QUEUE).size }.from(1).to(0)
- end
- end
- end
-
- context "there aren't any affected jobs on the queue" do
- it 'skips other enqueued jobs' do
- Sidekiq::Testing.disable! do
- Sidekiq::Client.push('queue' => described_class::QUEUE, 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1])
-
- expect { migration.up }.not_to change { Sidekiq::Queue.new(described_class::QUEUE).size }
- end
- end
- end
-
- context "there are multiple types of jobs on the queue" do
- it 'skips other enqueued jobs' do
- Sidekiq::Testing.disable! do
- queue = Sidekiq::Queue.new(described_class::QUEUE)
- # this job will be deleted
- Sidekiq::Client.push('queue' => described_class::QUEUE, 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1])
- # this jobs will be skipped
- skipped_jobs_args = [['SomeOtherClass', 1], [described_class::DROPPED_JOB_CLASS, 'wrong id type'], [described_class::DROPPED_JOB_CLASS, 1, 'some wired argument']]
- skipped_jobs_args.each do |args|
- Sidekiq::Client.push('queue' => described_class::QUEUE, 'class' => ::BackgroundMigrationWorker, 'args' => args)
- end
-
- migration.up
-
- expect(queue.size).to be 3
- expect(queue.map(&:args)).to match_array skipped_jobs_args
- end
- end
- end
-
- context "other queues" do
- it 'does not modify them' do
- Sidekiq::Testing.disable! do
- Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => ['SomeOtherClass', 1])
- Sidekiq::Client.push('queue' => 'other', 'class' => ::BackgroundMigrationWorker, 'args' => [described_class::DROPPED_JOB_CLASS, 1])
-
- expect { migration.up }.not_to change { Sidekiq::Queue.new('other').size }
- end
- end
- end
- end
-end
diff --git a/spec/migrations/ensure_filled_external_diff_store_on_merge_request_diffs_spec.rb b/spec/migrations/ensure_filled_external_diff_store_on_merge_request_diffs_spec.rb
deleted file mode 100644
index 6998e7a91cf..00000000000
--- a/spec/migrations/ensure_filled_external_diff_store_on_merge_request_diffs_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe EnsureFilledExternalDiffStoreOnMergeRequestDiffs, schema: 20200908095446 do
- let!(:merge_request_diffs) { table(:merge_request_diffs) }
- let!(:merge_requests) { table(:merge_requests) }
- let!(:namespaces) { table(:namespaces) }
- let!(:projects) { table(:projects) }
- let!(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:project) { projects.create!(namespace_id: namespace.id) }
- let!(:merge_request) { merge_requests.create!(source_branch: 'x', target_branch: 'master', target_project_id: project.id) }
-
- before do
- constraint_name = 'check_93ee616ac9'
-
- # In order to insert a row with a NULL to fill.
- ActiveRecord::Base.connection.execute "ALTER TABLE merge_request_diffs DROP CONSTRAINT #{constraint_name}"
-
- @external_diff_store_1 = merge_request_diffs.create!(external_diff_store: 1, merge_request_id: merge_request.id)
- @external_diff_store_2 = merge_request_diffs.create!(external_diff_store: 2, merge_request_id: merge_request.id)
- @external_diff_store_nil = merge_request_diffs.create!(external_diff_store: nil, merge_request_id: merge_request.id)
-
- # revert DB structure
- ActiveRecord::Base.connection.execute "ALTER TABLE merge_request_diffs ADD CONSTRAINT #{constraint_name} CHECK ((external_diff_store IS NOT NULL)) NOT VALID"
- end
-
- it 'correctly migrates nil external_diff_store to 1' do
- migrate!
-
- @external_diff_store_1.reload
- @external_diff_store_2.reload
- @external_diff_store_nil.reload
-
- expect(@external_diff_store_1.external_diff_store).to eq(1) # unchanged
- expect(@external_diff_store_2.external_diff_store).to eq(2) # unchanged
- expect(@external_diff_store_nil.external_diff_store).to eq(1) # nil => 1
- end
-end
diff --git a/spec/migrations/ensure_filled_file_store_on_package_files_spec.rb b/spec/migrations/ensure_filled_file_store_on_package_files_spec.rb
deleted file mode 100644
index 5cfc3a6eeb8..00000000000
--- a/spec/migrations/ensure_filled_file_store_on_package_files_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe EnsureFilledFileStoreOnPackageFiles, schema: 20200910175553 do
- let!(:packages_package_files) { table(:packages_package_files) }
- let!(:packages_packages) { table(:packages_packages) }
- let!(:namespaces) { table(:namespaces) }
- let!(:projects) { table(:projects) }
- let!(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:project) { projects.create!(namespace_id: namespace.id) }
- let!(:package) { packages_packages.create!(project_id: project.id, name: 'bar', package_type: 1) }
-
- before do
- constraint_name = 'check_4c5e6bb0b3'
-
- # In order to insert a row with a NULL to fill.
- ActiveRecord::Base.connection.execute "ALTER TABLE packages_package_files DROP CONSTRAINT #{constraint_name}"
-
- @file_store_1 = packages_package_files.create!(file_store: 1, file_name: 'foo_1', file: 'foo_1', package_id: package.id)
- @file_store_2 = packages_package_files.create!(file_store: 2, file_name: 'foo_2', file: 'foo_2', package_id: package.id)
- @file_store_nil = packages_package_files.create!(file_store: nil, file_name: 'foo_nil', file: 'foo_nil', package_id: package.id)
-
- # revert DB structure
- ActiveRecord::Base.connection.execute "ALTER TABLE packages_package_files ADD CONSTRAINT #{constraint_name} CHECK ((file_store IS NOT NULL)) NOT VALID"
- end
-
- it 'correctly migrates nil file_store to 1' do
- migrate!
-
- @file_store_1.reload
- @file_store_2.reload
- @file_store_nil.reload
-
- expect(@file_store_1.file_store).to eq(1) # unchanged
- expect(@file_store_2.file_store).to eq(2) # unchanged
- expect(@file_store_nil.file_store).to eq(1) # nil => 1
- end
-end
diff --git a/spec/migrations/ensure_namespace_settings_creation_spec.rb b/spec/migrations/ensure_namespace_settings_creation_spec.rb
deleted file mode 100644
index b105e678d35..00000000000
--- a/spec/migrations/ensure_namespace_settings_creation_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe EnsureNamespaceSettingsCreation do
- context 'when there are namespaces without namespace settings' do
- let(:namespaces) { table(:namespaces) }
- let(:namespace_settings) { table(:namespace_settings) }
- let!(:namespace) { namespaces.create!(name: 'gitlab', path: 'gitlab-org') }
- let!(:namespace_2) { namespaces.create!(name: 'gitlab', path: 'gitlab-org2') }
-
- it 'migrates namespaces without namespace_settings' do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes.to_i, namespace.id, namespace_2.id)
- end
- end
- end
-
- it 'schedules migrations in batches' do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- namespace_3 = namespaces.create!(name: 'gitlab', path: 'gitlab-org3')
- namespace_4 = namespaces.create!(name: 'gitlab', path: 'gitlab-org4')
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes.to_i, namespace.id, namespace_2.id)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes.to_i, namespace_3.id, namespace_4.id)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/ensure_target_project_id_is_filled_spec.rb b/spec/migrations/ensure_target_project_id_is_filled_spec.rb
deleted file mode 100644
index 7a9f49390fb..00000000000
--- a/spec/migrations/ensure_target_project_id_is_filled_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe EnsureTargetProjectIdIsFilled, schema: 20200827085101 do
- let_it_be(:namespaces) { table(:namespaces) }
- let_it_be(:projects) { table(:projects) }
- let_it_be(:merge_requests) { table(:merge_requests) }
- let_it_be(:metrics) { table(:merge_request_metrics) }
-
- let!(:namespace) { namespaces.create!(name: 'namespace', path: 'namespace') }
- let!(:project_1) { projects.create!(namespace_id: namespace.id) }
- let!(:project_2) { projects.create!(namespace_id: namespace.id) }
- let!(:merge_request_to_migrate_1) { merge_requests.create!(source_branch: 'a', target_branch: 'b', target_project_id: project_1.id) }
- let!(:merge_request_to_migrate_2) { merge_requests.create!(source_branch: 'c', target_branch: 'd', target_project_id: project_2.id) }
- let!(:merge_request_not_to_migrate) { merge_requests.create!(source_branch: 'e', target_branch: 'f', target_project_id: project_1.id) }
-
- let!(:metrics_1) { metrics.create!(merge_request_id: merge_request_to_migrate_1.id) }
- let!(:metrics_2) { metrics.create!(merge_request_id: merge_request_to_migrate_2.id) }
- let!(:metrics_3) { metrics.create!(merge_request_id: merge_request_not_to_migrate.id, target_project_id: project_1.id) }
-
- it 'migrates missing target_project_ids' do
- migrate!
-
- expect(metrics_1.reload.target_project_id).to eq(project_1.id)
- expect(metrics_2.reload.target_project_id).to eq(project_2.id)
- expect(metrics_3.reload.target_project_id).to eq(project_1.id)
- end
-end
diff --git a/spec/migrations/ensure_u2f_registrations_migrated_spec.rb b/spec/migrations/ensure_u2f_registrations_migrated_spec.rb
deleted file mode 100644
index 01db29c0edf..00000000000
--- a/spec/migrations/ensure_u2f_registrations_migrated_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe EnsureU2fRegistrationsMigrated, schema: 20201022144501 do
- let(:u2f_registrations) { table(:u2f_registrations) }
- let(:webauthn_registrations) { table(:webauthn_registrations) }
- let(:users) { table(:users) }
-
- let(:user) { users.create!(email: 'email@email.com', name: 'foo', username: 'foo', projects_limit: 0) }
-
- before do
- create_u2f_registration(1, 'reg1')
- create_u2f_registration(2, 'reg2')
- webauthn_registrations.create!({ name: 'reg1', u2f_registration_id: 1, credential_xid: '', public_key: '', user_id: user.id })
- end
-
- it 'correctly migrates u2f registrations previously not migrated' do
- expect { migrate! }.to change { webauthn_registrations.count }.from(1).to(2)
- end
-
- it 'migrates all valid u2f registrations depite errors' do
- create_u2f_registration(3, 'reg3', 'invalid!')
- create_u2f_registration(4, 'reg4')
-
- expect { migrate! }.to change { webauthn_registrations.count }.from(1).to(3)
- end
-
- def create_u2f_registration(id, name, public_key = nil)
- device = U2F::FakeU2F.new(FFaker::BaconIpsum.characters(5), { key_handle: SecureRandom.random_bytes(255) })
- public_key ||= Base64.strict_encode64(device.origin_public_key_raw)
- u2f_registrations.create!({ id: id,
- certificate: Base64.strict_encode64(device.cert_raw),
- key_handle: U2F.urlsafe_encode64(device.key_handle_raw),
- public_key: public_key,
- counter: 5,
- name: name,
- user_id: user.id })
- end
-end
diff --git a/spec/migrations/fill_file_store_ci_job_artifacts_spec.rb b/spec/migrations/fill_file_store_ci_job_artifacts_spec.rb
deleted file mode 100644
index 7adcf74bdba..00000000000
--- a/spec/migrations/fill_file_store_ci_job_artifacts_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe FillFileStoreCiJobArtifacts do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:builds) { table(:ci_builds) }
- let(:job_artifacts) { table(:ci_job_artifacts) }
-
- before do
- namespaces.create!(id: 123, name: 'sample', path: 'sample')
- projects.create!(id: 123, name: 'sample', path: 'sample', namespace_id: 123)
- builds.create!(id: 1)
- end
-
- context 'when file_store is nil' do
- it 'updates file_store to local' do
- job_artifacts.create!(project_id: 123, job_id: 1, file_type: 1, file_store: nil)
- job_artifact = job_artifacts.find_by(project_id: 123, job_id: 1)
-
- expect { migrate! }.to change { job_artifact.reload.file_store }.from(nil).to(1)
- end
- end
-
- context 'when file_store is set to local' do
- it 'does not update file_store' do
- job_artifacts.create!(project_id: 123, job_id: 1, file_type: 1, file_store: 1)
- job_artifact = job_artifacts.find_by(project_id: 123, job_id: 1)
-
- expect { migrate! }.not_to change { job_artifact.reload.file_store }
- end
- end
-
- context 'when file_store is set to object storage' do
- it 'does not update file_store' do
- job_artifacts.create!(project_id: 123, job_id: 1, file_type: 1, file_store: 2)
- job_artifact = job_artifacts.find_by(project_id: 123, job_id: 1)
-
- expect { migrate! }.not_to change { job_artifact.reload.file_store }
- end
- end
-end
diff --git a/spec/migrations/fill_file_store_lfs_objects_spec.rb b/spec/migrations/fill_file_store_lfs_objects_spec.rb
deleted file mode 100644
index 688976f79e8..00000000000
--- a/spec/migrations/fill_file_store_lfs_objects_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe FillFileStoreLfsObjects do
- let(:lfs_objects) { table(:lfs_objects) }
- let(:oid) { 'b804383982bb89b00e828e3f44c038cc991d3d1768009fc39ba8e2c081b9fb75' }
-
- context 'when file_store is nil' do
- it 'updates file_store to local' do
- lfs_objects.create!(oid: oid, size: 1062, file_store: nil)
- lfs_object = lfs_objects.find_by(oid: oid)
-
- expect { migrate! }.to change { lfs_object.reload.file_store }.from(nil).to(1)
- end
- end
-
- context 'when file_store is set to local' do
- it 'does not update file_store' do
- lfs_objects.create!(oid: oid, size: 1062, file_store: 1)
- lfs_object = lfs_objects.find_by(oid: oid)
-
- expect { migrate! }.not_to change { lfs_object.reload.file_store }
- end
- end
-
- context 'when file_store is set to object storage' do
- it 'does not update file_store' do
- lfs_objects.create!(oid: oid, size: 1062, file_store: 2)
- lfs_object = lfs_objects.find_by(oid: oid)
-
- expect { migrate! }.not_to change { lfs_object.reload.file_store }
- end
- end
-end
diff --git a/spec/migrations/fill_store_uploads_spec.rb b/spec/migrations/fill_store_uploads_spec.rb
deleted file mode 100644
index 19db7c2b48d..00000000000
--- a/spec/migrations/fill_store_uploads_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe FillStoreUploads do
- let(:uploads) { table(:uploads) }
- let(:path) { 'uploads/-/system/avatar.jpg' }
-
- context 'when store is nil' do
- it 'updates store to local' do
- uploads.create!(size: 100.kilobytes,
- uploader: 'AvatarUploader',
- path: path,
- store: nil)
-
- upload = uploads.find_by(path: path)
-
- expect { migrate! }.to change { upload.reload.store }.from(nil).to(1)
- end
- end
-
- context 'when store is set to local' do
- it 'does not update store' do
- uploads.create!(size: 100.kilobytes,
- uploader: 'AvatarUploader',
- path: path,
- store: 1)
-
- upload = uploads.find_by(path: path)
-
- expect { migrate! }.not_to change { upload.reload.store }
- end
- end
-
- context 'when store is set to object storage' do
- it 'does not update store' do
- uploads.create!(size: 100.kilobytes,
- uploader: 'AvatarUploader',
- path: path,
- store: 2)
-
- upload = uploads.find_by(path: path)
-
- expect { migrate! }.not_to change { upload.reload.store }
- end
- end
-end
diff --git a/spec/migrations/fix_projects_without_project_feature_spec.rb b/spec/migrations/fix_projects_without_project_feature_spec.rb
deleted file mode 100644
index d8c5e7a28c0..00000000000
--- a/spec/migrations/fix_projects_without_project_feature_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe FixProjectsWithoutProjectFeature do
- let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab-org') }
-
- let!(:projects) do
- [
- table(:projects).create!(namespace_id: namespace.id, name: 'foo 1'),
- table(:projects).create!(namespace_id: namespace.id, name: 'foo 2'),
- table(:projects).create!(namespace_id: namespace.id, name: 'foo 3')
- ]
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
- end
-
- around do |example|
- Sidekiq::Testing.fake! do
- freeze_time do
- example.call
- end
- end
- end
-
- it 'schedules jobs for ranges of projects' do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, projects[0].id, projects[1].id)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, projects[2].id, projects[2].id)
- end
-
- it 'schedules jobs according to the configured batch size' do
- expect { migrate! }.to change { BackgroundMigrationWorker.jobs.size }.by(2)
- end
-end
diff --git a/spec/migrations/fix_projects_without_prometheus_services_spec.rb b/spec/migrations/fix_projects_without_prometheus_services_spec.rb
deleted file mode 100644
index dc03f381abd..00000000000
--- a/spec/migrations/fix_projects_without_prometheus_services_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-#
-require 'spec_helper'
-require_migration!('fix_projects_without_prometheus_service')
-
-RSpec.describe FixProjectsWithoutPrometheusService, :migration do
- let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab-org') }
-
- let!(:projects) do
- [
- table(:projects).create!(namespace_id: namespace.id, name: 'foo 1'),
- table(:projects).create!(namespace_id: namespace.id, name: 'foo 2'),
- table(:projects).create!(namespace_id: namespace.id, name: 'foo 3')
- ]
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
- end
-
- around do |example|
- Sidekiq::Testing.fake! do
- freeze_time do
- example.call
- end
- end
- end
-
- it 'schedules jobs for ranges of projects' do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, projects[0].id, projects[1].id)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, projects[2].id, projects[2].id)
- end
-
- it 'schedules jobs according to the configured batch size' do
- expect { migrate! }.to change { BackgroundMigrationWorker.jobs.size }.by(2)
- end
-end
diff --git a/spec/migrations/generate_ci_jwt_signing_key_spec.rb b/spec/migrations/generate_ci_jwt_signing_key_spec.rb
deleted file mode 100644
index 7a895284aa1..00000000000
--- a/spec/migrations/generate_ci_jwt_signing_key_spec.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe GenerateCiJwtSigningKey do
- let(:application_settings) do
- Class.new(ActiveRecord::Base) do
- self.table_name = 'application_settings'
-
- attr_encrypted :ci_jwt_signing_key, {
- mode: :per_attribute_iv,
- key: Gitlab::Utils.ensure_utf8_size(Rails.application.secrets.db_key_base, bytes: 32.bytes),
- algorithm: 'aes-256-gcm',
- encode: true
- }
- end
- end
-
- it 'generates JWT signing key' do
- application_settings.create!
-
- reversible_migration do |migration|
- migration.before -> {
- settings = application_settings.first
-
- expect(settings.ci_jwt_signing_key).to be_nil
- expect(settings.encrypted_ci_jwt_signing_key).to be_nil
- expect(settings.encrypted_ci_jwt_signing_key_iv).to be_nil
- }
-
- migration.after -> {
- settings = application_settings.first
-
- expect(settings.encrypted_ci_jwt_signing_key).to be_present
- expect(settings.encrypted_ci_jwt_signing_key_iv).to be_present
- expect { OpenSSL::PKey::RSA.new(settings.ci_jwt_signing_key) }.not_to raise_error
- }
- end
- end
-end
diff --git a/spec/migrations/generate_missing_routes_for_bots_spec.rb b/spec/migrations/generate_missing_routes_for_bots_spec.rb
deleted file mode 100644
index 594e51b4410..00000000000
--- a/spec/migrations/generate_missing_routes_for_bots_spec.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe GenerateMissingRoutesForBots, :migration do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:routes) { table(:routes) }
-
- let(:visual_review_bot) do
- users.create!(email: 'visual-review-bot@gitlab.com', name: 'GitLab Visual Review Bot', username: 'visual-review-bot', user_type: 3, projects_limit: 5)
- end
-
- let(:migration_bot) do
- users.create!(email: 'migration-bot@gitlab.com', name: 'GitLab Migration Bot', username: 'migration-bot', user_type: 7, projects_limit: 5)
- end
-
- let!(:visual_review_bot_namespace) do
- namespaces.create!(owner_id: visual_review_bot.id, name: visual_review_bot.name, path: visual_review_bot.username)
- end
-
- let!(:migration_bot_namespace) do
- namespaces.create!(owner_id: migration_bot.id, name: migration_bot.name, path: migration_bot.username)
- end
-
- context 'for bot users without an existing route' do
- it 'creates new routes' do
- expect { migrate! }.to change { routes.count }.by(2)
- end
-
- it 'creates new routes with the same path and name as their namespace' do
- migrate!
-
- [visual_review_bot, migration_bot].each do |bot|
- namespace = namespaces.find_by(owner_id: bot.id)
- route = route_for(namespace: namespace)
-
- expect(route.path).to eq(namespace.path)
- expect(route.name).to eq(namespace.name)
- end
- end
- end
-
- it 'does not create routes for bot users with existing routes' do
- create_route!(namespace: visual_review_bot_namespace)
- create_route!(namespace: migration_bot_namespace)
-
- expect { migrate! }.not_to change { routes.count }
- end
-
- it 'does not create routes for human users without an existing route' do
- human_namespace = create_human_namespace!(name: 'GitLab Human', username: 'human')
-
- expect { migrate! }.not_to change { route_for(namespace: human_namespace) }
- end
-
- it 'does not create route for a bot user with a missing route, if a human user with the same path already exists' do
- human_namespace = create_human_namespace!(name: visual_review_bot.name, username: visual_review_bot.username)
- create_route!(namespace: human_namespace)
-
- expect { migrate! }.not_to change { route_for(namespace: visual_review_bot_namespace) }
- end
-
- private
-
- def create_human_namespace!(name:, username:)
- human = users.create!(email: 'human@gitlab.com', name: name, username: username, user_type: nil, projects_limit: 5)
- namespaces.create!(owner_id: human.id, name: human.name, path: human.username)
- end
-
- def create_route!(namespace:)
- routes.create!(path: namespace.path, name: namespace.name, source_id: namespace.id, source_type: 'Namespace')
- end
-
- def route_for(namespace:)
- routes.find_by(source_type: 'Namespace', source_id: namespace.id)
- end
-end
diff --git a/spec/migrations/insert_daily_invites_plan_limits_spec.rb b/spec/migrations/insert_daily_invites_plan_limits_spec.rb
deleted file mode 100644
index 49d41a1039f..00000000000
--- a/spec/migrations/insert_daily_invites_plan_limits_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe InsertDailyInvitesPlanLimits do
- let(:plans) { table(:plans) }
- let(:plan_limits) { table(:plan_limits) }
- let!(:free_plan) { plans.create!(name: 'free') }
- let!(:bronze_plan) { plans.create!(name: 'bronze') }
- let!(:silver_plan) { plans.create!(name: 'silver') }
- let!(:gold_plan) { plans.create!(name: 'gold') }
-
- context 'when on Gitlab.com' do
- before do
- expect(Gitlab).to receive(:com?).at_most(:twice).and_return(true)
- end
-
- it 'correctly migrates up and down' do
- reversible_migration do |migration|
- migration.before -> {
- expect(plan_limits.where.not(daily_invites: 0)).to be_empty
- }
-
- # Expectations will run after the up migration.
- migration.after -> {
- expect(plan_limits.pluck(:plan_id, :daily_invites)).to contain_exactly(
- [free_plan.id, 20],
- [bronze_plan.id, 0],
- [silver_plan.id, 0],
- [gold_plan.id, 0]
- )
- }
- end
- end
- end
-
- context 'when on self hosted' do
- before do
- expect(Gitlab).to receive(:com?).at_most(:twice).and_return(false)
- end
-
- it 'correctly migrates up and down' do
- reversible_migration do |migration|
- migration.before -> {
- expect(plan_limits.pluck(:daily_invites)).to eq []
- }
-
- migration.after -> {
- expect(plan_limits.pluck(:daily_invites)).to eq []
- }
- end
- end
- end
-end
diff --git a/spec/migrations/insert_project_feature_flags_plan_limits_spec.rb b/spec/migrations/insert_project_feature_flags_plan_limits_spec.rb
deleted file mode 100644
index 481e987c188..00000000000
--- a/spec/migrations/insert_project_feature_flags_plan_limits_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe InsertProjectFeatureFlagsPlanLimits do
- let(:migration) { described_class.new }
- let(:plans) { table(:plans) }
- let(:plan_limits) { table(:plan_limits) }
- let!(:default_plan) { plans.create!(name: 'default') }
- let!(:free_plan) { plans.create!(name: 'free') }
- let!(:bronze_plan) { plans.create!(name: 'bronze') }
- let!(:silver_plan) { plans.create!(name: 'silver') }
- let!(:gold_plan) { plans.create!(name: 'gold') }
- let!(:default_plan_limits) do
- plan_limits.create!(plan_id: default_plan.id, project_feature_flags: 200)
- end
-
- context 'when on Gitlab.com' do
- before do
- expect(Gitlab).to receive(:com?).at_most(:twice).and_return(true)
- end
-
- describe '#up' do
- it 'updates the project_feature_flags plan limits' do
- migration.up
-
- expect(plan_limits.pluck(:plan_id, :project_feature_flags)).to contain_exactly(
- [default_plan.id, 200],
- [free_plan.id, 50],
- [bronze_plan.id, 100],
- [silver_plan.id, 150],
- [gold_plan.id, 200]
- )
- end
- end
-
- describe '#down' do
- it 'removes the project_feature_flags plan limits' do
- migration.up
- migration.down
-
- expect(plan_limits.pluck(:plan_id, :project_feature_flags)).to contain_exactly(
- [default_plan.id, 200],
- [free_plan.id, 0],
- [bronze_plan.id, 0],
- [silver_plan.id, 0],
- [gold_plan.id, 0]
- )
- end
- end
- end
-
- context 'when on self-hosted' do
- before do
- expect(Gitlab).to receive(:com?).at_most(:twice).and_return(false)
- end
-
- describe '#up' do
- it 'does not change the plan limits' do
- migration.up
-
- expect(plan_limits.pluck(:project_feature_flags)).to contain_exactly(200)
- end
- end
-
- describe '#down' do
- it 'does not change the plan limits' do
- migration.up
- migration.down
-
- expect(plan_limits.pluck(:project_feature_flags)).to contain_exactly(200)
- end
- end
- end
-end
diff --git a/spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb b/spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb
deleted file mode 100644
index c2df04bf2d6..00000000000
--- a/spec/migrations/migrate_all_merge_request_user_mentions_to_db_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateAllMergeRequestUserMentionsToDb, :migration do
- let(:users) { table(:users) }
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
- let(:merge_requests) { table(:merge_requests) }
- let(:merge_request_user_mentions) { table(:merge_request_user_mentions) }
-
- let(:user) { users.create!(name: 'root', email: 'root@example.com', username: 'root', projects_limit: 0) }
- let(:group) { namespaces.create!(name: 'group1', path: 'group1', owner_id: user.id, type: 'Group') }
- let(:project) { projects.create!(name: 'gitlab1', path: 'gitlab1', namespace_id: group.id, visibility_level: 0) }
-
- let(:opened_state) { 1 }
- let(:closed_state) { 2 }
- let(:merged_state) { 3 }
-
- # migrateable resources
- let(:common_args) { { source_branch: 'master', source_project_id: project.id, target_project_id: project.id, author_id: user.id, description: 'mr description with @root mention' } }
- let!(:resource1) { merge_requests.create!(common_args.merge(title: "title 1", state_id: opened_state, target_branch: 'feature1')) }
- let!(:resource2) { merge_requests.create!(common_args.merge(title: "title 2", state_id: closed_state, target_branch: 'feature2')) }
- let!(:resource3) { merge_requests.create!(common_args.merge(title: "title 3", state_id: merged_state, target_branch: 'feature3')) }
-
- # non-migrateable resources
- # this merge request is already migrated, as it has a record in the merge_request_user_mentions table
- let!(:resource4) { merge_requests.create!(common_args.merge(title: "title 3", state_id: opened_state, target_branch: 'feature4')) }
- let!(:user_mention) { merge_request_user_mentions.create!(merge_request_id: resource4.id, mentioned_users_ids: [1]) }
-
- let!(:resource5) { merge_requests.create!(common_args.merge(title: "title 3", description: 'description with no mention', state_id: opened_state, target_branch: 'feature5')) }
-
- it_behaves_like 'schedules resource mentions migration', MergeRequest, false
-end
diff --git a/spec/migrations/migrate_bot_type_to_user_type_spec.rb b/spec/migrations/migrate_bot_type_to_user_type_spec.rb
deleted file mode 100644
index 54cf3450692..00000000000
--- a/spec/migrations/migrate_bot_type_to_user_type_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe MigrateBotTypeToUserType, :migration do
- let(:users) { table(:users) }
-
- it 'updates bots & ignores humans' do
- users.create!(email: 'human', bot_type: nil, projects_limit: 0)
- users.create!(email: 'support_bot', bot_type: 1, projects_limit: 0)
- users.create!(email: 'alert_bot', bot_type: 2, projects_limit: 0)
- users.create!(email: 'visual_review_bot', bot_type: 3, projects_limit: 0)
-
- migrate!
-
- expect(users.where.not(user_type: nil).map(&:user_type)).to match_array([1, 2, 3])
- end
-end
diff --git a/spec/migrations/migrate_commit_notes_mentions_to_db_spec.rb b/spec/migrations/migrate_commit_notes_mentions_to_db_spec.rb
deleted file mode 100644
index aa2aa6297c4..00000000000
--- a/spec/migrations/migrate_commit_notes_mentions_to_db_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateCommitNotesMentionsToDb, :migration, :sidekiq do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:notes) { table(:notes) }
-
- let(:user) { users.create!(name: 'root', email: 'root@example.com', username: 'root', projects_limit: 0) }
- let(:group) { namespaces.create!(name: 'group1', path: 'group1', owner_id: user.id) }
- let(:project) { projects.create!(name: 'gitlab1', path: 'gitlab1', namespace_id: group.id, visibility_level: 0) }
-
- let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '', 'group/project') }
- let(:commit) { Commit.new(RepoHelpers.sample_commit, project) }
- let(:commit_user_mentions) { table(:commit_user_mentions) }
-
- let!(:resource1) { notes.create!(commit_id: commit.id, noteable_type: 'Commit', project_id: project.id, author_id: user.id, note: 'note1 for @root to check') }
- let!(:resource2) { notes.create!(commit_id: commit.id, noteable_type: 'Commit', project_id: project.id, author_id: user.id, note: 'note1 for @root to check') }
- let!(:resource3) { notes.create!(commit_id: commit.id, noteable_type: 'Commit', project_id: project.id, author_id: user.id, note: 'note1 for @root to check', system: true) }
-
- # non-migrateable resources
- # this note is already migrated, as it has a record in the commit_user_mentions table
- let!(:resource4) { notes.create!(note: 'note3 for @root to check', commit_id: commit.id, noteable_type: 'Commit') }
- let!(:user_mention) { commit_user_mentions.create!(commit_id: commit.id, note_id: resource4.id, mentioned_users_ids: [1]) }
- # this should have pointed to an inexistent commit record in a commits table
- # but because commit is not an AR, we'll just make it so that the note does not have mentions, i.e. no `@` char.
- let!(:resource5) { notes.create!(note: 'note3 to check', commit_id: 'abc', noteable_type: 'Commit') }
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
- end
-
- it_behaves_like 'schedules resource mentions migration', Commit, true
-end
diff --git a/spec/migrations/migrate_compliance_framework_enum_to_database_framework_record_spec.rb b/spec/migrations/migrate_compliance_framework_enum_to_database_framework_record_spec.rb
deleted file mode 100644
index 6a9a75a7019..00000000000
--- a/spec/migrations/migrate_compliance_framework_enum_to_database_framework_record_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateComplianceFrameworkEnumToDatabaseFrameworkRecord, schema: 20201005092753 do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:project_compliance_framework_settings) { table(:project_compliance_framework_settings) }
- let(:compliance_management_frameworks) { table(:compliance_management_frameworks) }
-
- let(:gdpr_framework) { 1 }
- let(:sox_framework) { 5 }
-
- let!(:root_group) { namespaces.create!(type: 'Group', name: 'a', path: 'a') }
- let!(:sub_group) { namespaces.create!(type: 'Group', name: 'b', path: 'b', parent_id: root_group.id) }
- let!(:sub_sub_group) { namespaces.create!(type: 'Group', name: 'c', path: 'c', parent_id: sub_group.id) }
-
- let!(:namespace) { namespaces.create!(name: 'd', path: 'd') }
-
- let!(:project_on_root_level) { projects.create!(namespace_id: root_group.id) }
- let!(:project_on_sub_sub_level_1) { projects.create!(namespace_id: sub_sub_group.id) }
- let!(:project_on_sub_sub_level_2) { projects.create!(namespace_id: sub_sub_group.id) }
- let!(:project_on_namespace) { projects.create!(namespace_id: namespace.id) }
-
- let!(:project_on_root_level_compliance_setting) { project_compliance_framework_settings.create!(project_id: project_on_root_level.id, framework: gdpr_framework) }
- let!(:project_on_sub_sub_level_compliance_setting_1) { project_compliance_framework_settings.create!(project_id: project_on_sub_sub_level_1.id, framework: sox_framework) }
- let!(:project_on_sub_sub_level_compliance_setting_2) { project_compliance_framework_settings.create!(project_id: project_on_sub_sub_level_2.id, framework: gdpr_framework) }
- let!(:project_on_namespace_level_compliance_setting) { project_compliance_framework_settings.create!(project_id: project_on_namespace.id, framework: gdpr_framework) }
-
- subject { described_class.new.up }
-
- it 'updates the project settings' do
- subject
-
- gdpr_framework = compliance_management_frameworks.find_by(namespace_id: root_group.id, name: 'GDPR')
- expect(project_on_root_level_compliance_setting.reload.framework_id).to eq(gdpr_framework.id)
- expect(project_on_sub_sub_level_compliance_setting_2.reload.framework_id).to eq(gdpr_framework.id)
-
- sox_framework = compliance_management_frameworks.find_by(namespace_id: root_group.id, name: 'SOX')
- expect(project_on_sub_sub_level_compliance_setting_1.reload.framework_id).to eq(sox_framework.id)
-
- gdpr_framework = compliance_management_frameworks.find_by(namespace_id: namespace.id, name: 'GDPR')
- expect(project_on_namespace_level_compliance_setting.reload.framework_id).to eq(gdpr_framework.id)
- end
-
- it 'adds two framework records' do
- subject
-
- expect(compliance_management_frameworks.count).to eq(3)
- end
-end
diff --git a/spec/migrations/migrate_create_commit_signature_worker_sidekiq_queue_spec.rb b/spec/migrations/migrate_create_commit_signature_worker_sidekiq_queue_spec.rb
deleted file mode 100644
index 0e631f255bf..00000000000
--- a/spec/migrations/migrate_create_commit_signature_worker_sidekiq_queue_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateCreateCommitSignatureWorkerSidekiqQueue, :sidekiq, :redis do
- include Gitlab::Database::MigrationHelpers
- include StubWorker
-
- context 'when there are jobs in the queue' do
- it 'correctly migrates queue when migrating up' do
- Sidekiq::Testing.disable! do
- stub_worker(queue: 'create_commit_signature').perform_async('Something', [1])
- stub_worker(queue: 'create_gpg_signature').perform_async('Something', [1])
-
- described_class.new.up
-
- expect(sidekiq_queue_length('create_gpg_signature')).to eq 0
- expect(sidekiq_queue_length('create_commit_signature')).to eq 2
- end
- end
-
- it 'correctly migrates queue when migrating down' do
- Sidekiq::Testing.disable! do
- stub_worker(queue: 'create_gpg_signature').perform_async('Something', [1])
-
- described_class.new.down
-
- expect(sidekiq_queue_length('create_gpg_signature')).to eq 1
- expect(sidekiq_queue_length('create_commit_signature')).to eq 0
- end
- end
- end
-
- context 'when there are no jobs in the queues' do
- it 'does not raise error when migrating up' do
- expect { described_class.new.up }.not_to raise_error
- end
-
- it 'does not raise error when migrating down' do
- expect { described_class.new.down }.not_to raise_error
- end
- end
-end
diff --git a/spec/migrations/migrate_incident_issues_to_incident_type_spec.rb b/spec/migrations/migrate_incident_issues_to_incident_type_spec.rb
deleted file mode 100644
index acac6114c71..00000000000
--- a/spec/migrations/migrate_incident_issues_to_incident_type_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateIncidentIssuesToIncidentType do
- let(:migration) { described_class.new }
-
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
- let(:labels) { table(:labels) }
- let(:issues) { table(:issues) }
- let(:label_links) { table(:label_links) }
- let(:label_props) { IncidentManagement::CreateIncidentLabelService::LABEL_PROPERTIES }
-
- let(:namespace) { namespaces.create!(name: 'foo', path: 'foo') }
- let!(:project) { projects.create!(namespace_id: namespace.id) }
- let(:label) { labels.create!(project_id: project.id, **label_props) }
- let!(:incident_issue) { issues.create!(project_id: project.id) }
- let!(:other_issue) { issues.create!(project_id: project.id) }
-
- # Issue issue_type enum
- let(:issue_type) { 0 }
- let(:incident_type) { 1 }
-
- before do
- label_links.create!(target_id: incident_issue.id, label_id: label.id, target_type: 'Issue')
- end
-
- describe '#up' do
- it 'updates the incident issue type' do
- expect { migrate! }
- .to change { incident_issue.reload.issue_type }
- .from(issue_type)
- .to(incident_type)
-
- expect(other_issue.reload.issue_type).to eql(issue_type)
- end
- end
-
- describe '#down' do
- let!(:incident_issue) { issues.create!(project_id: project.id, issue_type: issue_type) }
-
- it 'updates the incident issue type' do
- migration.up
-
- expect { migration.down }
- .to change { incident_issue.reload.issue_type }
- .from(incident_type)
- .to(issue_type)
-
- expect(other_issue.reload.issue_type).to eql(issue_type)
- end
- end
-end
diff --git a/spec/migrations/migrate_merge_request_mentions_to_db_spec.rb b/spec/migrations/migrate_merge_request_mentions_to_db_spec.rb
deleted file mode 100644
index 06493c4e5c1..00000000000
--- a/spec/migrations/migrate_merge_request_mentions_to_db_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateMergeRequestMentionsToDb, :migration do
- let(:users) { table(:users) }
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
- let(:merge_requests) { table(:merge_requests) }
- let(:merge_request_user_mentions) { table(:merge_request_user_mentions) }
-
- let(:user) { users.create!(name: 'root', email: 'root@example.com', username: 'root', projects_limit: 0) }
- let(:group) { namespaces.create!(name: 'group1', path: 'group1', owner_id: user.id, type: 'Group') }
- let(:project) { projects.create!(name: 'gitlab1', path: 'gitlab1', namespace_id: group.id, visibility_level: 0) }
-
- # migrateable resources
- let(:common_args) { { source_branch: 'master', source_project_id: project.id, target_project_id: project.id, author_id: user.id, description: 'mr description with @root mention' } }
- let!(:resource1) { merge_requests.create!(common_args.merge(title: "title 1", state_id: 1, target_branch: 'feature1')) }
- let!(:resource2) { merge_requests.create!(common_args.merge(title: "title 2", state_id: 1, target_branch: 'feature2')) }
- let!(:resource3) { merge_requests.create!(common_args.merge(title: "title 3", state_id: 1, target_branch: 'feature3')) }
-
- # non-migrateable resources
- # this merge request is already migrated, as it has a record in the merge_request_user_mentions table
- let!(:resource4) { merge_requests.create!(common_args.merge(title: "title 3", state_id: 1, target_branch: 'feature3')) }
- let!(:user_mention) { merge_request_user_mentions.create!(merge_request_id: resource4.id, mentioned_users_ids: [1]) }
-
- let!(:resource5) { merge_requests.create!(common_args.merge(title: "title 3", description: 'description with no mention', state_id: 1, target_branch: 'feature3')) }
-
- it_behaves_like 'schedules resource mentions migration', MergeRequest, false
-end
diff --git a/spec/migrations/migrate_store_security_reports_sidekiq_queue_spec.rb b/spec/migrations/migrate_store_security_reports_sidekiq_queue_spec.rb
deleted file mode 100644
index 35cb6104fe2..00000000000
--- a/spec/migrations/migrate_store_security_reports_sidekiq_queue_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateStoreSecurityReportsSidekiqQueue, :redis do
- include Gitlab::Database::MigrationHelpers
- include StubWorker
-
- context 'when there are jobs in the queue' do
- it 'migrates queue when migrating up' do
- Sidekiq::Testing.disable! do
- stub_worker(queue: 'pipeline_default:store_security_reports').perform_async(1, 5)
-
- described_class.new.up
-
- expect(sidekiq_queue_length('pipeline_default:store_security_reports')).to eq 0
- expect(sidekiq_queue_length('security_scans:store_security_reports')).to eq 1
- end
- end
-
- it 'migrates queue when migrating down' do
- Sidekiq::Testing.disable! do
- stub_worker(queue: 'security_scans:store_security_reports').perform_async(1, 5)
-
- described_class.new.down
-
- expect(sidekiq_queue_length('pipeline_default:store_security_reports')).to eq 1
- expect(sidekiq_queue_length('security_scans:store_security_reports')).to eq 0
- end
- end
- end
-end
diff --git a/spec/migrations/migrate_sync_security_reports_to_report_approval_rules_sidekiq_queue_spec.rb b/spec/migrations/migrate_sync_security_reports_to_report_approval_rules_sidekiq_queue_spec.rb
deleted file mode 100644
index a9e386301b8..00000000000
--- a/spec/migrations/migrate_sync_security_reports_to_report_approval_rules_sidekiq_queue_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe MigrateSyncSecurityReportsToReportApprovalRulesSidekiqQueue, :redis do
- include Gitlab::Database::MigrationHelpers
- include StubWorker
-
- context 'when there are jobs in the queue' do
- it 'migrates queue when migrating up' do
- Sidekiq::Testing.disable! do
- stub_worker(queue: 'pipeline_default:sync_security_reports_to_report_approval_rules').perform_async(1, 5)
-
- described_class.new.up
-
- expect(sidekiq_queue_length('pipeline_default:sync_security_reports_to_report_approval_rules')).to eq 0
- expect(sidekiq_queue_length('security_scans:sync_security_reports_to_report_approval_rules')).to eq 1
- end
- end
-
- it 'migrates queue when migrating down' do
- Sidekiq::Testing.disable! do
- stub_worker(queue: 'security_scans:sync_security_reports_to_report_approval_rules').perform_async(1, 5)
-
- described_class.new.down
-
- expect(sidekiq_queue_length('pipeline_default:sync_security_reports_to_report_approval_rules')).to eq 1
- expect(sidekiq_queue_length('security_scans:sync_security_reports_to_report_approval_rules')).to eq 0
- end
- end
- end
-end
diff --git a/spec/migrations/orphaned_invite_tokens_cleanup_spec.rb b/spec/migrations/orphaned_invite_tokens_cleanup_spec.rb
index be5e7756514..b33e29f82e2 100644
--- a/spec/migrations/orphaned_invite_tokens_cleanup_spec.rb
+++ b/spec/migrations/orphaned_invite_tokens_cleanup_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration! 'orphaned_invite_tokens_cleanup'
+require_migration!
RSpec.describe OrphanedInviteTokensCleanup, :migration do
def create_member(**extra_attributes)
diff --git a/spec/migrations/populate_remaining_missing_dismissal_information_for_vulnerabilities_spec.rb b/spec/migrations/populate_remaining_missing_dismissal_information_for_vulnerabilities_spec.rb
deleted file mode 100644
index 986436971ac..00000000000
--- a/spec/migrations/populate_remaining_missing_dismissal_information_for_vulnerabilities_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe PopulateRemainingMissingDismissalInformationForVulnerabilities do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:vulnerabilities) { table(:vulnerabilities) }
-
- let(:user) { users.create!(name: 'test', email: 'test@example.com', projects_limit: 5) }
- let(:namespace) { namespaces.create!(name: 'gitlab', path: 'gitlab-org') }
- let(:project) { projects.create!(namespace_id: namespace.id, name: 'foo') }
-
- let(:states) { { detected: 1, dismissed: 2, resolved: 3, confirmed: 4 } }
- let!(:vulnerability_1) { vulnerabilities.create!(title: 'title', state: states[:detected], severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id) }
- let!(:vulnerability_2) { vulnerabilities.create!(title: 'title', state: states[:dismissed], severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id) }
- let!(:vulnerability_3) { vulnerabilities.create!(title: 'title', state: states[:resolved], severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id) }
- let!(:vulnerability_4) { vulnerabilities.create!(title: 'title', state: states[:confirmed], severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id) }
-
- describe '#perform' do
- it 'calls the background migration class instance with broken vulnerability IDs' do
- expect_next_instance_of(::Gitlab::BackgroundMigration::PopulateMissingVulnerabilityDismissalInformation) do |migrator|
- expect(migrator).to receive(:perform).with(vulnerability_2.id)
- end
-
- migrate!
- end
- end
-end
diff --git a/spec/migrations/remove_additional_application_settings_rows_spec.rb b/spec/migrations/remove_additional_application_settings_rows_spec.rb
deleted file mode 100644
index d781195abf2..00000000000
--- a/spec/migrations/remove_additional_application_settings_rows_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe RemoveAdditionalApplicationSettingsRows do
- let(:application_settings) { table(:application_settings) }
-
- it 'removes additional rows from application settings' do
- 3.times { application_settings.create! }
- latest_settings = application_settings.create!
-
- disable_migrations_output { migrate! }
-
- expect(application_settings.count).to eq(1)
- expect(application_settings.first).to eq(latest_settings)
- end
-
- it 'leaves only row in application_settings' do
- latest_settings = application_settings.create!
-
- disable_migrations_output { migrate! }
-
- expect(application_settings.first).to eq(latest_settings)
- end
-end
diff --git a/spec/migrations/remove_deprecated_jenkins_service_records_spec.rb b/spec/migrations/remove_deprecated_jenkins_service_records_spec.rb
deleted file mode 100644
index 817cf183e0c..00000000000
--- a/spec/migrations/remove_deprecated_jenkins_service_records_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-require_migration!('ensure_deprecated_jenkins_service_records_removal')
-
-RSpec.shared_examples 'remove DeprecatedJenkinsService records' do
- let(:services) { table(:services) }
-
- before do
- services.create!(type: 'JenkinsDeprecatedService')
- services.create!(type: 'JenkinsService')
- end
-
- it 'deletes services when template and attached to a project' do
- expect { migrate! }
- .to change { services.where(type: 'JenkinsDeprecatedService').count }.from(1).to(0)
- .and not_change { services.where(type: 'JenkinsService').count }
- end
-end
-
-RSpec.describe RemoveDeprecatedJenkinsServiceRecords, :migration do
- it_behaves_like 'remove DeprecatedJenkinsService records'
-end
-
-RSpec.describe EnsureDeprecatedJenkinsServiceRecordsRemoval, :migration do
- it_behaves_like 'remove DeprecatedJenkinsService records'
-end
diff --git a/spec/migrations/remove_duplicate_labels_from_groups_spec.rb b/spec/migrations/remove_duplicate_labels_from_groups_spec.rb
deleted file mode 100644
index 125314f70dd..00000000000
--- a/spec/migrations/remove_duplicate_labels_from_groups_spec.rb
+++ /dev/null
@@ -1,227 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!('remove_duplicate_labels_from_group')
-
-RSpec.describe RemoveDuplicateLabelsFromGroup do
- let(:labels_table) { table(:labels) }
- let(:labels) { labels_table.all }
- let(:projects_table) { table(:projects) }
- let(:projects) { projects_table.all }
- let(:namespaces_table) { table(:namespaces) }
- let(:namespaces) { namespaces_table.all }
- let(:backup_labels_table) { table(:backup_labels) }
- let(:backup_labels) { backup_labels_table.all }
- # for those cases where we can't use the activerecord class because the `type` column
- # makes it think it has polymorphism and should be/have a Label subclass
- let(:sql_backup_labels) { ApplicationRecord.connection.execute('SELECT * from backup_labels') }
-
- # all the possible tables with records that may have a relationship with a label
- let(:analytics_cycle_analytics_group_stages_table) { table(:analytics_cycle_analytics_group_stages) }
- let(:analytics_cycle_analytics_project_stages_table) { table(:analytics_cycle_analytics_project_stages) }
- let(:board_labels_table) { table(:board_labels) }
- let(:label_links_table) { table(:label_links) }
- let(:label_priorities_table) { table(:label_priorities) }
- let(:lists_table) { table(:lists) }
- let(:resource_label_events_table) { table(:resource_label_events) }
-
- let!(:group_one) { namespaces_table.create!(id: 1, type: 'Group', name: 'group', path: 'group') }
- let!(:project_one) do
- projects_table.create!(id: 1, name: 'project', path: 'project',
- visibility_level: 0, namespace_id: group_one.id)
- end
-
- let(:label_title) { 'bug' }
- let(:label_color) { 'red' }
- let(:label_description) { 'nice label' }
- let(:project_id) { project_one.id }
- let(:group_id) { group_one.id }
- let(:other_title) { 'feature' }
-
- let(:group_label_attributes) do
- {
- title: label_title, color: label_color, group_id: group_id, type: 'GroupLabel', template: false, description: label_description
- }
- end
-
- let(:migration) { described_class.new }
-
- describe 'removing full duplicates' do
- context 'when there are no duplicate labels' do
- let!(:first_label) { labels_table.create!(group_label_attributes.merge(id: 1, title: "a different label")) }
- let!(:second_label) { labels_table.create!(group_label_attributes.merge(id: 2, title: "a totally different label")) }
-
- it 'does not remove anything' do
- expect { migration.up }.not_to change { backup_labels_table.count }
- end
-
- it 'restores removed records when rolling back - no change' do
- migration.up
-
- expect { migration.down }.not_to change { labels_table.count }
- end
- end
-
- context 'with duplicates with no relationships' do
- let!(:first_label) { labels_table.create!(group_label_attributes.merge(id: 1)) }
- let!(:second_label) { labels_table.create!(group_label_attributes.merge(id: 2)) }
- let!(:third_label) { labels_table.create!(group_label_attributes.merge(id: 3, title: other_title)) }
- let!(:fourth_label) { labels_table.create!(group_label_attributes.merge(id: 4, title: other_title)) }
-
- it 'creates a backup record for each removed record' do
- expect { migration.up }.to change { backup_labels_table.count }.from(0).to(2)
- end
-
- it 'creates the correct backup records with `create` restore_action' do
- migration.up
-
- expect(sql_backup_labels.find { |bl| bl["id"] == 2 }).to include(second_label.attributes.merge("restore_action" => described_class::CREATE, "new_title" => nil, "created_at" => anything, "updated_at" => anything))
- expect(sql_backup_labels.find { |bl| bl["id"] == 4 }).to include(fourth_label.attributes.merge("restore_action" => described_class::CREATE, "new_title" => nil, "created_at" => anything, "updated_at" => anything))
- end
-
- it 'deletes all but one' do
- migration.up
-
- expect { second_label.reload }.to raise_error(ActiveRecord::RecordNotFound)
- expect { fourth_label.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
-
- it 'restores removed records on rollback' do
- second_label_attributes = modified_attributes(second_label)
- fourth_label_attributes = modified_attributes(fourth_label)
-
- migration.up
-
- migration.down
-
- expect(second_label.attributes).to include(second_label_attributes)
- expect(fourth_label.attributes).to include(fourth_label_attributes)
- end
- end
-
- context 'two duplicate records, one of which has a relationship' do
- let!(:first_label) { labels_table.create!(group_label_attributes.merge(id: 1)) }
- let!(:second_label) { labels_table.create!(group_label_attributes.merge(id: 2)) }
- let!(:label_priority) { label_priorities_table.create!(label_id: second_label.id, project_id: project_id, priority: 1) }
-
- it 'does not remove anything' do
- expect { migration.up }.not_to change { labels_table.count }
- end
-
- it 'does not create a backup record with `create` restore_action' do
- expect { migration.up }.not_to change { backup_labels_table.where(restore_action: described_class::CREATE).count }
- end
-
- it 'restores removed records when rolling back - no change' do
- migration.up
-
- expect { migration.down }.not_to change { labels_table.count }
- end
- end
-
- context 'multiple duplicates, a subset of which have relationships' do
- let!(:first_label) { labels_table.create!(group_label_attributes.merge(id: 1)) }
- let!(:second_label) { labels_table.create!(group_label_attributes.merge(id: 2)) }
- let!(:label_priority_for_second_label) { label_priorities_table.create!(label_id: second_label.id, project_id: project_id, priority: 1) }
- let!(:third_label) { labels_table.create!(group_label_attributes.merge(id: 3)) }
- let!(:fourth_label) { labels_table.create!(group_label_attributes.merge(id: 4)) }
- let!(:label_priority_for_fourth_label) { label_priorities_table.create!(label_id: fourth_label.id, project_id: project_id, priority: 2) }
-
- it 'creates a backup record with `create` restore_action for each removed record' do
- expect { migration.up }.to change { backup_labels_table.where(restore_action: described_class::CREATE).count }.from(0).to(1)
- end
-
- it 'creates the correct backup records' do
- migration.up
-
- expect(sql_backup_labels.find { |bl| bl["id"] == 3 }).to include(third_label.attributes.merge("restore_action" => described_class::CREATE, "new_title" => nil, "created_at" => anything, "updated_at" => anything))
- end
-
- it 'deletes the duplicate record' do
- migration.up
-
- expect { first_label.reload }.not_to raise_error
- expect { second_label.reload }.not_to raise_error
- expect { third_label.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
-
- it 'restores removed records on rollback' do
- third_label_attributes = modified_attributes(third_label)
-
- migration.up
- migration.down
-
- expect(third_label.attributes).to include(third_label_attributes)
- end
- end
- end
-
- describe 'renaming partial duplicates' do
- # partial duplicates - only group_id and title match. Distinct colour prevents deletion.
- context 'when there are no duplicate labels' do
- let!(:first_label) { labels_table.create!(group_label_attributes.merge(id: 1, title: "a unique label", color: 'green')) }
- let!(:second_label) { labels_table.create!(group_label_attributes.merge(id: 2, title: "a totally different, unique, label", color: 'blue')) }
-
- it 'does not rename anything' do
- expect { migration.up }.not_to change { backup_labels_table.count }
- end
- end
-
- context 'with duplicates with no relationships' do
- let!(:first_label) { labels_table.create!(group_label_attributes.merge(id: 1, color: 'green')) }
- let!(:second_label) { labels_table.create!(group_label_attributes.merge(id: 2, color: 'blue')) }
- let!(:third_label) { labels_table.create!(group_label_attributes.merge(id: 3, title: other_title, color: 'purple')) }
- let!(:fourth_label) { labels_table.create!(group_label_attributes.merge(id: 4, title: other_title, color: 'yellow')) }
-
- it 'creates a backup record for each renamed record' do
- expect { migration.up }.to change { backup_labels_table.count }.from(0).to(2)
- end
-
- it 'creates the correct backup records with `rename` restore_action' do
- migration.up
-
- expect(sql_backup_labels.find { |bl| bl["id"] == 2 }).to include(second_label.attributes.merge("restore_action" => described_class::RENAME, "created_at" => anything, "updated_at" => anything))
- expect(sql_backup_labels.find { |bl| bl["id"] == 4 }).to include(fourth_label.attributes.merge("restore_action" => described_class::RENAME, "created_at" => anything, "updated_at" => anything))
- end
-
- it 'modifies the titles of the partial duplicates' do
- migration.up
-
- expect(second_label.reload.title).to match(/#{label_title}_duplicate#{second_label.id}$/)
- expect(fourth_label.reload.title).to match(/#{other_title}_duplicate#{fourth_label.id}$/)
- end
-
- it 'restores renamed records on rollback' do
- second_label_attributes = modified_attributes(second_label)
- fourth_label_attributes = modified_attributes(fourth_label)
-
- migration.up
-
- migration.down
-
- expect(second_label.reload.attributes).to include(second_label_attributes)
- expect(fourth_label.reload.attributes).to include(fourth_label_attributes)
- end
-
- context 'when the labels have a long title that might overflow' do
- let(:long_title) { "a" * 255 }
-
- before do
- first_label.update_attribute(:title, long_title)
- second_label.update_attribute(:title, long_title)
- end
-
- it 'keeps the length within the limit' do
- migration.up
-
- expect(second_label.reload.title).to eq("#{"a" * 244}_duplicate#{second_label.id}")
- expect(second_label.title.length).to eq(255)
- end
- end
- end
- end
-
- def modified_attributes(label)
- label.attributes.except('created_at', 'updated_at')
- end
-end
diff --git a/spec/migrations/remove_duplicate_labels_from_project_spec.rb b/spec/migrations/remove_duplicate_labels_from_project_spec.rb
deleted file mode 100644
index eeb9f155e01..00000000000
--- a/spec/migrations/remove_duplicate_labels_from_project_spec.rb
+++ /dev/null
@@ -1,239 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RemoveDuplicateLabelsFromProject do
- let(:labels_table) { table(:labels) }
- let(:labels) { labels_table.all }
- let(:projects_table) { table(:projects) }
- let(:projects) { projects_table.all }
- let(:namespaces_table) { table(:namespaces) }
- let(:namespaces) { namespaces_table.all }
- let(:backup_labels_table) { table(:backup_labels) }
- let(:backup_labels) { backup_labels_table.all }
-
- # all the possible tables with records that may have a relationship with a label
- let(:analytics_cycle_analytics_group_stages_table) { table(:analytics_cycle_analytics_group_stages) }
- let(:analytics_cycle_analytics_project_stages_table) { table(:analytics_cycle_analytics_project_stages) }
- let(:board_labels_table) { table(:board_labels) }
- let(:label_links_table) { table(:label_links) }
- let(:label_priorities_table) { table(:label_priorities) }
- let(:lists_table) { table(:lists) }
- let(:resource_label_events_table) { table(:resource_label_events) }
-
- let!(:group_one) { namespaces_table.create!(id: 1, type: 'Group', name: 'group', path: 'group') }
- let!(:project_one) do
- projects_table.create!(id: 1, name: 'project', path: 'project',
- visibility_level: 0, namespace_id: group_one.id)
- end
-
- let(:label_title) { 'bug' }
- let(:label_color) { 'red' }
- let(:label_description) { 'nice label' }
- let(:group_id) { group_one.id }
- let(:project_id) { project_one.id }
- let(:other_title) { 'feature' }
-
- let(:group_label_attributes) do
- {
- title: label_title, color: label_color, group_id: group_id, type: 'GroupLabel', template: false, description: label_description
- }
- end
-
- let(:project_label_attributes) do
- {
- title: label_title, color: label_color, project_id: project_id, type: 'ProjectLabel', template: false, description: label_description
- }
- end
-
- let(:migration) { described_class.new }
-
- describe 'removing full duplicates' do
- context 'when there are no duplicate labels' do
- let!(:first_label) { labels_table.create!(project_label_attributes.merge(id: 1, title: "a different label")) }
- let!(:second_label) { labels_table.create!(project_label_attributes.merge(id: 2, title: "a totally different label")) }
-
- it 'does not remove anything' do
- expect { migration.up }.not_to change { backup_labels_table.count }
- end
-
- it 'restores removed records when rolling back - no change' do
- migration.up
-
- expect { migration.down }.not_to change { labels_table.count }
- end
- end
-
- context 'with duplicates with no relationships' do
- # can't use the activerecord class because the `type` makes it think it has polymorphism and should be/have a ProjectLabel subclass
- let(:backup_labels) { ApplicationRecord.connection.execute('SELECT * from backup_labels') }
-
- let!(:first_label) { labels_table.create!(project_label_attributes.merge(id: 1)) }
- let!(:second_label) { labels_table.create!(project_label_attributes.merge(id: 2)) }
- let!(:third_label) { labels_table.create!(project_label_attributes.merge(id: 3, title: other_title)) }
- let!(:fourth_label) { labels_table.create!(project_label_attributes.merge(id: 4, title: other_title)) }
-
- it 'creates a backup record for each removed record' do
- expect { migration.up }.to change { backup_labels_table.count }.from(0).to(2)
- end
-
- it 'creates the correct backup records with `create` restore_action' do
- migration.up
-
- expect(backup_labels.find { |bl| bl["id"] == 2 }).to include(second_label.attributes.merge("restore_action" => described_class::CREATE, "new_title" => nil, "created_at" => anything, "updated_at" => anything))
- expect(backup_labels.find { |bl| bl["id"] == 4 }).to include(fourth_label.attributes.merge("restore_action" => described_class::CREATE, "new_title" => nil, "created_at" => anything, "updated_at" => anything))
- end
-
- it 'deletes all but one' do
- migration.up
-
- expect { second_label.reload }.to raise_error(ActiveRecord::RecordNotFound)
- expect { fourth_label.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
-
- it 'restores removed records on rollback' do
- second_label_attributes = modified_attributes(second_label)
- fourth_label_attributes = modified_attributes(fourth_label)
-
- migration.up
-
- migration.down
-
- expect(second_label.attributes).to include(second_label_attributes)
- expect(fourth_label.attributes).to include(fourth_label_attributes)
- end
- end
-
- context 'two duplicate records, one of which has a relationship' do
- let!(:first_label) { labels_table.create!(project_label_attributes.merge(id: 1)) }
- let!(:second_label) { labels_table.create!(project_label_attributes.merge(id: 2)) }
- let!(:label_priority) { label_priorities_table.create!(label_id: second_label.id, project_id: project_id, priority: 1) }
-
- it 'does not remove anything' do
- expect { migration.up }.not_to change { labels_table.count }
- end
-
- it 'does not create a backup record with `create` restore_action' do
- expect { migration.up }.not_to change { backup_labels_table.where(restore_action: described_class::CREATE).count }
- end
-
- it 'restores removed records when rolling back - no change' do
- migration.up
-
- expect { migration.down }.not_to change { labels_table.count }
- end
- end
-
- context 'multiple duplicates, a subset of which have relationships' do
- let!(:first_label) { labels_table.create!(project_label_attributes.merge(id: 1)) }
- let!(:second_label) { labels_table.create!(project_label_attributes.merge(id: 2)) }
- let!(:label_priority_for_second_label) { label_priorities_table.create!(label_id: second_label.id, project_id: project_id, priority: 1) }
- let!(:third_label) { labels_table.create!(project_label_attributes.merge(id: 3)) }
- let!(:fourth_label) { labels_table.create!(project_label_attributes.merge(id: 4)) }
- let!(:label_priority_for_fourth_label) { label_priorities_table.create!(label_id: fourth_label.id, project_id: project_id, priority: 2) }
-
- it 'creates a backup record with `create` restore_action for each removed record' do
- expect { migration.up }.to change { backup_labels_table.where(restore_action: described_class::CREATE).count }.from(0).to(1)
- end
-
- it 'creates the correct backup records' do
- migration.up
-
- # can't use the activerecord class because the `type` column makes it think it has polymorphism and should be/have a ProjectLabel subclass
- backup_labels = ApplicationRecord.connection.execute('SELECT * from backup_labels')
-
- expect(backup_labels.find { |bl| bl["id"] == 3 }).to include(third_label.attributes.merge("restore_action" => described_class::CREATE, "new_title" => nil, "created_at" => anything, "updated_at" => anything))
- end
-
- it 'deletes the duplicate record' do
- migration.up
-
- expect { first_label.reload }.not_to raise_error
- expect { second_label.reload }.not_to raise_error
- expect { third_label.reload }.to raise_error(ActiveRecord::RecordNotFound)
- end
-
- it 'restores removed records on rollback' do
- third_label_attributes = modified_attributes(third_label)
-
- migration.up
- migration.down
-
- expect(third_label.attributes).to include(third_label_attributes)
- end
- end
- end
-
- describe 'renaming partial duplicates' do
- # partial duplicates - only project_id and title match. Distinct colour prevents deletion.
- context 'when there are no duplicate labels' do
- let!(:first_label) { labels_table.create!(project_label_attributes.merge(id: 1, title: "a unique label", color: 'green')) }
- let!(:second_label) { labels_table.create!(project_label_attributes.merge(id: 2, title: "a totally different, unique, label", color: 'blue')) }
-
- it 'does not rename anything' do
- expect { migration.up }.not_to change { backup_labels_table.count }
- end
- end
-
- context 'with duplicates with no relationships' do
- let!(:first_label) { labels_table.create!(project_label_attributes.merge(id: 1, color: 'green')) }
- let!(:second_label) { labels_table.create!(project_label_attributes.merge(id: 2, color: 'blue')) }
- let!(:third_label) { labels_table.create!(project_label_attributes.merge(id: 3, title: other_title, color: 'purple')) }
- let!(:fourth_label) { labels_table.create!(project_label_attributes.merge(id: 4, title: other_title, color: 'yellow')) }
-
- it 'creates a backup record for each renamed record' do
- expect { migration.up }.to change { backup_labels_table.count }.from(0).to(2)
- end
-
- it 'creates the correct backup records with `rename` restore_action' do
- migration.up
-
- # can't use the activerecord class because the `type` makes it think it has polymorphism and should be/have a ProjectLabel subclass
- backup_labels = ApplicationRecord.connection.execute('SELECT * from backup_labels')
-
- expect(backup_labels.find { |bl| bl["id"] == 2 }).to include(second_label.attributes.merge("restore_action" => described_class::RENAME, "created_at" => anything, "updated_at" => anything))
- expect(backup_labels.find { |bl| bl["id"] == 4 }).to include(fourth_label.attributes.merge("restore_action" => described_class::RENAME, "created_at" => anything, "updated_at" => anything))
- end
-
- it 'modifies the titles of the partial duplicates' do
- migration.up
-
- expect(second_label.reload.title).to match(/#{label_title}_duplicate#{second_label.id}$/)
- expect(fourth_label.reload.title).to match(/#{other_title}_duplicate#{fourth_label.id}$/)
- end
-
- it 'restores renamed records on rollback' do
- second_label_attributes = modified_attributes(second_label)
- fourth_label_attributes = modified_attributes(fourth_label)
-
- migration.up
-
- migration.down
-
- expect(second_label.reload.attributes).to include(second_label_attributes)
- expect(fourth_label.reload.attributes).to include(fourth_label_attributes)
- end
-
- context 'when the labels have a long title that might overflow' do
- let(:long_title) { "a" * 255 }
-
- before do
- first_label.update_attribute(:title, long_title)
- second_label.update_attribute(:title, long_title)
- end
-
- it 'keeps the length within the limit' do
- migration.up
-
- expect(second_label.reload.title).to eq("#{"a" * 244}_duplicate#{second_label.id}")
- expect(second_label.title.length).to eq 255
- end
- end
- end
- end
-
- def modified_attributes(label)
- label.attributes.except('created_at', 'updated_at')
- end
-end
diff --git a/spec/migrations/remove_gitlab_issue_tracker_service_records_spec.rb b/spec/migrations/remove_gitlab_issue_tracker_service_records_spec.rb
deleted file mode 100644
index b4aa5187d4c..00000000000
--- a/spec/migrations/remove_gitlab_issue_tracker_service_records_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RemoveGitlabIssueTrackerServiceRecords do
- let(:services) { table(:services) }
-
- before do
- 5.times { services.create!(type: 'GitlabIssueTrackerService') }
- services.create!(type: 'SomeOtherType')
- end
-
- it 'removes services records of type GitlabIssueTrackerService', :aggregate_failures do
- expect { migrate! }.to change { services.count }.from(6).to(1)
- expect(services.first.type).to eq('SomeOtherType')
- expect(services.where(type: 'GitlabIssueTrackerService')).to be_empty
- end
-end
diff --git a/spec/migrations/remove_orphan_service_hooks_spec.rb b/spec/migrations/remove_orphan_service_hooks_spec.rb
deleted file mode 100644
index 71e70daf1e6..00000000000
--- a/spec/migrations/remove_orphan_service_hooks_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-require_migration!('add_web_hooks_service_foreign_key')
-
-RSpec.describe RemoveOrphanServiceHooks, schema: 20201203123201 do
- let(:web_hooks) { table(:web_hooks) }
- let(:services) { table(:services) }
-
- before do
- services.create!
- web_hooks.create!(service_id: services.first.id, type: 'ServiceHook')
- web_hooks.create!(service_id: nil)
-
- AddWebHooksServiceForeignKey.new.down
- web_hooks.create!(service_id: non_existing_record_id, type: 'ServiceHook')
- AddWebHooksServiceForeignKey.new.up
- end
-
- it 'removes service hooks where the referenced service does not exist', :aggregate_failures do
- expect { RemoveOrphanServiceHooks.new.up }.to change { web_hooks.count }.by(-1)
- expect(web_hooks.where.not(service_id: services.select(:id)).count).to eq(0)
- end
-end
diff --git a/spec/migrations/remove_orphaned_invited_members_spec.rb b/spec/migrations/remove_orphaned_invited_members_spec.rb
deleted file mode 100644
index 67e98b69ccc..00000000000
--- a/spec/migrations/remove_orphaned_invited_members_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RemoveOrphanedInvitedMembers do
- let(:members_table) { table(:members) }
- let(:users_table) { table(:users) }
- let(:namespaces_table) { table(:namespaces) }
- let(:projects_table) { table(:projects) }
-
- let!(:user1) { users_table.create!(name: 'user1', email: 'user1@example.com', projects_limit: 1) }
- let!(:user2) { users_table.create!(name: 'user2', email: 'user2@example.com', projects_limit: 1) }
- let!(:group) { namespaces_table.create!(type: 'Group', name: 'group', path: 'group') }
- let!(:project) { projects_table.create!(name: 'project', path: 'project', namespace_id: group.id) }
-
- let!(:member1) { create_member(user_id: user1.id, source_type: 'Project', source_id: project.id, access_level: 10) }
- let!(:member2) { create_member(user_id: user2.id, source_type: 'Group', source_id: group.id, access_level: 20) }
-
- let!(:invited_member1) do
- create_member(user_id: nil, source_type: 'Project', source_id: project.id,
- invite_token: SecureRandom.hex, invite_accepted_at: Time.now,
- access_level: 20)
- end
-
- let!(:invited_member2) do
- create_member(user_id: nil, source_type: 'Group', source_id: group.id,
- invite_token: SecureRandom.hex, invite_accepted_at: Time.now,
- access_level: 20)
- end
-
- let!(:orphaned_member1) do
- create_member(user_id: nil, source_type: 'Project', source_id: project.id,
- invite_accepted_at: Time.now, access_level: 30)
- end
-
- let!(:orphaned_member2) do
- create_member(user_id: nil, source_type: 'Group', source_id: group.id,
- invite_accepted_at: Time.now, access_level: 20)
- end
-
- it 'removes orphaned invited members but keeps current members' do
- expect { migrate! }.to change { members_table.count }.from(6).to(4)
-
- expect(members_table.all.pluck(:id)).to contain_exactly(member1.id, member2.id, invited_member1.id, invited_member2.id)
- end
-
- def create_member(options)
- members_table.create!(
- {
- notification_level: 0,
- ldap: false,
- override: false
- }.merge(options)
- )
- end
-end
diff --git a/spec/migrations/remove_packages_deprecated_dependencies_spec.rb b/spec/migrations/remove_packages_deprecated_dependencies_spec.rb
deleted file mode 100644
index f76a26bcdc1..00000000000
--- a/spec/migrations/remove_packages_deprecated_dependencies_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RemovePackagesDeprecatedDependencies do
- let(:projects) { table(:projects) }
- let(:packages) { table(:packages_packages) }
- let(:dependency_links) { table(:packages_dependency_links) }
- let(:dependencies) { table(:packages_dependencies) }
-
- before do
- projects.create!(id: 123, name: 'gitlab', path: 'gitlab-org/gitlab-ce', namespace_id: 1)
- packages.create!(id: 1, name: 'package', version: '1.0.0', package_type: 4, project_id: 123)
- 5.times do |i|
- dependencies.create!(id: i, name: "pkg_dependency_#{i}", version_pattern: '~1.0.0')
- dependency_links.create!(package_id: 1, dependency_id: i, dependency_type: 5)
- end
- dependencies.create!(id: 10, name: 'valid_pkg_dependency', version_pattern: '~2.5.0')
- dependency_links.create!(package_id: 1, dependency_id: 10, dependency_type: 1)
- end
-
- it 'removes all dependency links with type 5' do
- expect(dependency_links.count).to eq 6
-
- migrate!
-
- expect(dependency_links.count).to eq 1
- end
-end
diff --git a/spec/migrations/remove_security_dashboard_feature_flag_spec.rb b/spec/migrations/remove_security_dashboard_feature_flag_spec.rb
deleted file mode 100644
index fea7fe01cc7..00000000000
--- a/spec/migrations/remove_security_dashboard_feature_flag_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe RemoveSecurityDashboardFeatureFlag do
- let(:feature_gates) { table(:feature_gates) }
-
- subject(:migration) { described_class.new }
-
- describe '#up' do
- it 'deletes the security_dashboard feature gate' do
- security_dashboard_feature = feature_gates.create!(feature_key: :security_dashboard, key: :boolean, value: 'false')
- actors_security_dashboard_feature = feature_gates.create!(feature_key: :security_dashboard, key: :actors, value: 'Project:1')
-
- migration.up
-
- expect { security_dashboard_feature.reload }.to raise_error(ActiveRecord::RecordNotFound)
- expect(actors_security_dashboard_feature.reload).to be_present
- end
- end
-
- describe '#down' do
- it 'copies the instance_security_dashboard feature gate to a security_dashboard gate' do
- feature_gates.create!(feature_key: :instance_security_dashboard, key: :actors, value: 'Project:1')
- feature_gates.create!(feature_key: :instance_security_dashboard, key: 'boolean', value: 'false')
-
- migration.down
-
- security_dashboard_feature = feature_gates.find_by(feature_key: :security_dashboard, key: :boolean)
- expect(security_dashboard_feature.value).to eq('false')
- end
-
- context 'when there is no instance_security_dashboard gate' do
- it 'does nothing' do
- migration.down
-
- security_dashboard_feature = feature_gates.find_by(feature_key: :security_dashboard, key: :boolean)
- expect(security_dashboard_feature).to be_nil
- end
- end
-
- context 'when there already is a security_dashboard gate' do
- it 'does nothing' do
- feature_gates.create!(feature_key: :security_dashboard, key: 'boolean', value: 'false')
- feature_gates.create!(feature_key: :instance_security_dashboard, key: 'boolean', value: 'false')
-
- expect { migration.down }.not_to raise_error
- end
- end
- end
-end
diff --git a/spec/migrations/rename_security_dashboard_feature_flag_to_instance_security_dashboard_spec.rb b/spec/migrations/rename_security_dashboard_feature_flag_to_instance_security_dashboard_spec.rb
deleted file mode 100644
index fcbf94812fb..00000000000
--- a/spec/migrations/rename_security_dashboard_feature_flag_to_instance_security_dashboard_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe RenameSecurityDashboardFeatureFlagToInstanceSecurityDashboard do
- let(:feature_gates) { table(:feature_gates) }
-
- subject(:migration) { described_class.new }
-
- describe '#up' do
- it 'copies the security_dashboard feature gate to a new instance_security_dashboard gate' do
- feature_gates.create!(feature_key: :security_dashboard, key: :actors, value: 'Project:1')
- feature_gates.create!(feature_key: :security_dashboard, key: :boolean, value: 'false')
-
- migration.up
-
- instance_security_dashboard_feature = feature_gates.find_by(feature_key: :instance_security_dashboard, key: :boolean)
- expect(instance_security_dashboard_feature.value).to eq('false')
- end
-
- context 'when there is no security_dashboard gate' do
- it 'does nothing' do
- migration.up
-
- instance_security_dashboard_feature = feature_gates.find_by(feature_key: :instance_security_dashboard, key: :boolean)
- expect(instance_security_dashboard_feature).to be_nil
- end
- end
-
- context 'when there is already an instance_security_dashboard gate' do
- it 'does nothing' do
- feature_gates.create!(feature_key: :security_dashboard, key: 'boolean', value: 'false')
- feature_gates.create!(feature_key: :instance_security_dashboard, key: 'boolean', value: 'false')
-
- expect { migration.up }.not_to raise_error
- end
- end
- end
-
- describe '#down' do
- it 'removes the instance_security_dashboard gate' do
- actors_instance_security_dashboard_feature = feature_gates.create!(feature_key: :instance_security_dashboard, key: :actors, value: 'Project:1')
- instance_security_dashboard_feature = feature_gates.create!(feature_key: :instance_security_dashboard, key: :boolean, value: 'false')
-
- migration.down
-
- expect { instance_security_dashboard_feature.reload }.to raise_error(ActiveRecord::RecordNotFound)
- expect(actors_instance_security_dashboard_feature.reload).to be_present
- end
- end
-end
diff --git a/spec/migrations/rename_sitemap_namespace_spec.rb b/spec/migrations/rename_sitemap_namespace_spec.rb
deleted file mode 100644
index 21b74587d50..00000000000
--- a/spec/migrations/rename_sitemap_namespace_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RenameSitemapNamespace do
- let(:namespaces) { table(:namespaces) }
- let(:routes) { table(:routes) }
- let(:sitemap_path) { 'sitemap' }
-
- it 'correctly run #up and #down' do
- create_namespace(sitemap_path)
-
- reversible_migration do |migration|
- migration.before -> {
- expect(namespaces.pluck(:path)).to contain_exactly(sitemap_path)
- }
-
- migration.after -> {
- expect(namespaces.pluck(:path)).to contain_exactly(sitemap_path + '0')
- }
- end
- end
-
- def create_namespace(path)
- namespaces.create!(name: path, path: path).tap do |namespace|
- routes.create!(path: namespace.path, name: namespace.name, source_id: namespace.id, source_type: 'Namespace')
- end
- end
-end
diff --git a/spec/migrations/rename_sitemap_root_namespaces_spec.rb b/spec/migrations/rename_sitemap_root_namespaces_spec.rb
deleted file mode 100644
index 12a687194e0..00000000000
--- a/spec/migrations/rename_sitemap_root_namespaces_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RenameSitemapRootNamespaces do
- let(:namespaces) { table(:namespaces) }
- let(:routes) { table(:routes) }
- let(:sitemap_path) { 'sitemap.xml' }
- let(:sitemap_gz_path) { 'sitemap.xml.gz' }
- let(:other_path1) { 'sitemap.xmlfoo' }
- let(:other_path2) { 'foositemap.xml' }
-
- it 'correctly run #up and #down' do
- create_namespace(sitemap_path)
- create_namespace(sitemap_gz_path)
- create_namespace(other_path1)
- create_namespace(other_path2)
-
- reversible_migration do |migration|
- migration.before -> {
- expect(namespaces.pluck(:path)).to contain_exactly(sitemap_path, sitemap_gz_path, other_path1, other_path2)
- }
-
- migration.after -> {
- expect(namespaces.pluck(:path)).to contain_exactly(sitemap_path + '0', sitemap_gz_path + '0', other_path1, other_path2)
- }
- end
- end
-
- def create_namespace(path)
- namespaces.create!(name: path, path: path).tap do |namespace|
- routes.create!(path: namespace.path, name: namespace.name, source_id: namespace.id, source_type: 'Namespace')
- end
- end
-end
diff --git a/spec/migrations/reschedule_set_default_iteration_cadences_spec.rb b/spec/migrations/reschedule_set_default_iteration_cadences_spec.rb
deleted file mode 100644
index fb629c90d9f..00000000000
--- a/spec/migrations/reschedule_set_default_iteration_cadences_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe RescheduleSetDefaultIterationCadences do
- let(:namespaces) { table(:namespaces) }
- let(:iterations) { table(:sprints) }
-
- let(:group_1) { namespaces.create!(name: 'test_1', path: 'test_1') }
- let!(:group_2) { namespaces.create!(name: 'test_2', path: 'test_2') }
- let(:group_3) { namespaces.create!(name: 'test_3', path: 'test_3') }
- let(:group_4) { namespaces.create!(name: 'test_4', path: 'test_4') }
- let(:group_5) { namespaces.create!(name: 'test_5', path: 'test_5') }
- let(:group_6) { namespaces.create!(name: 'test_6', path: 'test_6') }
- let(:group_7) { namespaces.create!(name: 'test_7', path: 'test_7') }
- let(:group_8) { namespaces.create!(name: 'test_8', path: 'test_8') }
-
- let!(:iteration_1) { iterations.create!(iid: 1, title: 'iteration 1', group_id: group_1.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
- let!(:iteration_2) { iterations.create!(iid: 1, title: 'iteration 2', group_id: group_3.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
- let!(:iteration_3) { iterations.create!(iid: 1, title: 'iteration 2', group_id: group_4.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
- let!(:iteration_4) { iterations.create!(iid: 1, title: 'iteration 2', group_id: group_5.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
- let!(:iteration_5) { iterations.create!(iid: 1, title: 'iteration 2', group_id: group_6.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
- let!(:iteration_6) { iterations.create!(iid: 1, title: 'iteration 2', group_id: group_7.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
- let!(:iteration_7) { iterations.create!(iid: 1, title: 'iteration 2', group_id: group_8.id, start_date: 2.days.from_now, due_date: 3.days.from_now) }
-
- around do |example|
- freeze_time { Sidekiq::Testing.fake! { example.run } }
- end
-
- it 'schedules the background jobs', :aggregate_failures do
- stub_const("#{described_class.name}::BATCH_SIZE", 3)
-
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to be(3)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(2.minutes, group_1.id, group_3.id, group_4.id)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(4.minutes, group_5.id, group_6.id, group_7.id)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(6.minutes, group_8.id)
- end
-end
diff --git a/spec/migrations/reseed_merge_trains_enabled_spec.rb b/spec/migrations/reseed_merge_trains_enabled_spec.rb
deleted file mode 100644
index 14ed44151d3..00000000000
--- a/spec/migrations/reseed_merge_trains_enabled_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ReseedMergeTrainsEnabled do
- describe 'migrate' do
- let(:project_ci_cd_settings) { table(:project_ci_cd_settings) }
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
-
- context 'when on Gitlab.com' do
- before do
- namespace = namespaces.create!(name: 'hello', path: 'hello/')
- project1 = projects.create!(namespace_id: namespace.id)
- project2 = projects.create!(namespace_id: namespace.id)
- project_ci_cd_settings.create!(project_id: project1.id, merge_pipelines_enabled: true)
- project_ci_cd_settings.create!(project_id: project2.id, merge_pipelines_enabled: false)
- end
-
- it 'updates merge_trains_enabled to true for where merge_pipelines_enabled is true' do
- expect { migrate! }.to change(project_ci_cd_settings.where(merge_trains_enabled: true), :count).by(1)
- end
- end
- end
-end
diff --git a/spec/migrations/reseed_repository_storages_weighted_spec.rb b/spec/migrations/reseed_repository_storages_weighted_spec.rb
deleted file mode 100644
index d7efff3dfba..00000000000
--- a/spec/migrations/reseed_repository_storages_weighted_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ReseedRepositoryStoragesWeighted do
- let(:storages) { { "foo" => {}, "baz" => {} } }
- let(:application_settings) do
- table(:application_settings).tap do |klass|
- klass.class_eval do
- serialize :repository_storages
- end
- end
- end
-
- before do
- allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
- end
-
- let(:repository_storages) { ["foo"] }
- let!(:application_setting) { application_settings.create!(repository_storages: repository_storages) }
-
- context 'with empty repository_storages_weighted column' do
- it 'populates repository_storages_weighted properly' do
- migrate!
-
- expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq({ "foo" => 100, "baz" => 0 })
- end
- end
-
- context 'with already-populated repository_storages_weighted column' do
- let(:existing_weights) { { "foo" => 100, "baz" => 50 } }
-
- it 'does not change repository_storages_weighted properly' do
- application_setting.repository_storages_weighted = existing_weights
- application_setting.save!
-
- migrate!
-
- expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq(existing_weights)
- end
- end
-end
diff --git a/spec/migrations/save_instance_administrators_group_id_spec.rb b/spec/migrations/save_instance_administrators_group_id_spec.rb
deleted file mode 100644
index 0846df18b5e..00000000000
--- a/spec/migrations/save_instance_administrators_group_id_spec.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SaveInstanceAdministratorsGroupId do
- let(:application_settings_table) { table(:application_settings) }
-
- let(:instance_administrators_group) do
- table(:namespaces).create!(
- id: 1,
- name: 'GitLab Instance Administrators',
- path: 'gitlab-instance-administrators-random',
- type: 'Group'
- )
- end
-
- let(:self_monitoring_project) do
- table(:projects).create!(
- id: 2,
- name: 'Self Monitoring',
- path: 'self_monitoring',
- namespace_id: instance_administrators_group.id
- )
- end
-
- context 'when project ID is saved but group ID is not' do
- let(:application_settings) do
- application_settings_table.create!(instance_administration_project_id: self_monitoring_project.id)
- end
-
- it 'saves instance administrators group ID' do
- expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
- expect(application_settings.instance_administrators_group_id).to be_nil
-
- migrate!
-
- expect(application_settings.reload.instance_administrators_group_id).to eq(instance_administrators_group.id)
- expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
- end
- end
-
- context 'when group ID is saved but project ID is not' do
- let(:application_settings) do
- application_settings_table.create!(instance_administrators_group_id: instance_administrators_group.id)
- end
-
- it 'does not make changes' do
- expect(application_settings.instance_administrators_group_id).to eq(instance_administrators_group.id)
- expect(application_settings.instance_administration_project_id).to be_nil
-
- migrate!
-
- expect(application_settings.reload.instance_administrators_group_id).to eq(instance_administrators_group.id)
- expect(application_settings.instance_administration_project_id).to be_nil
- end
- end
-
- context 'when group ID and project ID are both saved' do
- let(:application_settings) do
- application_settings_table.create!(
- instance_administrators_group_id: instance_administrators_group.id,
- instance_administration_project_id: self_monitoring_project.id
- )
- end
-
- it 'does not make changes' do
- expect(application_settings.instance_administrators_group_id).to eq(instance_administrators_group.id)
- expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
-
- migrate!
-
- expect(application_settings.reload.instance_administrators_group_id).to eq(instance_administrators_group.id)
- expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
- end
- end
-
- context 'when neither group ID nor project ID is saved' do
- let(:application_settings) do
- application_settings_table.create!
- end
-
- it 'does not make changes' do
- expect(application_settings.instance_administrators_group_id).to be_nil
- expect(application_settings.instance_administration_project_id).to be_nil
-
- migrate!
-
- expect(application_settings.reload.instance_administrators_group_id).to be_nil
- expect(application_settings.instance_administration_project_id).to be_nil
- end
- end
-
- context 'when application_settings table has no rows' do
- it 'does not fail' do
- migrate!
- end
- end
-end
diff --git a/spec/migrations/schedule_add_primary_email_to_emails_if_user_confirmed_spec.rb b/spec/migrations/schedule_add_primary_email_to_emails_if_user_confirmed_spec.rb
new file mode 100644
index 00000000000..c66ac1bd7e9
--- /dev/null
+++ b/spec/migrations/schedule_add_primary_email_to_emails_if_user_confirmed_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe ScheduleAddPrimaryEmailToEmailsIfUserConfirmed, :sidekiq do
+ let(:migration) { described_class.new }
+ let(:users) { table(:users) }
+
+ let!(:user_1) { users.create!(name: 'confirmed-user-1', email: 'confirmed-1@example.com', confirmed_at: 1.day.ago, projects_limit: 100) }
+ let!(:user_2) { users.create!(name: 'confirmed-user-2', email: 'confirmed-2@example.com', confirmed_at: 1.day.ago, projects_limit: 100) }
+ let!(:user_3) { users.create!(name: 'confirmed-user-3', email: 'confirmed-3@example.com', confirmed_at: 1.day.ago, projects_limit: 100) }
+ let!(:user_4) { users.create!(name: 'confirmed-user-4', email: 'confirmed-4@example.com', confirmed_at: 1.day.ago, projects_limit: 100) }
+
+ before do
+ stub_const("#{described_class.name}::BATCH_SIZE", 2)
+ stub_const("#{described_class.name}::INTERVAL", 2.minutes.to_i)
+ end
+
+ it 'schedules addition of primary email to emails in delayed batches' do
+ Sidekiq::Testing.fake! do
+ freeze_time do
+ migration.up
+
+ expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, user_1.id, user_2.id)
+ expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, user_3.id, user_4.id)
+ expect(BackgroundMigrationWorker.jobs.size).to eq(2)
+ end
+ end
+ end
+end
diff --git a/spec/migrations/schedule_backfill_push_rules_id_in_projects_spec.rb b/spec/migrations/schedule_backfill_push_rules_id_in_projects_spec.rb
deleted file mode 100644
index 7b71110e62d..00000000000
--- a/spec/migrations/schedule_backfill_push_rules_id_in_projects_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe ScheduleBackfillPushRulesIdInProjects do
- let(:push_rules) { table(:push_rules) }
-
- it 'adds global rule association to application settings' do
- application_settings = table(:application_settings)
- setting = application_settings.create!
- sample_rule = push_rules.create!(is_sample: true)
-
- Sidekiq::Testing.fake! do
- disable_migrations_output { migrate! }
- end
-
- setting.reload
- expect(setting.push_rule_id).to eq(sample_rule.id)
- end
-
- it 'adds global rule association to last application settings when there is more than one record without failing' do
- application_settings = table(:application_settings)
- setting_old = application_settings.create!
- setting = application_settings.create!
- sample_rule = push_rules.create!(is_sample: true)
-
- Sidekiq::Testing.fake! do
- disable_migrations_output { migrate! }
- end
-
- expect(setting_old.reload.push_rule_id).to be_nil
- expect(setting.reload.push_rule_id).to eq(sample_rule.id)
- end
-
- it 'schedules worker to migrate project push rules' do
- rule_1 = push_rules.create!
- rule_2 = push_rules.create!
-
- Sidekiq::Testing.fake! do
- disable_migrations_output { migrate! }
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(1)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(5.minutes, rule_1.id, rule_2.id)
- end
- end
-end
diff --git a/spec/migrations/schedule_blocked_by_links_replacement_second_try_spec.rb b/spec/migrations/schedule_blocked_by_links_replacement_second_try_spec.rb
deleted file mode 100644
index f2a0bdba32a..00000000000
--- a/spec/migrations/schedule_blocked_by_links_replacement_second_try_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleBlockedByLinksReplacementSecondTry do
- let(:namespace) { table(:namespaces).create!(name: 'gitlab', path: 'gitlab-org') }
- let(:project) { table(:projects).create!(namespace_id: namespace.id, name: 'gitlab') }
- let(:issue1) { table(:issues).create!(project_id: project.id, title: 'a') }
- let(:issue2) { table(:issues).create!(project_id: project.id, title: 'b') }
- let(:issue3) { table(:issues).create!(project_id: project.id, title: 'c') }
- let!(:issue_links) do
- [
- table(:issue_links).create!(source_id: issue1.id, target_id: issue2.id, link_type: 1),
- table(:issue_links).create!(source_id: issue2.id, target_id: issue1.id, link_type: 2),
- table(:issue_links).create!(source_id: issue1.id, target_id: issue3.id, link_type: 2)
- ]
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
- end
-
- it 'schedules jobs for blocked_by links' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(
- 2.minutes, issue_links[1].id, issue_links[1].id)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(
- 4.minutes, issue_links[2].id, issue_links[2].id)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_link_lfs_objects_projects_spec.rb b/spec/migrations/schedule_link_lfs_objects_projects_spec.rb
deleted file mode 100644
index 29c203c2c31..00000000000
--- a/spec/migrations/schedule_link_lfs_objects_projects_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleLinkLfsObjectsProjects, :migration, :sidekiq do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:fork_networks) { table(:fork_networks) }
- let(:fork_network_members) { table(:fork_network_members) }
- let(:lfs_objects) { table(:lfs_objects) }
- let(:lfs_objects_projects) { table(:lfs_objects_projects) }
-
- let(:namespace) { namespaces.create!(name: 'GitLab', path: 'gitlab') }
-
- let(:fork_network) { fork_networks.create!(root_project_id: source_project.id) }
- let(:another_fork_network) { fork_networks.create!(root_project_id: another_source_project.id) }
-
- let(:source_project) { projects.create!(namespace_id: namespace.id) }
- let(:another_source_project) { projects.create!(namespace_id: namespace.id) }
- let(:project) { projects.create!(namespace_id: namespace.id) }
- let(:another_project) { projects.create!(namespace_id: namespace.id) }
-
- let(:lfs_object) { lfs_objects.create!(oid: 'abc123', size: 100) }
- let(:another_lfs_object) { lfs_objects.create!(oid: 'def456', size: 200) }
-
- let!(:source_project_lop_1) do
- lfs_objects_projects.create!(
- lfs_object_id: lfs_object.id,
- project_id: source_project.id
- )
- end
-
- let!(:source_project_lop_2) do
- lfs_objects_projects.create!(
- lfs_object_id: another_lfs_object.id,
- project_id: source_project.id
- )
- end
-
- let!(:another_source_project_lop_1) do
- lfs_objects_projects.create!(
- lfs_object_id: lfs_object.id,
- project_id: another_source_project.id
- )
- end
-
- let!(:another_source_project_lop_2) do
- lfs_objects_projects.create!(
- lfs_object_id: another_lfs_object.id,
- project_id: another_source_project.id
- )
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- # Create links between projects
- fork_network_members.create!(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil)
- fork_network_members.create!(fork_network_id: fork_network.id, project_id: project.id, forked_from_project_id: source_project.id)
- fork_network_members.create!(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil)
- fork_network_members.create!(fork_network_id: another_fork_network.id, project_id: another_project.id, forked_from_project_id: another_fork_network.root_project_id)
- end
-
- it 'schedules background migration to link LFS objects' do
- Sidekiq::Testing.fake! do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, source_project_lop_1.id, source_project_lop_2.id)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, another_source_project_lop_1.id, another_source_project_lop_2.id)
- end
- end
-end
diff --git a/spec/migrations/schedule_merge_request_cleanup_schedules_backfill_spec.rb b/spec/migrations/schedule_merge_request_cleanup_schedules_backfill_spec.rb
deleted file mode 100644
index 319c0802f2c..00000000000
--- a/spec/migrations/schedule_merge_request_cleanup_schedules_backfill_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe ScheduleMergeRequestCleanupSchedulesBackfill, :sidekiq, schema: 20201023114628 do
- let(:merge_requests) { table(:merge_requests) }
- let(:cleanup_schedules) { table(:merge_request_cleanup_schedules) }
-
- let(:namespace) { table(:namespaces).create!(name: 'name', path: 'path') }
- let(:project) { table(:projects).create!(namespace_id: namespace.id) }
-
- describe '#up' do
- let!(:open_mr) { merge_requests.create!(target_project_id: project.id, source_branch: 'master', target_branch: 'master') }
-
- let!(:closed_mr_1) { merge_requests.create!(target_project_id: project.id, source_branch: 'master', target_branch: 'master', state_id: 2) }
- let!(:closed_mr_2) { merge_requests.create!(target_project_id: project.id, source_branch: 'master', target_branch: 'master', state_id: 2) }
-
- let!(:merged_mr_1) { merge_requests.create!(target_project_id: project.id, source_branch: 'master', target_branch: 'master', state_id: 3) }
- let!(:merged_mr_2) { merge_requests.create!(target_project_id: project.id, source_branch: 'master', target_branch: 'master', state_id: 3) }
-
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
- end
-
- it 'schedules BackfillMergeRequestCleanupSchedules background jobs' do
- Sidekiq::Testing.fake! do
- migrate!
-
- aggregate_failures do
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, closed_mr_1.id, closed_mr_2.id)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, merged_mr_1.id, merged_mr_2.id)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_migrate_security_scans_spec.rb b/spec/migrations/schedule_migrate_security_scans_spec.rb
deleted file mode 100644
index ce926241ba6..00000000000
--- a/spec/migrations/schedule_migrate_security_scans_spec.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleMigrateSecurityScans, :sidekiq do
- let(:migration) { described_class.new }
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:builds) { table(:ci_builds) }
- let(:job_artifacts) { table(:ci_job_artifacts) }
-
- let(:namespace) { namespaces.create!(name: "foo", path: "bar") }
- let(:project) { projects.create!(namespace_id: namespace.id) }
- let(:job) { builds.create! }
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
- stub_const("#{described_class.name}::INTERVAL", 5.minutes.to_i)
- end
-
- context 'no security job artifacts' do
- before do
- table(:ci_job_artifacts)
- end
-
- it 'does not schedule migration' do
- Sidekiq::Testing.fake! do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs).to be_empty
- end
- end
- end
-
- context 'has security job artifacts' do
- let!(:job_artifact_1) { job_artifacts.create!(project_id: project.id, job_id: job.id, file_type: 5) }
- let!(:job_artifact_2) { job_artifacts.create!(project_id: project.id, job_id: job.id, file_type: 8) }
-
- it 'schedules migration of security scans' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migration.up
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(5.minutes, job_artifact_1.id, job_artifact_1.id)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(10.minutes, job_artifact_2.id, job_artifact_2.id)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-
- context 'has non-security job artifacts' do
- let!(:job_artifact_1) { job_artifacts.create!(project_id: project.id, job_id: job.id, file_type: 4) }
- let!(:job_artifact_2) { job_artifacts.create!(project_id: project.id, job_id: job.id, file_type: 9) }
-
- it 'schedules migration of security scans' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migration.up
-
- expect(BackgroundMigrationWorker.jobs).to be_empty
- end
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_migrate_u2f_webauthn_spec.rb b/spec/migrations/schedule_migrate_u2f_webauthn_spec.rb
deleted file mode 100644
index 48f098e34fc..00000000000
--- a/spec/migrations/schedule_migrate_u2f_webauthn_spec.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleMigrateU2fWebauthn do
- let(:migration_name) { described_class::MIGRATION }
- let(:u2f_registrations) { table(:u2f_registrations) }
- let(:webauthn_registrations) { table(:webauthn_registrations) }
-
- let(:users) { table(:users) }
-
- let(:user) { users.create!(email: 'email@email.com', name: 'foo', username: 'foo', projects_limit: 0) }
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
- end
-
- context 'when there are u2f registrations' do
- let!(:u2f_reg_1) { create_u2f_registration(1, 'reg1') }
- let!(:u2f_reg_2) { create_u2f_registration(2, 'reg2') }
-
- it 'schedules a background migration' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(migration_name).to be_scheduled_delayed_migration(2.minutes, 1, 1)
- expect(migration_name).to be_scheduled_delayed_migration(4.minutes, 2, 2)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-
- context 'when there are no u2f registrations' do
- it 'does not schedule background migrations' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(0)
- end
- end
- end
- end
-
- def create_u2f_registration(id, name)
- device = U2F::FakeU2F.new(FFaker::BaconIpsum.characters(5))
- u2f_registrations.create!({ id: id,
- certificate: Base64.strict_encode64(device.cert_raw),
- key_handle: U2F.urlsafe_encode64(device.key_handle_raw),
- public_key: Base64.strict_encode64(device.origin_public_key_raw),
- counter: 5,
- name: name,
- user_id: user.id })
- end
-end
diff --git a/spec/migrations/schedule_populate_has_vulnerabilities_spec.rb b/spec/migrations/schedule_populate_has_vulnerabilities_spec.rb
deleted file mode 100644
index edae7330b1e..00000000000
--- a/spec/migrations/schedule_populate_has_vulnerabilities_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SchedulePopulateHasVulnerabilities do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:vulnerabilities) { table(:vulnerabilities) }
- let(:user) { users.create!(name: 'test', email: 'test@example.com', projects_limit: 5) }
- let(:namespace) { namespaces.create!(name: 'gitlab', path: 'gitlab-org') }
- let(:vulnerability_base_params) { { title: 'title', state: 2, severity: 0, confidence: 5, report_type: 2, author_id: user.id } }
- let!(:project_1) { projects.create!(namespace_id: namespace.id, name: 'foo_1') }
- let!(:project_2) { projects.create!(namespace_id: namespace.id, name: 'foo_2') }
- let!(:project_3) { projects.create!(namespace_id: namespace.id, name: 'foo_3') }
-
- around do |example|
- freeze_time { Sidekiq::Testing.fake! { example.run } }
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
-
- vulnerabilities.create!(vulnerability_base_params.merge(project_id: project_1.id))
- vulnerabilities.create!(vulnerability_base_params.merge(project_id: project_3.id))
- end
-
- it 'schedules the background jobs', :aggregate_failures do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to be(2)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(2.minutes, project_1.id)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(4.minutes, project_3.id)
- end
-end
diff --git a/spec/migrations/schedule_populate_issue_email_participants_spec.rb b/spec/migrations/schedule_populate_issue_email_participants_spec.rb
deleted file mode 100644
index 3a7a4e4df1e..00000000000
--- a/spec/migrations/schedule_populate_issue_email_participants_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SchedulePopulateIssueEmailParticipants do
- let!(:namespace) { table(:namespaces).create!(name: 'namespace', path: 'namespace') }
- let!(:project) { table(:projects).create!(id: 1, namespace_id: namespace.id) }
- let!(:issue1) { table(:issues).create!(id: 1, project_id: project.id, service_desk_reply_to: "a@gitlab.com") }
- let!(:issue2) { table(:issues).create!(id: 2, project_id: project.id) }
- let!(:issue3) { table(:issues).create!(id: 3, project_id: project.id, service_desk_reply_to: "b@gitlab.com") }
- let!(:issue4) { table(:issues).create!(id: 4, project_id: project.id, service_desk_reply_to: "c@gitlab.com") }
- let!(:issue5) { table(:issues).create!(id: 5, project_id: project.id, service_desk_reply_to: "d@gitlab.com") }
- let(:issue_email_participants) { table(:issue_email_participants) }
-
- it 'correctly schedules background migrations' do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, 1, 3)
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, 4, 5)
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_populate_missing_dismissal_information_for_vulnerabilities_spec.rb b/spec/migrations/schedule_populate_missing_dismissal_information_for_vulnerabilities_spec.rb
deleted file mode 100644
index e5934f2171f..00000000000
--- a/spec/migrations/schedule_populate_missing_dismissal_information_for_vulnerabilities_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SchedulePopulateMissingDismissalInformationForVulnerabilities do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:vulnerabilities) { table(:vulnerabilities) }
- let(:user) { users.create!(name: 'test', email: 'test@example.com', projects_limit: 5) }
- let(:namespace) { namespaces.create!(name: 'gitlab', path: 'gitlab-org') }
- let(:project) { projects.create!(namespace_id: namespace.id, name: 'foo') }
-
- let!(:vulnerability_1) { vulnerabilities.create!(title: 'title', state: 2, severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id) }
- let!(:vulnerability_2) { vulnerabilities.create!(title: 'title', state: 2, severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id, dismissed_at: Time.now) }
- let!(:vulnerability_3) { vulnerabilities.create!(title: 'title', state: 2, severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id, dismissed_by_id: user.id) }
- let!(:vulnerability_4) { vulnerabilities.create!(title: 'title', state: 2, severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id, dismissed_at: Time.now, dismissed_by_id: user.id) }
- let!(:vulnerability_5) { vulnerabilities.create!(title: 'title', state: 1, severity: 0, confidence: 5, report_type: 2, project_id: project.id, author_id: user.id) }
-
- around do |example|
- freeze_time { Sidekiq::Testing.fake! { example.run } }
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
- end
-
- it 'schedules the background jobs', :aggregate_failures do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to be(3)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(3.minutes, vulnerability_1.id)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(6.minutes, vulnerability_2.id)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(9.minutes, vulnerability_3.id)
- end
-end
diff --git a/spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb b/spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb
deleted file mode 100644
index 5f764a1ee8f..00000000000
--- a/spec/migrations/schedule_populate_personal_snippet_statistics_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe SchedulePopulatePersonalSnippetStatistics do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:snippets) { table(:snippets) }
- let(:projects) { table(:projects) }
- let!(:user1) { users.create!(id: 1, email: 'user1@example.com', projects_limit: 10, username: 'test1', name: 'Test1', state: 'active') }
- let!(:user2) { users.create!(id: 2, email: 'user2@example.com', projects_limit: 10, username: 'test2', name: 'Test2', state: 'active') }
- let!(:user3) { users.create!(id: 3, email: 'user3@example.com', projects_limit: 10, username: 'test3', name: 'Test3', state: 'active') }
- let!(:namespace1) { namespaces.create!(id: 1, owner_id: user1.id, name: 'test1', path: 'test1') }
- let!(:namespace2) { namespaces.create!(id: 2, owner_id: user2.id, name: 'test2', path: 'test2') }
- let!(:namespace3) { namespaces.create!(id: 3, owner_id: user3.id, name: 'test3', path: 'test3') }
-
- def create_snippet(id, user_id, type = 'PersonalSnippet')
- params = {
- id: id,
- type: type,
- author_id: user_id,
- file_name: 'foo',
- content: 'bar'
- }
-
- snippets.create!(params)
- end
-
- it 'correctly schedules background migrations' do
- # Creating the snippets in different order
- create_snippet(1, user1.id)
- create_snippet(2, user2.id)
- create_snippet(3, user1.id)
- create_snippet(4, user3.id)
- create_snippet(5, user3.id)
- create_snippet(6, user1.id)
- # Creating a project snippet to ensure we don't pick it
- create_snippet(7, user1.id, 'ProjectSnippet')
-
- stub_const("#{described_class}::BATCH_SIZE", 4)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- aggregate_failures do
- expect(described_class::MIGRATION)
- .to be_scheduled_migration([1, 3, 6, 2])
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, [4, 5])
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_populate_project_snippet_statistics_spec.rb b/spec/migrations/schedule_populate_project_snippet_statistics_spec.rb
deleted file mode 100644
index 4ac107c5202..00000000000
--- a/spec/migrations/schedule_populate_project_snippet_statistics_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SchedulePopulateProjectSnippetStatistics do
- let(:users) { table(:users) }
- let(:snippets) { table(:snippets) }
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
- let(:user1) { users.create!(id: 1, email: 'user1@example.com', projects_limit: 10, username: 'test1', name: 'Test1', state: 'active') }
- let(:user2) { users.create!(id: 2, email: 'user2@example.com', projects_limit: 10, username: 'test2', name: 'Test2', state: 'active') }
- let(:namespace1) { namespaces.create!(id: 1, owner_id: user1.id, name: 'user1', path: 'user1') }
- let(:namespace2) { namespaces.create!(id: 2, owner_id: user2.id, name: 'user2', path: 'user2') }
- let(:project1) { projects.create!(id: 1, namespace_id: namespace1.id) }
- let(:project2) { projects.create!(id: 2, namespace_id: namespace1.id) }
- let(:project3) { projects.create!(id: 3, namespace_id: namespace2.id) }
-
- def create_snippet(id, user_id, project_id, type = 'ProjectSnippet')
- params = {
- id: id,
- type: type,
- author_id: user_id,
- project_id: project_id,
- file_name: 'foo',
- content: 'bar'
- }
-
- snippets.create!(params)
- end
-
- it 'correctly schedules background migrations' do
- # Creating the snippets in different order
- create_snippet(1, user1.id, project1.id)
- create_snippet(2, user2.id, project3.id)
- create_snippet(3, user1.id, project1.id)
- create_snippet(4, user1.id, project2.id)
- create_snippet(5, user2.id, project3.id)
- create_snippet(6, user1.id, project1.id)
- # Creating a personal snippet to ensure we don't pick it
- create_snippet(7, user1.id, nil, 'PersonalSnippet')
-
- stub_const("#{described_class}::BATCH_SIZE", 4)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- aggregate_failures do
- expect(described_class::MIGRATION)
- .to be_scheduled_migration([1, 3, 6, 4])
-
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, [2, 5])
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_populate_user_highest_roles_table_spec.rb b/spec/migrations/schedule_populate_user_highest_roles_table_spec.rb
deleted file mode 100644
index 0a2ee82b349..00000000000
--- a/spec/migrations/schedule_populate_user_highest_roles_table_spec.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SchedulePopulateUserHighestRolesTable do
- let(:users) { table(:users) }
-
- def create_user(id, params = {})
- user_params = {
- id: id,
- state: 'active',
- user_type: nil,
- bot_type: nil,
- ghost: nil,
- email: "user#{id}@example.com",
- projects_limit: 0
- }.merge(params)
-
- users.create!(user_params)
- end
-
- it 'correctly schedules background migrations' do
- create_user(1)
- create_user(2, state: 'blocked')
- create_user(3, user_type: 2)
- create_user(4)
- create_user(5, bot_type: 1)
- create_user(6, ghost: true)
- create_user(7, ghost: false)
-
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(5.minutes, 1, 4)
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(10.minutes, 7, 7)
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_recalculate_project_authorizations_second_run_spec.rb b/spec/migrations/schedule_recalculate_project_authorizations_second_run_spec.rb
deleted file mode 100644
index 380d107250b..00000000000
--- a/spec/migrations/schedule_recalculate_project_authorizations_second_run_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleRecalculateProjectAuthorizationsSecondRun do
- let(:users_table) { table(:users) }
-
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
-
- 1.upto(4) do |i|
- users_table.create!(id: i, name: "user#{i}", email: "user#{i}@example.com", projects_limit: 1)
- end
- end
-
- it 'schedules background migration' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_migration(1, 2)
- expect(described_class::MIGRATION).to be_scheduled_migration(3, 4)
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_recalculate_project_authorizations_spec.rb b/spec/migrations/schedule_recalculate_project_authorizations_spec.rb
deleted file mode 100644
index a4400c2ac83..00000000000
--- a/spec/migrations/schedule_recalculate_project_authorizations_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleRecalculateProjectAuthorizations do
- let(:users_table) { table(:users) }
- let(:namespaces_table) { table(:namespaces) }
- let(:projects_table) { table(:projects) }
- let(:project_authorizations_table) { table(:project_authorizations) }
-
- let(:user1) { users_table.create!(name: 'user1', email: 'user1@example.com', projects_limit: 1) }
- let(:user2) { users_table.create!(name: 'user2', email: 'user2@example.com', projects_limit: 1) }
- let(:group) { namespaces_table.create!(id: 1, type: 'Group', name: 'group', path: 'group') }
- let(:project) do
- projects_table.create!(id: 1, name: 'project', path: 'project',
- visibility_level: 0, namespace_id: group.id)
- end
-
- before do
- stub_const("#{described_class}::BATCH_SIZE", 1)
-
- project_authorizations_table.create!(user_id: user1.id, project_id: project.id, access_level: 30)
- project_authorizations_table.create!(user_id: user2.id, project_id: project.id, access_level: 30)
- end
-
- it 'schedules background migration' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_migration([user1.id])
- expect(described_class::MIGRATION).to be_scheduled_migration([user2.id])
- end
- end
- end
-
- it 'ignores projects with higher id than maximum group id' do
- another_user = users_table.create!(name: 'another user', email: 'another-user@example.com',
- projects_limit: 1)
- ignored_project = projects_table.create!(id: 2, name: 'ignored-project', path: 'ignored-project',
- visibility_level: 0, namespace_id: group.id)
- project_authorizations_table.create!(user_id: another_user.id, project_id: ignored_project.id,
- access_level: 30)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_migration([user1.id])
- expect(described_class::MIGRATION).to be_scheduled_migration([user2.id])
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_recalculate_project_authorizations_third_run_spec.rb b/spec/migrations/schedule_recalculate_project_authorizations_third_run_spec.rb
deleted file mode 100644
index 302ae1d5ebe..00000000000
--- a/spec/migrations/schedule_recalculate_project_authorizations_third_run_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleRecalculateProjectAuthorizationsThirdRun do
- let(:users_table) { table(:users) }
-
- before do
- stub_const("#{described_class}::BATCH_SIZE", 2)
-
- 1.upto(4) do |i|
- users_table.create!(id: i, name: "user#{i}", email: "user#{i}@example.com", projects_limit: 1)
- end
- end
-
- it 'schedules background migration' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION).to be_scheduled_migration(1, 2)
- expect(described_class::MIGRATION).to be_scheduled_migration(3, 4)
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_repopulate_historical_vulnerability_statistics_spec.rb b/spec/migrations/schedule_repopulate_historical_vulnerability_statistics_spec.rb
deleted file mode 100644
index a65c94cf60e..00000000000
--- a/spec/migrations/schedule_repopulate_historical_vulnerability_statistics_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleRepopulateHistoricalVulnerabilityStatistics do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:project_settings) { table(:project_settings) }
-
- let(:namespace) { namespaces.create!(name: 'gitlab', path: 'gitlab-org') }
- let!(:project_1) { projects.create!(namespace_id: namespace.id, name: 'foo_1') }
- let!(:project_2) { projects.create!(namespace_id: namespace.id, name: 'foo_2') }
- let!(:project_3) { projects.create!(namespace_id: namespace.id, name: 'foo_3') }
- let!(:project_4) { projects.create!(namespace_id: namespace.id, name: 'foo_4') }
-
- around do |example|
- freeze_time { Sidekiq::Testing.fake! { example.run } }
- end
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
-
- project_settings.create!(project_id: project_1.id, has_vulnerabilities: true)
- project_settings.create!(project_id: project_2.id, has_vulnerabilities: false)
- project_settings.create!(project_id: project_4.id, has_vulnerabilities: true)
- end
-
- it 'schedules the background jobs', :aggregate_failures do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to be(2)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(described_class::DELAY_INTERVAL, [project_1.id], described_class::DAY_COUNT)
- expect(described_class::MIGRATION_CLASS).to be_scheduled_delayed_migration(2 * described_class::DELAY_INTERVAL, [project_4.id], described_class::DAY_COUNT)
- end
-end
diff --git a/spec/migrations/schedule_update_existing_subgroup_to_match_visibility_level_of_parent_spec.rb b/spec/migrations/schedule_update_existing_subgroup_to_match_visibility_level_of_parent_spec.rb
deleted file mode 100644
index 8f265acccae..00000000000
--- a/spec/migrations/schedule_update_existing_subgroup_to_match_visibility_level_of_parent_spec.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleUpdateExistingSubgroupToMatchVisibilityLevelOfParent do
- include MigrationHelpers::NamespacesHelpers
- let(:migration_class) { described_class::MIGRATION }
- let(:migration_name) { migration_class.to_s.demodulize }
-
- context 'private visibility level' do
- it 'correctly schedules background migrations' do
- parent = create_namespace('parent', Gitlab::VisibilityLevel::PRIVATE)
- create_namespace('child', Gitlab::VisibilityLevel::PUBLIC, parent_id: parent.id)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(1)
- expect(migration_name).to be_scheduled_migration_with_multiple_args([parent.id], Gitlab::VisibilityLevel::PRIVATE)
- end
- end
- end
-
- it 'correctly schedules background migrations for groups and subgroups' do
- parent = create_namespace('parent', Gitlab::VisibilityLevel::PRIVATE)
- middle_group = create_namespace('middle_group', Gitlab::VisibilityLevel::PRIVATE, parent_id: parent.id)
- create_namespace('middle_empty_group', Gitlab::VisibilityLevel::PRIVATE, parent_id: parent.id)
- create_namespace('child', Gitlab::VisibilityLevel::PUBLIC, parent_id: middle_group.id)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(1)
- expect(migration_name).to be_scheduled_migration_with_multiple_args([middle_group.id, parent.id], Gitlab::VisibilityLevel::PRIVATE)
- end
- end
- end
- end
-
- context 'internal visibility level' do
- it 'correctly schedules background migrations' do
- parent = create_namespace('parent', Gitlab::VisibilityLevel::INTERNAL)
- middle_group = create_namespace('child', Gitlab::VisibilityLevel::INTERNAL, parent_id: parent.id)
- create_namespace('child', Gitlab::VisibilityLevel::PUBLIC, parent_id: middle_group.id)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(1)
- expect(migration_name).to be_scheduled_migration_with_multiple_args([parent.id, middle_group.id], Gitlab::VisibilityLevel::INTERNAL)
- end
- end
- end
- end
-
- context 'mixed visibility levels' do
- it 'correctly schedules background migrations' do
- parent1 = create_namespace('parent1', Gitlab::VisibilityLevel::INTERNAL)
- create_namespace('child', Gitlab::VisibilityLevel::PUBLIC, parent_id: parent1.id)
- parent2 = create_namespace('parent2', Gitlab::VisibilityLevel::PRIVATE)
- middle_group = create_namespace('middle_group', Gitlab::VisibilityLevel::INTERNAL, parent_id: parent2.id)
- create_namespace('child', Gitlab::VisibilityLevel::PUBLIC, parent_id: middle_group.id)
-
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(migration_name).to be_scheduled_migration_with_multiple_args([parent1.id, middle_group.id], Gitlab::VisibilityLevel::INTERNAL)
- expect(migration_name).to be_scheduled_migration_with_multiple_args([parent2.id], Gitlab::VisibilityLevel::PRIVATE)
- end
- end
- end
- end
-end
diff --git a/spec/migrations/schedule_update_existing_users_that_require_two_factor_auth_spec.rb b/spec/migrations/schedule_update_existing_users_that_require_two_factor_auth_spec.rb
deleted file mode 100644
index a839229ec22..00000000000
--- a/spec/migrations/schedule_update_existing_users_that_require_two_factor_auth_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ScheduleUpdateExistingUsersThatRequireTwoFactorAuth do
- let(:users) { table(:users) }
- let!(:user_1) { users.create!(require_two_factor_authentication_from_group: true, name: "user1", email: "user1@example.com", projects_limit: 1) }
- let!(:user_2) { users.create!(require_two_factor_authentication_from_group: false, name: "user2", email: "user2@example.com", projects_limit: 1) }
- let!(:user_3) { users.create!(require_two_factor_authentication_from_group: true, name: "user3", email: "user3@example.com", projects_limit: 1) }
-
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 1)
- end
-
- it 'schedules jobs for users that require two factor authentication' do
- Sidekiq::Testing.fake! do
- freeze_time do
- migrate!
-
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(
- 2.minutes, user_1.id, user_1.id)
- expect(described_class::MIGRATION).to be_scheduled_delayed_migration(
- 4.minutes, user_3.id, user_3.id)
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- end
- end
- end
-end
diff --git a/spec/migrations/seed_merge_trains_enabled_spec.rb b/spec/migrations/seed_merge_trains_enabled_spec.rb
deleted file mode 100644
index 1cb0e3cf8a6..00000000000
--- a/spec/migrations/seed_merge_trains_enabled_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SeedMergeTrainsEnabled do
- describe 'migrate' do
- let(:project_ci_cd_settings) { table(:project_ci_cd_settings) }
- let(:projects) { table(:projects) }
- let(:namespaces) { table(:namespaces) }
-
- context 'when on Gitlab.com' do
- before do
- namespace = namespaces.create!(name: 'hello', path: 'hello/')
- project1 = projects.create!(namespace_id: namespace.id)
- project2 = projects.create!(namespace_id: namespace.id)
- project_ci_cd_settings.create!(project_id: project1.id, merge_pipelines_enabled: true)
- project_ci_cd_settings.create!(project_id: project2.id, merge_pipelines_enabled: false)
- end
-
- it 'updates merge_trains_enabled to true for where merge_pipelines_enabled is true' do
- migrate!
-
- expect(project_ci_cd_settings.where(merge_trains_enabled: true).count).to be(1)
- end
- end
- end
-end
diff --git a/spec/migrations/seed_repository_storages_weighted_spec.rb b/spec/migrations/seed_repository_storages_weighted_spec.rb
deleted file mode 100644
index 102107bcc9f..00000000000
--- a/spec/migrations/seed_repository_storages_weighted_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SeedRepositoryStoragesWeighted do
- let(:storages) { { "foo" => {}, "baz" => {} } }
- let(:application_settings) do
- table(:application_settings).tap do |klass|
- klass.class_eval do
- serialize :repository_storages
- end
- end
- end
-
- before do
- allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
- end
-
- let(:application_setting) { application_settings.create! }
- let(:repository_storages) { ["foo"] }
-
- it 'correctly schedules background migrations' do
- application_setting.repository_storages = repository_storages
- application_setting.save!
-
- migrate!
-
- expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq({ "foo" => 100, "baz" => 0 })
- end
-end
diff --git a/spec/migrations/services_remove_temporary_index_on_project_id_spec.rb b/spec/migrations/services_remove_temporary_index_on_project_id_spec.rb
deleted file mode 100644
index d47f6deb2d5..00000000000
--- a/spec/migrations/services_remove_temporary_index_on_project_id_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe ServicesRemoveTemporaryIndexOnProjectId do
- let(:migration_instance) { described_class.new }
-
- it 'adds and removes temporary partial index in up and down methods' do
- reversible_migration do |migration|
- migration.before -> {
- expect(migration_instance.index_exists?(:services, :project_id, name: described_class::INDEX_NAME)).to be true
- }
-
- migration.after -> {
- expect(migration_instance.index_exists?(:services, :project_id, name: described_class::INDEX_NAME)).to be false
- }
- end
- end
-
- describe '#up' do
- context 'index does not exist' do
- it 'skips removal action' do
- migrate!
-
- expect { migrate! }.not_to change { migration_instance.index_exists?(:services, :project_id, name: described_class::INDEX_NAME) }
- end
- end
- end
-
- describe '#down' do
- context 'index already exists' do
- it 'skips creation of duplicated temporary partial index on project_id' do
- schema_migrate_down!
-
- expect { schema_migrate_down! }.not_to change { migration_instance.index_exists?(:services, :project_id, name: described_class::INDEX_NAME) }
- end
- end
- end
-end
diff --git a/spec/migrations/set_job_waiter_ttl_spec.rb b/spec/migrations/set_job_waiter_ttl_spec.rb
deleted file mode 100644
index a051f8a535c..00000000000
--- a/spec/migrations/set_job_waiter_ttl_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe SetJobWaiterTtl, :redis do
- it 'sets TTLs where necessary' do
- waiter_with_ttl = Gitlab::JobWaiter.new.key
- waiter_without_ttl = Gitlab::JobWaiter.new.key
- key_with_ttl = "foo:bar"
- key_without_ttl = "foo:qux"
-
- Gitlab::Redis::SharedState.with do |redis|
- redis.set(waiter_with_ttl, "zzz", ex: 2000)
- redis.set(waiter_without_ttl, "zzz")
- redis.set(key_with_ttl, "zzz", ex: 2000)
- redis.set(key_without_ttl, "zzz")
-
- described_class.new.up
-
- # This is the point of the migration. We know the migration uses a TTL of 21_600
- expect(redis.ttl(waiter_without_ttl)).to be > 20_000
-
- # Other TTL's should be untouched by the migration
- expect(redis.ttl(waiter_with_ttl)).to be_between(1000, 2000)
- expect(redis.ttl(key_with_ttl)).to be_between(1000, 2000)
- expect(redis.ttl(key_without_ttl)).to eq(-1)
- end
- end
-end
diff --git a/spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb b/spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb
index 1fd19ee42b4..e03dd73ec8b 100644
--- a/spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb
+++ b/spec/migrations/slice_merge_request_diff_commit_migrations_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration! 'slice_merge_request_diff_commit_migrations'
+require_migration!
RSpec.describe SliceMergeRequestDiffCommitMigrations, :migration do
let(:migration) { described_class.new }
diff --git a/spec/migrations/steal_merge_request_diff_commit_users_migration_spec.rb b/spec/migrations/steal_merge_request_diff_commit_users_migration_spec.rb
index 3ad0b5a93c2..4fb4ba61a34 100644
--- a/spec/migrations/steal_merge_request_diff_commit_users_migration_spec.rb
+++ b/spec/migrations/steal_merge_request_diff_commit_users_migration_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-require_migration! 'steal_merge_request_diff_commit_users_migration'
+require_migration!
RSpec.describe StealMergeRequestDiffCommitUsersMigration, :migration do
let(:migration) { described_class.new }
diff --git a/spec/migrations/unconfirm_wrongfully_verified_emails_spec.rb b/spec/migrations/unconfirm_wrongfully_verified_emails_spec.rb
deleted file mode 100644
index 5adc866d0a5..00000000000
--- a/spec/migrations/unconfirm_wrongfully_verified_emails_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe UnconfirmWrongfullyVerifiedEmails do
- before do
- user = table(:users).create!(name: 'user1', email: 'test1@test.com', projects_limit: 1)
- table(:emails).create!(email: 'test2@test.com', user_id: user.id)
- end
-
- context 'when email confirmation is enabled' do
- before do
- table(:application_settings).create!(send_user_confirmation_email: true)
- end
-
- it 'enqueues WrongullyConfirmedEmailUnconfirmer job' do
- Sidekiq::Testing.fake! do
- migrate!
-
- jobs = BackgroundMigrationWorker.jobs
- expect(jobs.size).to eq(1)
- expect(jobs.first["args"].first).to eq(Gitlab::BackgroundMigration::WrongfullyConfirmedEmailUnconfirmer.name.demodulize)
- end
- end
- end
-
- context 'when email confirmation is disabled' do
- before do
- table(:application_settings).create!(send_user_confirmation_email: false)
- end
-
- it 'does not enqueue WrongullyConfirmedEmailUnconfirmer job' do
- Sidekiq::Testing.fake! do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(0)
- end
- end
- end
-
- context 'when email application setting record does not exist' do
- before do
- table(:application_settings).delete_all
- end
-
- it 'does not enqueue WrongullyConfirmedEmailUnconfirmer job' do
- Sidekiq::Testing.fake! do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(0)
- end
- end
- end
-end
diff --git a/spec/migrations/update_application_setting_npm_package_requests_forwarding_default_spec.rb b/spec/migrations/update_application_setting_npm_package_requests_forwarding_default_spec.rb
deleted file mode 100644
index be209536208..00000000000
--- a/spec/migrations/update_application_setting_npm_package_requests_forwarding_default_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe UpdateApplicationSettingNpmPackageRequestsForwardingDefault do
- # Create test data - pipeline and CI/CD jobs.
- let(:application_settings) { table(:application_settings) }
-
- before do
- application_settings.create!(npm_package_requests_forwarding: false)
- end
-
- # Test just the up migration.
- it 'correctly migrates the application setting' do
- expect { migrate! }.to change { current_application_setting }.from(false).to(true)
- end
-
- # Test a reversible migration.
- it 'correctly migrates up and down the application setting' do
- reversible_migration do |migration|
- # Expectations will run before the up migration,
- # and then again after the down migration
- migration.before -> {
- expect(current_application_setting).to eq false
- }
-
- # Expectations will run after the up migration.
- migration.after -> {
- expect(current_application_setting).to eq true
- }
- end
- end
-
- def current_application_setting
- ApplicationSetting.current_without_cache.npm_package_requests_forwarding
- end
-end
diff --git a/spec/migrations/update_fingerprint_sha256_within_keys_spec.rb b/spec/migrations/update_fingerprint_sha256_within_keys_spec.rb
deleted file mode 100644
index 22ec3135703..00000000000
--- a/spec/migrations/update_fingerprint_sha256_within_keys_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe UpdateFingerprintSha256WithinKeys do
- let(:key_table) { table(:keys) }
-
- describe '#up' do
- it 'the BackgroundMigrationWorker will be triggered and fingerprint_sha256 populated' do
- key_table.create!(
- id: 1,
- user_id: 1,
- title: 'test',
- key: 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt1016k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=',
- fingerprint: 'ba:81:59:68:d7:6c:cd:02:02:bf:6a:9b:55:4e:af:d1',
- fingerprint_sha256: nil
- )
-
- expect(Key.first.fingerprint_sha256).to eq(nil)
-
- described_class.new.up
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(1)
- expect(BackgroundMigrationWorker.jobs.first["args"][0]).to eq("MigrateFingerprintSha256WithinKeys")
- expect(BackgroundMigrationWorker.jobs.first["args"][1]).to eq([1, 1])
- end
- end
-end
diff --git a/spec/migrations/update_historical_data_recorded_at_spec.rb b/spec/migrations/update_historical_data_recorded_at_spec.rb
deleted file mode 100644
index 95d2bb989fd..00000000000
--- a/spec/migrations/update_historical_data_recorded_at_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe UpdateHistoricalDataRecordedAt do
- let(:historical_data_table) { table(:historical_data) }
-
- it 'reversibly populates recorded_at from created_at or date' do
- row1 = historical_data_table.create!(
- date: Date.current - 1.day,
- created_at: Time.current - 1.day
- )
-
- row2 = historical_data_table.create!(date: Date.current - 2.days)
- row2.update!(created_at: nil)
-
- reversible_migration do |migration|
- migration.before -> {
- expect(row1.reload.recorded_at).to eq(nil)
- expect(row2.reload.recorded_at).to eq(nil)
- }
-
- migration.after -> {
- expect(row1.reload.recorded_at).to eq(row1.created_at)
- expect(row2.reload.recorded_at).to eq(row2.date.in_time_zone(Time.zone).change(hour: 12))
- }
- end
- end
-end
diff --git a/spec/migrations/update_internal_ids_last_value_for_epics_renamed_spec.rb b/spec/migrations/update_internal_ids_last_value_for_epics_renamed_spec.rb
deleted file mode 100644
index d7d1781aaa2..00000000000
--- a/spec/migrations/update_internal_ids_last_value_for_epics_renamed_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require_migration!
-
-RSpec.describe UpdateInternalIdsLastValueForEpicsRenamed, :migration, schema: 20201124185639 do
- let(:namespaces) { table(:namespaces) }
- let(:users) { table(:users) }
- let(:epics) { table(:epics) }
- let(:internal_ids) { table(:internal_ids) }
-
- let!(:author) { users.create!(name: 'test', email: 'test@example.com', projects_limit: 0) }
- let!(:group1) { namespaces.create!(type: 'Group', name: 'group1', path: 'group1') }
- let!(:group2) { namespaces.create!(type: 'Group', name: 'group2', path: 'group2') }
- let!(:group3) { namespaces.create!(type: 'Group', name: 'group3', path: 'group3') }
- let!(:epic_last_value1) { internal_ids.create!(usage: 4, last_value: 5, namespace_id: group1.id) }
- let!(:epic_last_value2) { internal_ids.create!(usage: 4, last_value: 5, namespace_id: group2.id) }
- let!(:epic_last_value3) { internal_ids.create!(usage: 4, last_value: 5, namespace_id: group3.id) }
- let!(:epic_1) { epics.create!(iid: 110, title: 'from epic 1', group_id: group1.id, author_id: author.id, title_html: 'any') }
- let!(:epic_2) { epics.create!(iid: 5, title: 'from epic 1', group_id: group2.id, author_id: author.id, title_html: 'any') }
- let!(:epic_3) { epics.create!(iid: 3, title: 'from epic 1', group_id: group3.id, author_id: author.id, title_html: 'any') }
-
- it 'updates out of sync internal_ids last_value' do
- migrate!
-
- expect(internal_ids.find_by(usage: 4, namespace_id: group1.id).last_value).to eq(110)
- expect(internal_ids.find_by(usage: 4, namespace_id: group2.id).last_value).to eq(5)
- expect(internal_ids.find_by(usage: 4, namespace_id: group3.id).last_value).to eq(5)
- end
-end
diff --git a/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb b/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb
deleted file mode 100644
index 74e97b82363..00000000000
--- a/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb
+++ /dev/null
@@ -1,223 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe UpdateRoutesForLostAndFoundGroupAndOrphanedProjects, :migration do
- let(:users) { table(:users) }
- let(:namespaces) { table(:namespaces) }
- let(:members) { table(:members) }
- let(:projects) { table(:projects) }
- let(:routes) { table(:routes) }
-
- before do
- # Create a Ghost User and its namnespace, but skip the route
- ghost_user = users.create!(
- name: 'Ghost User',
- username: 'ghost',
- email: 'ghost@example.com',
- user_type: described_class::User::USER_TYPE_GHOST,
- projects_limit: 100,
- state: :active,
- bio: 'This is a "Ghost User"'
- )
-
- namespaces.create!(
- name: 'Ghost User',
- path: 'ghost',
- owner_id: ghost_user.id,
- visibility_level: 20
- )
-
- # Create the 'lost-and-found', owned by the Ghost user, but with no route
- lost_and_found_group = namespaces.create!(
- name: described_class::User::LOST_AND_FOUND_GROUP,
- path: described_class::User::LOST_AND_FOUND_GROUP,
- type: 'Group',
- description: 'Group to store orphaned projects',
- visibility_level: 0
- )
-
- members.create!(
- type: 'GroupMember',
- source_id: lost_and_found_group.id,
- user_id: ghost_user.id,
- source_type: 'Namespace',
- access_level: described_class::User::ACCESS_LEVEL_OWNER,
- notification_level: 3
- )
-
- # Add an orphaned project under 'lost-and-found' but with the wrong path in its route
- orphaned_project = projects.create!(
- name: 'orphaned_project',
- path: 'orphaned_project',
- visibility_level: 20,
- archived: false,
- namespace_id: lost_and_found_group.id
- )
-
- routes.create!(
- source_id: orphaned_project.id,
- source_type: 'Project',
- path: 'orphaned_project',
- name: 'orphaned_project',
- created_at: Time.current,
- updated_at: Time.current
- )
-
- # Create another user named ghost which is not the Ghost User
- # Also create a 'lost-and-found' group for them and add projects to it
- # Purpose: test that the routes added for the 'lost-and-found' group and
- # its projects are unique
- fake_ghost_user = users.create!(
- name: 'Ghost User',
- username: 'ghost1',
- email: 'ghost1@example.com',
- user_type: nil,
- projects_limit: 100,
- state: :active,
- bio: 'This is NOT a "Ghost User"'
- )
-
- fake_ghost_user_namespace = namespaces.create!(
- name: 'Ghost User',
- path: 'ghost1',
- owner_id: fake_ghost_user.id,
- visibility_level: 20
- )
-
- routes.create!(
- source_id: fake_ghost_user_namespace.id,
- source_type: 'Namespace',
- path: 'ghost1',
- name: 'Ghost User',
- created_at: Time.current,
- updated_at: Time.current
- )
-
- fake_lost_and_found_group = namespaces.create!(
- name: 'Lost and Found',
- path: described_class::User::LOST_AND_FOUND_GROUP, # same path as the lost-and-found group
- type: 'Group',
- description: 'Fake lost and found group with the same path as the real one',
- visibility_level: 20
- )
-
- routes.create!(
- source_id: fake_lost_and_found_group.id,
- source_type: 'Namespace',
- path: described_class::User::LOST_AND_FOUND_GROUP, # same path as the lost-and-found group
- name: 'Lost and Found',
- created_at: Time.current,
- updated_at: Time.current
- )
-
- members.create!(
- type: 'GroupMember',
- source_id: fake_lost_and_found_group.id,
- user_id: fake_ghost_user.id,
- source_type: 'Namespace',
- access_level: described_class::User::ACCESS_LEVEL_OWNER,
- notification_level: 3
- )
-
- normal_project = projects.create!(
- name: 'normal_project',
- path: 'normal_project',
- visibility_level: 20,
- archived: false,
- namespace_id: fake_lost_and_found_group.id
- )
-
- routes.create!(
- source_id: normal_project.id,
- source_type: 'Project',
- path: "#{described_class::User::LOST_AND_FOUND_GROUP}/normal_project",
- name: 'Lost and Found / normal_project',
- created_at: Time.current,
- updated_at: Time.current
- )
-
- # Add a project whose route conflicts with the ghost username
- # and should force the data migration to pick a new Ghost username and path
- ghost_project = projects.create!(
- name: 'Ghost Project',
- path: 'ghost',
- visibility_level: 20,
- archived: false,
- namespace_id: fake_lost_and_found_group.id
- )
-
- routes.create!(
- source_id: ghost_project.id,
- source_type: 'Project',
- path: 'ghost',
- name: 'Ghost Project',
- created_at: Time.current,
- updated_at: Time.current
- )
- end
-
- it 'fixes the ghost user username and namespace path' do
- ghost_user = users.find_by(user_type: described_class::User::USER_TYPE_GHOST)
- ghost_namespace = namespaces.find_by(owner_id: ghost_user.id)
-
- expect(ghost_user.username).to eq('ghost')
- expect(ghost_namespace.path).to eq('ghost')
-
- disable_migrations_output { migrate! }
-
- ghost_user = users.find_by(user_type: described_class::User::USER_TYPE_GHOST)
- ghost_namespace = namespaces.find_by(owner_id: ghost_user.id)
- ghost_namespace_route = routes.find_by(source_id: ghost_namespace.id, source_type: 'Namespace')
-
- expect(ghost_user.username).to eq('ghost2')
- expect(ghost_namespace.path).to eq('ghost2')
- expect(ghost_namespace_route.path).to eq('ghost2')
- end
-
- it 'creates the route for the ghost user namespace' do
- expect(routes.where(path: 'ghost').count).to eq(1)
- expect(routes.where(path: 'ghost1').count).to eq(1)
- expect(routes.where(path: 'ghost2').count).to eq(0)
-
- disable_migrations_output { migrate! }
-
- expect(routes.where(path: 'ghost').count).to eq(1)
- expect(routes.where(path: 'ghost1').count).to eq(1)
- expect(routes.where(path: 'ghost2').count).to eq(1)
- end
-
- it 'fixes the path for the lost-and-found group by generating a unique one' do
- expect(namespaces.where(path: described_class::User::LOST_AND_FOUND_GROUP).count).to eq(2)
-
- disable_migrations_output { migrate! }
-
- expect(namespaces.where(path: described_class::User::LOST_AND_FOUND_GROUP).count).to eq(1)
-
- lost_and_found_group = namespaces.find_by(name: described_class::User::LOST_AND_FOUND_GROUP)
- expect(lost_and_found_group.path).to eq('lost-and-found1')
- end
-
- it 'creates the route for the lost-and-found group' do
- expect(routes.where(path: described_class::User::LOST_AND_FOUND_GROUP).count).to eq(1)
- expect(routes.where(path: 'lost-and-found1').count).to eq(0)
-
- disable_migrations_output { migrate! }
-
- expect(routes.where(path: described_class::User::LOST_AND_FOUND_GROUP).count).to eq(1)
- expect(routes.where(path: 'lost-and-found1').count).to eq(1)
- end
-
- it 'updates the route for the orphaned project' do
- orphaned_project_route = routes.find_by(path: 'orphaned_project')
- expect(orphaned_project_route.name).to eq('orphaned_project')
-
- disable_migrations_output { migrate! }
-
- updated_route = routes.find_by(id: orphaned_project_route.id)
- expect(updated_route.path).to eq('lost-and-found1/orphaned_project')
- expect(updated_route.name).to eq("#{described_class::User::LOST_AND_FOUND_GROUP} / orphaned_project")
- end
-end
diff --git a/spec/migrations/update_timestamp_softwarelicensespolicy_spec.rb b/spec/migrations/update_timestamp_softwarelicensespolicy_spec.rb
deleted file mode 100644
index 0210f23f5c5..00000000000
--- a/spec/migrations/update_timestamp_softwarelicensespolicy_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-require_migration!
-
-RSpec.describe UpdateTimestampSoftwarelicensespolicy do
- let(:software_licenses_policy) { table(:software_license_policies) }
- let(:projects) { table(:projects) }
- let(:licenses) { table(:software_licenses) }
-
- before do
- projects.create!(name: 'gitlab', path: 'gitlab-org/gitlab-ce', namespace_id: 1)
- licenses.create!(name: 'MIT')
- software_licenses_policy.create!(project_id: projects.first.id, software_license_id: licenses.first.id, created_at: nil, updated_at: nil)
- end
-
- it 'creates timestamps' do
- migrate!
-
- expect(software_licenses_policy.first.created_at).to be_present
- expect(software_licenses_policy.first.updated_at).to be_present
- end
-end