43 lines
1.3 KiB
Ruby
43 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Database
|
|
module MigrationTestingHelpers
|
|
def define_background_migration(name)
|
|
klass = Class.new do
|
|
# Can't simply def perform here as we won't have access to the block,
|
|
# similarly can't define_method(:perform, &block) here as it would change the block receiver
|
|
define_method(:perform) { |*args| yield(*args) }
|
|
end
|
|
stub_const("Gitlab::BackgroundMigration::#{name}", klass)
|
|
klass
|
|
end
|
|
|
|
def expect_migration_call_counts(migrations_to_calls)
|
|
migrations_to_calls.each do |migration, calls|
|
|
expect_next_instances_of(migration, calls) do |m|
|
|
expect(m).to receive(:perform).and_call_original
|
|
end
|
|
end
|
|
end
|
|
|
|
def expect_recorded_migration_runs(migrations_to_runs)
|
|
migrations_to_runs.each do |migration, runs|
|
|
path = File.join(result_dir, migration.name.demodulize)
|
|
if runs.zero?
|
|
expect(Pathname(path)).not_to be_exist
|
|
else
|
|
num_subdirs = Pathname(path).children.count(&:directory?)
|
|
expect(num_subdirs).to eq(runs)
|
|
end
|
|
end
|
|
end
|
|
|
|
def expect_migration_runs(migrations_to_run_counts)
|
|
expect_migration_call_counts(migrations_to_run_counts)
|
|
|
|
yield
|
|
|
|
expect_recorded_migration_runs(migrations_to_run_counts)
|
|
end
|
|
end
|
|
end
|