spec/rake/funnel/support/environments/loader_spec.rb in rake-funnel-0.3.2.pre vs spec/rake/funnel/support/environments/loader_spec.rb in rake-funnel-0.4.0.pre

- old
+ new

@@ -1,143 +1,143 @@ -describe Rake::Funnel::Support::Environments::Loader do - let(:store) { - double(Configatron::Store).as_null_object - } - - let(:customizer) { nil } - - let(:config) { - { - name: 'environment name', - config_files: config_files.keys.map(&:to_s) - } - } - - before { - config_files.each do |file, content| - allow(File).to receive(:read).with(file.to_s).and_return(content) - end - - allow(Rake).to receive(:rake_output_message) - } - - describe 'loading configuration' do - let(:config_files) { - { - one: 'one: 23', - two: 'two: 42' - } - } - - before { - described_class.load_configuration(config, store, customizer) - } - - it 'should reinitialize the configatron store' do - expect(store).to have_received(:unlock!) - expect(store).to have_received(:reset!) - end - - it 'should save the env to store' do - expect(store).to have_received(:env=).with(config[:name]) - end - - it 'should load all config files' do - config[:config_files].each do |file| - expect(File).to have_received(:read).with(file) - end - end - - it "should add each config file's values to the store" do - expect(store).to have_received(:configure_from_hash).with({ 'one' => 23 }) - expect(store).to have_received(:configure_from_hash).with({ 'two' => 42 }) - end - - it 'should lock the store' do - expect(store).to have_received(:lock!) - end - - describe 'customization' do - let(:customizer) { double(Proc).as_null_object } - - it 'should run the customizer' do - expect(customizer).to have_received(:call).with(store) - end - end - - context 'config file with overriding values' do - let(:config_files) { - { - one: 'foo: bar', - two: 'foo: baz' - } - } - - let(:store) { - Configatron::RootStore.new - } - - it 'should merge config values' do - expect(store.foo).to eq('baz') - end - end - - context 'env also defined in config file' do - let(:config_files) { - { - with_env: 'env: foo' - } - } - - let(:store) { - Configatron::RootStore.new - } - - it 'should override env from config' do - expect(store.env).to eq('foo') - end - end - - context 'empty config file' do - let(:config_files) { - { - empty: '' - } - } - - it 'should configure with empty hash' do - expect(store).to have_received(:configure_from_hash).with({}) - end - end - end - - describe 'config file with ERb' do - context 'ERb success' do - let(:config_files) { - { - with_erb: 'foo: <%= 40 + 2 %>' - } - } - - before { - described_class.load_configuration(config, store) - } - - it 'should evaluate ERb' do - expect(store).to have_received(:configure_from_hash).with({ 'foo' => 42 }) - end - end - - context 'ERb failure' do - let(:config_files) { - { - with_erb: 'bogus: <%= 42 + "a" %>' - } - } - - it 'should report file name' do - expect { described_class.load_configuration(config, store) } - .to raise_error { |ex| expect(ex.backtrace.join("\n")).to match(/with_erb/) } - end - end - end -end +describe Rake::Funnel::Support::Environments::Loader do + let(:store) { + double(Configatron::Store).as_null_object + } + + let(:customizer) { nil } + + let(:config) { + { + name: 'environment name', + config_files: config_files.keys.map(&:to_s) + } + } + + before { + config_files.each do |file, content| + allow(File).to receive(:read).with(file.to_s).and_return(content) + end + + allow(Rake).to receive(:rake_output_message) + } + + describe 'loading configuration' do + let(:config_files) { + { + one: 'one: 23', + two: 'two: 42' + } + } + + before { + described_class.load_configuration(config, store, customizer) + } + + it 'should reinitialize the configatron store' do + expect(store).to have_received(:unlock!) + expect(store).to have_received(:reset!) + end + + it 'should save the env to store' do + expect(store).to have_received(:env=).with(config[:name]) + end + + it 'should load all config files' do + config[:config_files].each do |file| + expect(File).to have_received(:read).with(file) + end + end + + it "should add each config file's values to the store" do + expect(store).to have_received(:configure_from_hash).with({ 'one' => 23 }) + expect(store).to have_received(:configure_from_hash).with({ 'two' => 42 }) + end + + it 'should lock the store' do + expect(store).to have_received(:lock!) + end + + describe 'customization' do + let(:customizer) { double(Proc).as_null_object } + + it 'should run the customizer' do + expect(customizer).to have_received(:call).with(store) + end + end + + context 'config file with overriding values' do + let(:config_files) { + { + one: 'foo: bar', + two: 'foo: baz' + } + } + + let(:store) { + Configatron::RootStore.new + } + + it 'should merge config values' do + expect(store.foo).to eq('baz') + end + end + + context 'env also defined in config file' do + let(:config_files) { + { + with_env: 'env: foo' + } + } + + let(:store) { + Configatron::RootStore.new + } + + it 'should override env from config' do + expect(store.env).to eq('foo') + end + end + + context 'empty config file' do + let(:config_files) { + { + empty: '' + } + } + + it 'should configure with empty hash' do + expect(store).to have_received(:configure_from_hash).with({}) + end + end + end + + describe 'config file with ERb' do + context 'ERb success' do + let(:config_files) { + { + with_erb: 'foo: <%= 40 + 2 %>' + } + } + + before { + described_class.load_configuration(config, store) + } + + it 'should evaluate ERb' do + expect(store).to have_received(:configure_from_hash).with({ 'foo' => 42 }) + end + end + + context 'ERb failure' do + let(:config_files) { + { + with_erb: 'bogus: <%= 42 + "a" %>' + } + } + + it 'should report file name' do + expect { described_class.load_configuration(config, store) } + .to raise_error { |ex| expect(ex.backtrace.join("\n")).to match(/with_erb/) } + end + end + end +end