70 lines
1.7 KiB
Ruby
70 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
require_migration!
|
|
|
|
RSpec.describe SliceMergeRequestDiffCommitMigrations, :migration do
|
|
let(:migration) { described_class.new }
|
|
|
|
describe '#up' do
|
|
context 'when there are no jobs to process' do
|
|
it 'does nothing' do
|
|
expect(migration).not_to receive(:migrate_in)
|
|
expect(Gitlab::Database::BackgroundMigrationJob).not_to receive(:create!)
|
|
|
|
migration.up
|
|
end
|
|
end
|
|
|
|
context 'when there are pending jobs' do
|
|
let!(:job1) do
|
|
Gitlab::Database::BackgroundMigrationJob.create!(
|
|
class_name: described_class::MIGRATION_CLASS,
|
|
arguments: [1, 10_001]
|
|
)
|
|
end
|
|
|
|
let!(:job2) do
|
|
Gitlab::Database::BackgroundMigrationJob.create!(
|
|
class_name: described_class::MIGRATION_CLASS,
|
|
arguments: [10_001, 20_001]
|
|
)
|
|
end
|
|
|
|
it 'marks the old jobs as finished' do
|
|
migration.up
|
|
|
|
job1.reload
|
|
job2.reload
|
|
|
|
expect(job1).to be_succeeded
|
|
expect(job2).to be_succeeded
|
|
end
|
|
|
|
it 'the jobs are slices into smaller ranges' do
|
|
migration.up
|
|
|
|
new_jobs = Gitlab::Database::BackgroundMigrationJob
|
|
.for_migration_class(described_class::MIGRATION_CLASS)
|
|
.pending
|
|
.to_a
|
|
|
|
expect(new_jobs.map(&:arguments)).to eq(
|
|
[
|
|
[1, 5_001],
|
|
[5_001, 10_001],
|
|
[10_001, 15_001],
|
|
[15_001, 20_001]
|
|
])
|
|
end
|
|
|
|
it 'schedules a background migration for the first job' do
|
|
expect(migration)
|
|
.to receive(:migrate_in)
|
|
.with(1.hour, described_class::STEAL_MIGRATION_CLASS, [1, 5_001])
|
|
|
|
migration.up
|
|
end
|
|
end
|
|
end
|
|
end
|