90 lines
2.5 KiB
Ruby
90 lines
2.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe CrossDatabaseModification do
|
||
|
describe '.transaction' do
|
||
|
context 'feature flag disabled' do
|
||
|
before do
|
||
|
stub_feature_flags(track_gitlab_schema_in_current_transaction: false)
|
||
|
end
|
||
|
|
||
|
it 'does not add to gitlab_transactions_stack' do
|
||
|
ApplicationRecord.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'feature flag is not yet setup' do
|
||
|
before do
|
||
|
allow(Feature::FlipperFeature).to receive(:table_exists?).and_raise(ActiveRecord::NoDatabaseError)
|
||
|
end
|
||
|
|
||
|
it 'does not add to gitlab_transactions_stack' do
|
||
|
ApplicationRecord.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'adds the current gitlab schema to gitlab_transactions_stack', :aggregate_failures do
|
||
|
ApplicationRecord.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_main)
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
|
||
|
Ci::ApplicationRecord.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_ci)
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
|
||
|
Project.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_main)
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
|
||
|
Ci::Pipeline.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_ci)
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
|
||
|
ApplicationRecord.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_main)
|
||
|
|
||
|
Ci::Pipeline.transaction do
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_main, :gitlab_ci)
|
||
|
|
||
|
Project.first
|
||
|
end
|
||
|
end
|
||
|
|
||
|
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
|
||
|
end
|
||
|
|
||
|
it 'yields' do
|
||
|
expect { |block| ApplicationRecord.transaction(&block) }.to yield_control
|
||
|
end
|
||
|
end
|
||
|
end
|