gitlab-org--gitlab-foss/spec/lib/gitlab/background_migration/backfill_integrations_type_...

66 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::BackgroundMigration::BackfillIntegrationsTypeNew, :migration, schema: 20220212120735 do
let(:migration) { described_class.new }
let(:integrations) { table(:integrations) }
let(:namespaced_integrations) do
Set.new(%w[
Asana Assembla Bamboo Bugzilla Buildkite Campfire Confluence CustomIssueTracker Datadog
Discord DroneCi EmailsOnPush Ewm ExternalWiki Flowdock HangoutsChat Harbor Irker Jenkins Jira Mattermost
MattermostSlashCommands MicrosoftTeams MockCi MockMonitoring Packagist PipelinesEmail Pivotaltracker
Prometheus Pushover Redmine Shimo Slack SlackSlashCommands Teamcity UnifyCircuit WebexTeams Youtrack Zentao
Github GitlabSlackApplication
]).freeze
end
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