gitlab-org--gitlab-foss/spec/workers/database/ci_namespace_mirrors_consis...

58 lines
2.0 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Database::CiNamespaceMirrorsConsistencyCheckWorker do
let(:worker) { described_class.new }
describe '#perform' do
it 'executes the consistency check on namespaces' do
expect(Database::ConsistencyCheckService).to receive(:new).and_call_original
expected_result = { batches: 0, matches: 0, mismatches: 0, mismatches_details: [] }
expect(worker).to receive(:log_extra_metadata_on_done).with(:results, expected_result)
worker.perform
end
context 'logs should contain the detailed mismatches' do
let(:first_namespace) { Namespace.all.order(:id).limit(1).first }
let(:missing_namespace) { Namespace.all.order(:id).limit(2).last }
before do
redis_shared_state_cleanup!
create_list(:namespace, 10) # This will also create Ci::NameSpaceMirror objects
missing_namespace.delete
allow_next_instance_of(Database::ConsistencyCheckService) do |instance|
allow(instance).to receive(:random_start_id).and_return(Namespace.first.id)
end
end
it 'reports the differences to the logs' do
expected_result = {
batches: 1,
matches: 9,
mismatches: 1,
mismatches_details: [{
id: missing_namespace.id,
source_table: nil,
target_table: [missing_namespace.traversal_ids]
}],
start_id: first_namespace.id,
next_start_id: first_namespace.id # The batch size > number of namespaces
}
expect(worker).to receive(:log_extra_metadata_on_done).with(:results, expected_result)
worker.perform
end
it 'calls the consistency_fix_service to fix the inconsistencies' do
allow_next_instance_of(Database::ConsistencyFixService) do |instance|
expect(instance).to receive(:execute).with(
ids: [missing_namespace.id]
).and_call_original
end
worker.perform
end
end
end
end