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