spec/octopus/model_spec.rb in ar-octopus-0.8.5 vs spec/octopus/model_spec.rb in ar-octopus-0.8.6

- old
+ new

@@ -1,9 +1,13 @@ require 'spec_helper' describe Octopus::Model do describe '#using method' do + it 'raise when Model#using receives a block' do + expect { User.using(:master) { true } }.to raise_error(Octopus::Exception, /User\.using is not allowed to receive a block/) + end + it 'should allow to send a block to the master shard' do Octopus.using(:master) do User.create!(:name => 'Block test') end @@ -14,10 +18,20 @@ User.using('canada').create!(:name => 'Rafael Pilha') expect(User.using('canada').find_by_name('Rafael Pilha')).not_to be_nil end + it 'should allow comparison of a string shard name with symbol shard name' do + u = User.using('canada').create!(:name => 'Rafael Pilha') + expect(u).to eq(User.using(:canada).find_by_name('Rafael Pilha')) + end + + it 'should allow comparison of a symbol shard name with string shard name' do + u = User.using(:canada).create!(:name => 'Rafael Pilha') + expect(u).to eq(User.using('canada').find_by_name('Rafael Pilha')) + end + it 'should allow to pass a string as the shard name to a block' do Octopus.using('canada') do User.create!(:name => 'Rafael Pilha') end @@ -79,10 +93,25 @@ end.to raise_error expect(ActiveRecord::Base.connection.current_shard).to eq(:master) end + it 'should ensure that the connection will be cleaned with custom master' do + OctopusHelper.using_environment :octopus do + Octopus.config[:master_shard] = :brazil + expect(ActiveRecord::Base.connection.current_shard).to eq(:brazil) + expect do + Octopus.using(:canada) do + fail 'Some Exception' + end + end.to raise_error + + expect(ActiveRecord::Base.connection.current_shard).to eq(:brazil) + Octopus.config[:master_shard] = nil + end + end + it 'should allow creating more than one user' do User.using(:canada).create([{ :name => 'America User 1' }, { :name => 'America User 2' }]) User.create!(:name => 'Thiago') expect(User.using(:canada).find_by_name('America User 1')).not_to be_nil expect(User.using(:canada).find_by_name('America User 2')).not_to be_nil @@ -97,10 +126,19 @@ it 'should clean #current_shard from proxy when using execute' do User.using(:canada).connection.execute('select * from users limit 1;') expect(User.connection.current_shard).to eq(:master) end + it 'should clean #current_shard from proxy when using execute' do + OctopusHelper.using_environment :octopus do + Octopus.config[:master_shard] = :brazil + User.using(:canada).connection.execute('select * from users limit 1;') + expect(User.connection.current_shard).to eq(:brazil) + Octopus.config[:master_shard] = nil + end + end + it 'should allow scoping dynamically' do User.using(:canada).using(:master).using(:canada).create!(:name => 'oi') expect(User.using(:canada).using(:master).count).to eq(0) expect(User.using(:master).using(:canada).count).to eq(1) end @@ -259,9 +297,15 @@ end describe 'AR basic methods' do it 'establish_connection' do expect(CustomConnection.connection.current_database).to eq('octopus_shard_2') + end + + it 'reuses parent model connection' do + klass = Class.new(CustomConnection) + + expect(klass.connection).to be klass.connection end it 'should not mess with custom connection table names' do expect(Advert.connection.current_database).to eq('octopus_shard_1') Advert.create!(:name => 'Teste')