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')