spec/models/shard_spec.rb in switchman-1.3.13 vs spec/models/shard_spec.rb in switchman-1.3.14.pre.1
- old
+ new
@@ -451,7 +451,77 @@
expect(Shard.shard_for(Shard.global_id_for(local_id))).to eq Shard.current
end
end
end
end
+
+ describe ".default" do
+
+ after(:each) do
+ Shard.unstub(:where)
+ Shard.default(reload: true)
+ end
+
+ it "returns the cached value if default is already set" do
+ Shard.instance_variable_set(:@default, DefaultShard.instance)
+ expect(Shard.default).to eq(DefaultShard.instance)
+ end
+
+ it "loads a default value if cached value is nil" do
+ Shard.instance_variable_set(:@default, nil)
+ expect(Shard.default).to be_a(Switchman::Shard)
+ end
+
+ it "reloads the default shard even when it's set when the reload arg present" do
+ Shard.instance_variable_set(:@default, DefaultShard.instance)
+ expect(Shard.default(true)).to be_a(Switchman::Shard)
+ end
+
+ context "when using reload with_fallback" do
+ it "replaces DefaultShard instance if cached" do
+ Shard.instance_variable_set(:@default, DefaultShard.instance)
+ expect(Shard.default(reload: true, with_fallback: true)).to be_a(Switchman::Shard)
+ end
+
+ it "replaces a Shard instance if replacement query successful" do
+ non_default = Shard.where(default: false).first
+ actual_default = Shard.where(default:true).first
+ expect(non_default).to_not be(nil)
+ expect(actual_default).to_not be(nil)
+ Shard.instance_variable_set(:@default, non_default)
+ Shard.stubs(:where).with(default: true).returns([actual_default])
+ new_default = Shard.default(reload: true, with_fallback: true)
+ expect(new_default).to eq(actual_default)
+ end
+
+ it "uses the default shard instance when fallback is off" do
+ non_default = Shard.where(default: false).first
+ actual_default = Shard.where(default:true).first
+ Shard.instance_variable_set(:@default, non_default)
+ Shard.stubs(:where).with(default: true).raises(PG::UnableToSend)
+ new_default = Shard.default(reload: true, with_fallback: false)
+ expect(new_default).to eq(DefaultShard.instance)
+ end
+
+ it "falls back to existing default shard if replacement query fails" do
+ non_default = Shard.where(default: false).first
+ Shard.instance_variable_set(:@default, non_default)
+ Shard.stubs(:where).with(default: true).raises(PG::UnableToSend)
+ new_default = Shard.default(reload: true, with_fallback: true)
+ expect(new_default).to eq(non_default)
+ end
+
+ it "respects a false reload even with fallback" do
+ Shard.instance_variable_set(:@default, DefaultShard.instance)
+ expect(Shard.default(reload: false, with_fallback: true)).to eq(DefaultShard.instance)
+ end
+
+ it "uses the original positional parameter if provided (will go away ultimately, remove this spec then)" do
+ Shard.instance_variable_set(:@default, DefaultShard.instance)
+ expect(Shard.default(true, reload: false, with_fallback: false)).to be_a(Switchman::Shard)
+ end
+ end
+
+ end
+
end
end