debian-mirror-gitlab/spec/lib/gitlab/background_migration/backfill_integrations_type_new_spec.rb
2021-10-27 15:23:28 +05:30

57 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::BackgroundMigration::BackfillIntegrationsTypeNew do
let(:migration) { described_class.new }
let(:integrations) { table(:integrations) }
let(:namespaced_integrations) { Gitlab::Integrations::StiType.namespaced_integrations }
before do
integrations.connection.execute 'ALTER TABLE integrations DISABLE TRIGGER "trigger_type_new_on_insert"'
namespaced_integrations.each_with_index do |type, i|
integrations.create!(id: i + 1, type: "#{type}Service")
end
integrations.create!(id: namespaced_integrations.size + 1, type: 'LegacyService')
ensure
integrations.connection.execute 'ALTER TABLE integrations ENABLE TRIGGER "trigger_type_new_on_insert"'
end
it 'backfills `type_new` for the selected records' do
# We don't want to mock `Kernel.sleep`, so instead we mock it on the migration
# class before it gets forwarded.
expect(migration).to receive(:sleep).with(0.05).exactly(5).times
queries = ActiveRecord::QueryRecorder.new do
migration.perform(2, 10, :integrations, :id, 2, 50)
end
expect(queries.count).to be(16)
expect(queries.log.grep(/^SELECT/).size).to be(11)
expect(queries.log.grep(/^UPDATE/).size).to be(5)
expect(queries.log.grep(/^UPDATE/).join.scan(/WHERE .*/)).to eq([
'WHERE integrations.id BETWEEN 2 AND 3',
'WHERE integrations.id BETWEEN 4 AND 5',
'WHERE integrations.id BETWEEN 6 AND 7',
'WHERE integrations.id BETWEEN 8 AND 9',
'WHERE integrations.id BETWEEN 10 AND 10'
])
expect(integrations.where(id: 2..10).pluck(:type, :type_new)).to contain_exactly(
['AssemblaService', 'Integrations::Assembla'],
['BambooService', 'Integrations::Bamboo'],
['BugzillaService', 'Integrations::Bugzilla'],
['BuildkiteService', 'Integrations::Buildkite'],
['CampfireService', 'Integrations::Campfire'],
['ConfluenceService', 'Integrations::Confluence'],
['CustomIssueTrackerService', 'Integrations::CustomIssueTracker'],
['DatadogService', 'Integrations::Datadog'],
['DiscordService', 'Integrations::Discord']
)
expect(integrations.where.not(id: 2..10)).to all(have_attributes(type_new: nil))
end
end