diff options
Diffstat (limited to 'spec/lib/initializer_connections_spec.rb')
-rw-r--r-- | spec/lib/initializer_connections_spec.rb | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/spec/lib/initializer_connections_spec.rb b/spec/lib/initializer_connections_spec.rb new file mode 100644 index 00000000000..4ca283c4f22 --- /dev/null +++ b/spec/lib/initializer_connections_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe InitializerConnections do + describe '.with_disabled_database_connections', :reestablished_active_record_base do + def block_with_database_call + described_class.with_disabled_database_connections do + Project.first + end + end + + def block_with_error + described_class.with_disabled_database_connections do + raise "oops, an error" + end + end + + it 'prevents any database connection within the block' do + expect { block_with_database_call }.to raise_error(/Database connection should not be called during initializer/) + end + + it 'does not prevent database connection if SKIP_RAISE_ON_INITIALIZE_CONNECTIONS is set' do + stub_env('SKIP_RAISE_ON_INITIALIZE_CONNECTIONS', '1') + + expect { block_with_database_call }.not_to raise_error + end + + it 'prevents any database connection if SKIP_RAISE_ON_INITIALIZE_CONNECTIONS is false' do + stub_env('SKIP_RAISE_ON_INITIALIZE_CONNECTIONS', 'false') + + expect { block_with_database_call }.to raise_error(/Database connection should not be called during initializer/) + end + + it 'restores original connection handler' do + # rubocop:disable Database/MultipleDatabases + original_handler = ActiveRecord::Base.connection_handler + + expect { block_with_database_call }.to raise_error(/Database connection should not be called during initializer/) + + expect(ActiveRecord::Base.connection_handler).to eq(original_handler) + # rubocop:enabled Database/MultipleDatabases + end + + it 'restores original connection handler even there is an error' do + # rubocop:disable Database/MultipleDatabases + original_handler = ActiveRecord::Base.connection_handler + + expect { block_with_error }.to raise_error(/an error/) + + expect(ActiveRecord::Base.connection_handler).to eq(original_handler) + # rubocop:enabled Database/MultipleDatabases + end + + it 'raises if any new connection_pools are established in the block' do + expect do + described_class.with_disabled_database_connections do + ApplicationRecord.connects_to database: { writing: :main, reading: :main } + end + end.to raise_error(/Unxpected connection_pools/) + end + end +end |