spec/persistence/dual_adapter_spec.rb in split-3.3.2 vs spec/persistence/dual_adapter_spec.rb in split-3.4.0
- old
+ new
@@ -1,102 +1,194 @@
# frozen_string_literal: true
-require "spec_helper"
+require 'spec_helper'
+
describe Split::Persistence::DualAdapter do
+ let(:context) { 'some context' }
- let(:context){ "some context" }
+ let(:logged_in_adapter_instance) { double }
+ let(:logged_in_adapter) do
+ Class.new.tap { |c| allow(c).to receive(:new) { logged_in_adapter_instance } }
+ end
+ let(:logged_out_adapter_instance) { double }
+ let(:logged_out_adapter) do
+ Class.new.tap { |c| allow(c).to receive(:new) { logged_out_adapter_instance } }
+ end
- let(:just_adapter){ Class.new }
- let(:selected_adapter_instance){ double }
- let(:selected_adapter){
- c = Class.new
- expect(c).to receive(:new){ selected_adapter_instance }
- c
- }
- let(:not_selected_adapter){
- c = Class.new
- expect(c).not_to receive(:new)
- c
- }
+ context 'when fallback_to_logged_out_adapter is false' do
+ context 'when logged in' do
+ subject do
+ described_class.with_config(
+ logged_in: lambda { |context| true },
+ logged_in_adapter: logged_in_adapter,
+ logged_out_adapter: logged_out_adapter,
+ fallback_to_logged_out_adapter: false
+ ).new(context)
+ end
- shared_examples_for "forwarding calls" do
- it "#[]=" do
- expect(selected_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
- expect_any_instance_of(not_selected_adapter).not_to receive(:[]=)
- subject["my_key"] = "my_value"
- end
+ it '#[]=' do
+ expect(logged_in_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
+ expect_any_instance_of(logged_out_adapter).not_to receive(:[]=)
+ subject['my_key'] = 'my_value'
+ end
- it "#[]" do
- expect(selected_adapter_instance).to receive(:[]).with('my_key'){'my_value'}
- expect_any_instance_of(not_selected_adapter).not_to receive(:[])
- expect(subject["my_key"]).to eq('my_value')
- end
+ it '#[]' do
+ expect(logged_in_adapter_instance).to receive(:[]).with('my_key') { 'my_value' }
+ expect_any_instance_of(logged_out_adapter).not_to receive(:[])
+ expect(subject['my_key']).to eq('my_value')
+ end
- it "#delete" do
- expect(selected_adapter_instance).to receive(:delete).with('my_key'){'my_value'}
- expect_any_instance_of(not_selected_adapter).not_to receive(:delete)
- expect(subject.delete("my_key")).to eq('my_value')
+ it '#delete' do
+ expect(logged_in_adapter_instance).to receive(:delete).with('my_key') { 'my_value' }
+ expect_any_instance_of(logged_out_adapter).not_to receive(:delete)
+ expect(subject.delete('my_key')).to eq('my_value')
+ end
+
+ it '#keys' do
+ expect(logged_in_adapter_instance).to receive(:keys) { ['my_value'] }
+ expect_any_instance_of(logged_out_adapter).not_to receive(:keys)
+ expect(subject.keys).to eq(['my_value'])
+ end
end
- it "#keys" do
- expect(selected_adapter_instance).to receive(:keys){'my_value'}
- expect_any_instance_of(not_selected_adapter).not_to receive(:keys)
- expect(subject.keys).to eq('my_value')
+ context 'when logged out' do
+ subject do
+ described_class.with_config(
+ logged_in: lambda { |context| false },
+ logged_in_adapter: logged_in_adapter,
+ logged_out_adapter: logged_out_adapter,
+ fallback_to_logged_out_adapter: false
+ ).new(context)
+ end
+
+ it '#[]=' do
+ expect_any_instance_of(logged_in_adapter).not_to receive(:[]=)
+ expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
+ subject['my_key'] = 'my_value'
+ end
+
+ it '#[]' do
+ expect_any_instance_of(logged_in_adapter).not_to receive(:[])
+ expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { 'my_value' }
+ expect(subject['my_key']).to eq('my_value')
+ end
+
+ it '#delete' do
+ expect_any_instance_of(logged_in_adapter).not_to receive(:delete)
+ expect(logged_out_adapter_instance).to receive(:delete).with('my_key') { 'my_value' }
+ expect(subject.delete('my_key')).to eq('my_value')
+ end
+
+ it '#keys' do
+ expect_any_instance_of(logged_in_adapter).not_to receive(:keys)
+ expect(logged_out_adapter_instance).to receive(:keys) { ['my_value', 'my_value2'] }
+ expect(subject.keys).to eq(['my_value', 'my_value2'])
+ end
end
end
- context "when logged in" do
- subject {
- described_class.with_config(
- logged_in: lambda { |context| true },
- logged_in_adapter: selected_adapter,
- logged_out_adapter: not_selected_adapter
+ context 'when fallback_to_logged_out_adapter is true' do
+ context 'when logged in' do
+ subject do
+ described_class.with_config(
+ logged_in: lambda { |context| true },
+ logged_in_adapter: logged_in_adapter,
+ logged_out_adapter: logged_out_adapter,
+ fallback_to_logged_out_adapter: true
).new(context)
- }
+ end
- it_should_behave_like "forwarding calls"
- end
+ it '#[]=' do
+ expect(logged_in_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
+ expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
+ expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { nil }
+ subject['my_key'] = 'my_value'
+ end
- context "when not logged in" do
- subject {
- described_class.with_config(
- logged_in: lambda { |context| false },
- logged_in_adapter: not_selected_adapter,
- logged_out_adapter: selected_adapter
+ it '#[]' do
+ expect(logged_in_adapter_instance).to receive(:[]).with('my_key') { 'my_value' }
+ expect_any_instance_of(logged_out_adapter).not_to receive(:[])
+ expect(subject['my_key']).to eq('my_value')
+ end
+
+ it '#delete' do
+ expect(logged_in_adapter_instance).to receive(:delete).with('my_key') { 'my_value' }
+ expect(logged_out_adapter_instance).to receive(:delete).with('my_key') { 'my_value' }
+ expect(subject.delete('my_key')).to eq('my_value')
+ end
+
+ it '#keys' do
+ expect(logged_in_adapter_instance).to receive(:keys) { ['my_value'] }
+ expect(logged_out_adapter_instance).to receive(:keys) { ['my_value', 'my_value2'] }
+ expect(subject.keys).to eq(['my_value', 'my_value2'])
+ end
+ end
+
+ context 'when logged out' do
+ subject do
+ described_class.with_config(
+ logged_in: lambda { |context| false },
+ logged_in_adapter: logged_in_adapter,
+ logged_out_adapter: logged_out_adapter,
+ fallback_to_logged_out_adapter: true
).new(context)
- }
+ end
- it_should_behave_like "forwarding calls"
+ it '#[]=' do
+ expect_any_instance_of(logged_in_adapter).not_to receive(:[]=)
+ expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
+ expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { nil }
+ subject['my_key'] = 'my_value'
+ end
+
+ it '#[]' do
+ expect_any_instance_of(logged_in_adapter).not_to receive(:[])
+ expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { 'my_value' }
+ expect(subject['my_key']).to eq('my_value')
+ end
+
+ it '#delete' do
+ expect(logged_in_adapter_instance).to receive(:delete).with('my_key') { 'my_value' }
+ expect(logged_out_adapter_instance).to receive(:delete).with('my_key') { 'my_value' }
+ expect(subject.delete('my_key')).to eq('my_value')
+ end
+
+ it '#keys' do
+ expect(logged_in_adapter_instance).to receive(:keys) { ['my_value'] }
+ expect(logged_out_adapter_instance).to receive(:keys) { ['my_value', 'my_value2'] }
+ expect(subject.keys).to eq(['my_value', 'my_value2'])
+ end
+ end
end
- describe "when errors in config" do
- before{
- described_class.config.clear
- }
- let(:some_proc){ ->{} }
- it "when no logged in adapter" do
+ describe 'when errors in config' do
+ before { described_class.config.clear }
+ let(:some_proc) { ->{} }
+
+ it 'when no logged in adapter' do
expect{
described_class.with_config(
logged_in: some_proc,
- logged_out_adapter: just_adapter
- ).new(context)
+ logged_out_adapter: logged_out_adapter
+ ).new(context)
}.to raise_error(StandardError, /:logged_in_adapter/)
end
- it "when no logged out adapter" do
+
+ it 'when no logged out adapter' do
expect{
described_class.with_config(
logged_in: some_proc,
- logged_in_adapter: just_adapter
- ).new(context)
+ logged_in_adapter: logged_in_adapter
+ ).new(context)
}.to raise_error(StandardError, /:logged_out_adapter/)
end
- it "when no logged in detector" do
+
+ it 'when no logged in detector' do
expect{
described_class.with_config(
- logged_in_adapter: just_adapter,
- logged_out_adapter: just_adapter
- ).new(context)
+ logged_in_adapter: logged_in_adapter,
+ logged_out_adapter: logged_out_adapter
+ ).new(context)
}.to raise_error(StandardError, /:logged_in$/)
end
end
-
end