mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-10 01:31:45 +00:00
76 lines
2.3 KiB
Ruby
76 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::Utils::BatchedBackgroundMigrationsDictionary, feature_category: :database do
|
|
let(:bbm_dictionary_file_name) { "#{described_class::DICTIONARY_BASE_DIR}/test_migration.yml" }
|
|
let(:migration_version) { 20230307160250 }
|
|
let(:finalized_by) { '20230307160255' }
|
|
let(:introduced_by_url) { 'https://test_url' }
|
|
let(:milestone) { '16.5' }
|
|
let(:migration_job_name) { 'TestMigration' }
|
|
|
|
let(:bbm_dictionary_data) do
|
|
{
|
|
migration_job_name: migration_job_name,
|
|
feature_category: :database,
|
|
introduced_by_url: introduced_by_url,
|
|
milestone: milestone,
|
|
queued_migration_version: migration_version,
|
|
finalized_by: finalized_by
|
|
}
|
|
end
|
|
|
|
before do
|
|
File.open(bbm_dictionary_file_name, 'w') do |file|
|
|
file.write(bbm_dictionary_data.stringify_keys.to_yaml)
|
|
end
|
|
end
|
|
|
|
after do
|
|
FileUtils.rm(bbm_dictionary_file_name)
|
|
end
|
|
|
|
subject(:batched_background_migration) { described_class.new(migration_version) }
|
|
|
|
describe '.entry' do
|
|
it 'returns a single dictionary entry for the given migration job' do
|
|
entry = described_class.entry('TestMigration')
|
|
expect(entry.migration_job_name).to eq('TestMigration')
|
|
expect(entry.finalized_by.to_s).to eq(finalized_by)
|
|
end
|
|
end
|
|
|
|
shared_examples 'safely returns bbm attribute' do |attribute|
|
|
it 'returns the attr of the bbm' do
|
|
expect(batched_background_migration.public_send(attribute)).to eq(public_send(attribute))
|
|
end
|
|
|
|
it 'returns nothing for non-existing bbm dictionary' do
|
|
expect(described_class.new('random').public_send(attribute)).to be_nil
|
|
end
|
|
end
|
|
|
|
describe '#introduced_by_url' do
|
|
it_behaves_like 'safely returns bbm attribute', :introduced_by_url
|
|
end
|
|
|
|
describe '#milestone' do
|
|
it_behaves_like 'safely returns bbm attribute', :milestone
|
|
end
|
|
|
|
describe '#migration_job_name' do
|
|
it_behaves_like 'safely returns bbm attribute', :migration_job_name
|
|
end
|
|
|
|
describe '.checksum' do
|
|
let(:entries) { { c: "d", a: "b" } }
|
|
|
|
it 'returns a checksum of the entries' do
|
|
allow(described_class).to receive(:entries).and_return(entries)
|
|
|
|
expect(described_class.checksum(skip_memoization: true)).to eq(Digest::SHA256.hexdigest(entries.to_s))
|
|
end
|
|
end
|
|
end
|