|
1 | 1 | # frozen_string_literal: true |
2 | | -require "spec_helper" |
| 2 | + |
| 3 | +require 'spec_helper' |
3 | 4 |
|
4 | 5 | describe Split::Persistence::DualAdapter do |
| 6 | + let(:context) { 'some context' } |
5 | 7 |
|
6 | | - let(:context){ "some context" } |
7 | | - |
8 | | - let(:just_adapter){ Class.new } |
9 | | - let(:selected_adapter_instance){ double } |
10 | | - let(:selected_adapter){ |
11 | | - c = Class.new |
12 | | - expect(c).to receive(:new){ selected_adapter_instance } |
13 | | - c |
14 | | - } |
15 | | - let(:not_selected_adapter){ |
16 | | - c = Class.new |
17 | | - expect(c).not_to receive(:new) |
18 | | - c |
19 | | - } |
20 | | - |
21 | | - shared_examples_for "forwarding calls" do |
22 | | - it "#[]=" do |
23 | | - expect(selected_adapter_instance).to receive(:[]=).with('my_key', 'my_value') |
24 | | - expect_any_instance_of(not_selected_adapter).not_to receive(:[]=) |
25 | | - subject["my_key"] = "my_value" |
26 | | - end |
| 8 | + let(:logged_in_adapter_instance) { double } |
| 9 | + let(:logged_in_adapter) do |
| 10 | + Class.new.tap { |c| allow(c).to receive(:new) { logged_in_adapter_instance } } |
| 11 | + end |
| 12 | + let(:logged_out_adapter_instance) { double } |
| 13 | + let(:logged_out_adapter) do |
| 14 | + Class.new.tap { |c| allow(c).to receive(:new) { logged_out_adapter_instance } } |
| 15 | + end |
27 | 16 |
|
28 | | - it "#[]" do |
29 | | - expect(selected_adapter_instance).to receive(:[]).with('my_key'){'my_value'} |
30 | | - expect_any_instance_of(not_selected_adapter).not_to receive(:[]) |
31 | | - expect(subject["my_key"]).to eq('my_value') |
| 17 | + context 'when logged in' do |
| 18 | + subject do |
| 19 | + described_class.with_config( |
| 20 | + logged_in: lambda { |context| true }, |
| 21 | + logged_in_adapter: logged_in_adapter, |
| 22 | + logged_out_adapter: logged_out_adapter |
| 23 | + ).new(context) |
32 | 24 | end |
33 | 25 |
|
34 | | - it "#delete" do |
35 | | - expect(selected_adapter_instance).to receive(:delete).with('my_key'){'my_value'} |
36 | | - expect_any_instance_of(not_selected_adapter).not_to receive(:delete) |
37 | | - expect(subject.delete("my_key")).to eq('my_value') |
| 26 | + it '#[]=' do |
| 27 | + expect(logged_in_adapter_instance).to receive(:[]=).with('my_key', 'my_value') |
| 28 | + expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value') |
| 29 | + subject['my_key'] = 'my_value' |
38 | 30 | end |
39 | 31 |
|
40 | | - it "#keys" do |
41 | | - expect(selected_adapter_instance).to receive(:keys){'my_value'} |
42 | | - expect_any_instance_of(not_selected_adapter).not_to receive(:keys) |
43 | | - expect(subject.keys).to eq('my_value') |
| 32 | + it '#[]' do |
| 33 | + expect(logged_in_adapter_instance).to receive(:[]).with('my_key') { 'my_value' } |
| 34 | + expect_any_instance_of(logged_out_adapter).not_to receive(:[]) |
| 35 | + expect(subject['my_key']).to eq('my_value') |
44 | 36 | end |
45 | | - end |
46 | 37 |
|
47 | | - context "when logged in" do |
48 | | - subject { |
49 | | - described_class.with_config( |
50 | | - logged_in: lambda { |context| true }, |
51 | | - logged_in_adapter: selected_adapter, |
52 | | - logged_out_adapter: not_selected_adapter |
53 | | - ).new(context) |
54 | | - } |
| 38 | + it '#delete' do |
| 39 | + expect(logged_in_adapter_instance).to receive(:delete).with('my_key') { 'my_value' } |
| 40 | + expect(logged_out_adapter_instance).to receive(:delete).with('my_key') { 'my_value' } |
| 41 | + expect(subject.delete('my_key')).to eq('my_value') |
| 42 | + end |
55 | 43 |
|
56 | | - it_should_behave_like "forwarding calls" |
| 44 | + it '#keys' do |
| 45 | + expect(logged_in_adapter_instance).to receive(:keys) { ['my_value'] } |
| 46 | + expect(logged_out_adapter_instance).to receive(:keys) { ['my_value'] } |
| 47 | + expect(subject.keys).to eq(['my_value', 'my_value']) |
| 48 | + end |
57 | 49 | end |
58 | 50 |
|
59 | | - context "when not logged in" do |
60 | | - subject { |
| 51 | + context 'when logged out' do |
| 52 | + subject do |
61 | 53 | described_class.with_config( |
62 | 54 | logged_in: lambda { |context| false }, |
63 | | - logged_in_adapter: not_selected_adapter, |
64 | | - logged_out_adapter: selected_adapter |
65 | | - ).new(context) |
66 | | - } |
| 55 | + logged_in_adapter: logged_in_adapter, |
| 56 | + logged_out_adapter: logged_out_adapter |
| 57 | + ).new(context) |
| 58 | + end |
67 | 59 |
|
68 | | - it_should_behave_like "forwarding calls" |
| 60 | + it '#[]=' do |
| 61 | + expect_any_instance_of(logged_in_adapter).not_to receive(:[]) |
| 62 | + expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value') |
| 63 | + subject['my_key'] = 'my_value' |
| 64 | + end |
| 65 | + |
| 66 | + it '#[]' do |
| 67 | + expect_any_instance_of(logged_in_adapter).not_to receive(:[]) |
| 68 | + expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { 'my_value' } |
| 69 | + expect(subject['my_key']).to eq('my_value') |
| 70 | + end |
| 71 | + |
| 72 | + it '#delete' do |
| 73 | + expect(logged_in_adapter_instance).to receive(:delete).with('my_key') { 'my_value' } |
| 74 | + expect(logged_out_adapter_instance).to receive(:delete).with('my_key') { 'my_value' } |
| 75 | + expect(subject.delete('my_key')).to eq('my_value') |
| 76 | + end |
| 77 | + |
| 78 | + it '#keys' do |
| 79 | + expect(logged_in_adapter_instance).to receive(:keys) { ['my_value'] } |
| 80 | + expect(logged_out_adapter_instance).to receive(:keys) { ['my_value'] } |
| 81 | + expect(subject.keys).to eq(['my_value', 'my_value']) |
| 82 | + end |
69 | 83 | end |
70 | 84 |
|
71 | | - describe "when errors in config" do |
72 | | - before{ |
73 | | - described_class.config.clear |
74 | | - } |
75 | | - let(:some_proc){ ->{} } |
76 | | - it "when no logged in adapter" do |
| 85 | + describe 'when errors in config' do |
| 86 | + before { described_class.config.clear } |
| 87 | + let(:some_proc) { ->{} } |
| 88 | + |
| 89 | + it 'when no logged in adapter' do |
77 | 90 | expect{ |
78 | 91 | described_class.with_config( |
79 | 92 | logged_in: some_proc, |
80 | | - logged_out_adapter: just_adapter |
81 | | - ).new(context) |
| 93 | + logged_out_adapter: logged_out_adapter |
| 94 | + ).new(context) |
82 | 95 | }.to raise_error(StandardError, /:logged_in_adapter/) |
83 | 96 | end |
84 | | - it "when no logged out adapter" do |
| 97 | + |
| 98 | + it 'when no logged out adapter' do |
85 | 99 | expect{ |
86 | 100 | described_class.with_config( |
87 | 101 | logged_in: some_proc, |
88 | | - logged_in_adapter: just_adapter |
89 | | - ).new(context) |
| 102 | + logged_in_adapter: logged_in_adapter |
| 103 | + ).new(context) |
90 | 104 | }.to raise_error(StandardError, /:logged_out_adapter/) |
91 | 105 | end |
92 | | - it "when no logged in detector" do |
| 106 | + |
| 107 | + it 'when no logged in detector' do |
93 | 108 | expect{ |
94 | 109 | described_class.with_config( |
95 | | - logged_in_adapter: just_adapter, |
96 | | - logged_out_adapter: just_adapter |
97 | | - ).new(context) |
| 110 | + logged_in_adapter: logged_in_adapter, |
| 111 | + logged_out_adapter: logged_out_adapter |
| 112 | + ).new(context) |
98 | 113 | }.to raise_error(StandardError, /:logged_in$/) |
99 | 114 | end |
100 | 115 | end |
101 | | - |
102 | 116 | end |
0 commit comments