75 lines
2.5 KiB
Ruby
75 lines
2.5 KiB
Ruby
require 'spec_helper'
|
|
require Rails.root.join('db', 'post_migrate', '20170301205640_migrate_build_events_to_pipeline_events.rb')
|
|
|
|
# This migration uses multiple threads, and thus different transactions. This
|
|
# means data created in this spec may not be visible to some threads. To work
|
|
# around this we use the TRUNCATE cleaning strategy.
|
|
describe MigrateBuildEventsToPipelineEvents, truncate: true do
|
|
let(:migration) { described_class.new }
|
|
let(:project_with_pipeline_service) { create(:empty_project) }
|
|
let(:project_with_build_service) { create(:empty_project) }
|
|
|
|
before do
|
|
ActiveRecord::Base.connection.execute <<-SQL
|
|
INSERT INTO services (properties, build_events, pipeline_events, type)
|
|
VALUES
|
|
('{"notify_only_broken_builds":true}', true, false, 'SlackService')
|
|
, ('{"notify_only_broken_builds":true}', true, false, 'MattermostService')
|
|
, ('{"notify_only_broken_builds":true}', true, false, 'HipchatService')
|
|
;
|
|
SQL
|
|
|
|
ActiveRecord::Base.connection.execute <<-SQL
|
|
INSERT INTO services
|
|
(properties, build_events, pipeline_events, type, project_id)
|
|
VALUES
|
|
('{"notify_only_broken_builds":true}', true, false,
|
|
'BuildsEmailService', #{project_with_pipeline_service.id})
|
|
, ('{"notify_only_broken_pipelines":true}', false, true,
|
|
'PipelinesEmailService', #{project_with_pipeline_service.id})
|
|
, ('{"notify_only_broken_builds":true}', true, false,
|
|
'BuildsEmailService', #{project_with_build_service.id})
|
|
;
|
|
SQL
|
|
end
|
|
|
|
describe '#up' do
|
|
before do
|
|
silence_migration = Module.new do
|
|
# rubocop:disable Rails/Delegate
|
|
def execute(query)
|
|
connection.execute(query)
|
|
end
|
|
end
|
|
|
|
migration.extend(silence_migration)
|
|
migration.up
|
|
end
|
|
|
|
it 'migrates chat service properly' do
|
|
[SlackService, MattermostService, HipchatService].each do |service|
|
|
expect(service.count).to eq(1)
|
|
|
|
verify_service_record(service.first)
|
|
end
|
|
end
|
|
|
|
it 'migrates pipelines email service only if it has none before' do
|
|
Project.find_each do |project|
|
|
pipeline_service_count =
|
|
project.services.where(type: 'PipelinesEmailService').count
|
|
|
|
expect(pipeline_service_count).to eq(1)
|
|
|
|
verify_service_record(project.pipelines_email_service)
|
|
end
|
|
end
|
|
|
|
def verify_service_record(service)
|
|
expect(service.notify_only_broken_pipelines).to be(true)
|
|
expect(service.build_events).to be(false)
|
|
expect(service.pipeline_events).to be(true)
|
|
end
|
|
end
|
|
end
|