debian-mirror-gitlab/spec/migrations/reschedule_incident_work_item_type_id_backfill_spec.rb
2023-07-09 08:55:56 +05:30

71 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
require_migration!
RSpec.describe RescheduleIncidentWorkItemTypeIdBackfill, :migration, feature_category: :team_planning do
include MigrationHelpers::WorkItemTypesHelper
let!(:migration) { described_class::MIGRATION }
let!(:interval) { 2.minutes }
let!(:incident_type_enum) { 1 }
let!(:issue_type_enum) { 0 }
let!(:incident_work_item_type) do
table(:work_item_types).find_by!(namespace_id: nil, base_type: incident_type_enum)
end
let!(:issue_work_item_type) do
table(:work_item_types).find_by!(namespace_id: nil, base_type: issue_type_enum)
end
describe '#up' do
let!(:existing_incident_migration) { create_backfill_migration(incident_type_enum, incident_work_item_type.id) }
let!(:existing_issue_migration) { create_backfill_migration(issue_type_enum, issue_work_item_type.id) }
it 'correctly reschedules background migration only for incidents' do
migrate!
migration_ids = table(:batched_background_migrations).pluck(:id)
expect(migration).to have_scheduled_batched_migration(
table_name: :issues,
column_name: :id,
job_arguments: [incident_type_enum, incident_work_item_type.id],
interval: interval,
batch_size: described_class::BATCH_SIZE,
max_batch_size: described_class::MAX_BATCH_SIZE,
sub_batch_size: described_class::SUB_BATCH_SIZE
)
expect(migration_ids.count).to eq(2)
expect(migration_ids).not_to include(existing_incident_migration.id)
expect(migration_ids).to include(existing_issue_migration.id)
end
it "doesn't fail if work item types don't exist on the DB" do
table(:work_item_types).delete_all
migrate!
# Since migration specs run outside of a transaction, we need to make
# sure we recreate default types since this spec deletes them all
reset_work_item_types
end
end
def create_backfill_migration(base_type, type_id)
table(:batched_background_migrations).create!(
job_class_name: migration,
table_name: :issues,
column_name: :id,
job_arguments: [base_type, type_id],
interval: 2.minutes,
min_value: 1,
max_value: 2,
batch_size: 1000,
sub_batch_size: 200,
gitlab_schema: :gitlab_main,
status: 3
)
end
end