spec/flipper/adapters/memoizable_spec.rb in flipper-0.11.0.beta9 vs spec/flipper/adapters/memoizable_spec.rb in flipper-0.11.0.rc1

- old
+ new

@@ -1,8 +1,9 @@ require 'helper' require 'flipper/adapters/memoizable' require 'flipper/adapters/memory' +require 'flipper/adapters/operation_logger' require 'flipper/spec/shared_adapter_specs' RSpec.describe Flipper::Adapters::Memoizable do let(:features_key) { described_class::FeaturesKey } let(:adapter) { Flipper::Adapters::Memory.new } @@ -64,11 +65,11 @@ end it 'memoizes feature' do feature = flipper[:stats] result = subject.get(feature) - expect(cache[feature.key]).to be(result) + expect(cache[described_class.key_for(feature.key)]).to be(result) end end context 'with memoization disabled' do before do @@ -93,12 +94,12 @@ it 'memoizes features' do names = %i(stats shiny) features = names.map { |name| flipper[name] } results = subject.get_multi(features) features.each do |feature| - expect(cache[feature.key]).not_to be(nil) - expect(cache[feature.key]).to be(results[feature.key]) + expect(cache[described_class.key_for(feature.key)]).not_to be(nil) + expect(cache[described_class.key_for(feature.key)]).to be(results[feature.key]) end end end context 'with memoization disabled' do @@ -125,15 +126,36 @@ it 'memoizes features' do names = %i(stats shiny) features = names.map { |name| flipper[name].tap(&:enable) } results = subject.get_all features.each do |feature| - expect(cache[feature.key]).not_to be(nil) - expect(cache[feature.key]).to be(results[feature.key]) + expect(cache[described_class.key_for(feature.key)]).not_to be(nil) + expect(cache[described_class.key_for(feature.key)]).to be(results[feature.key]) end expect(cache[subject.class::FeaturesKey]).to eq(names.map(&:to_s).to_set) end + + it 'only calls get_all once for memoized adapter' do + adapter = Flipper::Adapters::OperationLogger.new(Flipper::Adapters::Memory.new) + cache = {} + instance = described_class.new(adapter, cache) + instance.memoize = true + + instance.get_all + expect(adapter.count(:get_all)).to be(1) + + instance.get_all + expect(adapter.count(:get_all)).to be(1) + end + + it 'returns default_config for unknown feature keys' do + first = subject.get_all + expect(first['doesntexist']).to eq(subject.default_config) + + second = subject.get_all + expect(second['doesntexist']).to eq(subject.default_config) + end end context "with memoization disabled" do before do subject.memoize = false @@ -144,10 +166,31 @@ names.map { |name| flipper[name].tap(&:enable) } result = subject.get_all adapter_result = adapter.get_all expect(result).to eq(adapter_result) end + + it 'calls get_all every time for memoized adapter' do + adapter = Flipper::Adapters::OperationLogger.new(Flipper::Adapters::Memory.new) + cache = {} + instance = described_class.new(adapter, cache) + instance.memoize = false + + instance.get_all + expect(adapter.count(:get_all)).to be(1) + + instance.get_all + expect(adapter.count(:get_all)).to be(2) + end + + it 'returns nil for unknown feature keys' do + first = subject.get_all + expect(first['doesntexist']).to be(nil) + + second = subject.get_all + expect(second['doesntexist']).to be(nil) + end end end describe '#enable' do context 'with memoization enabled' do @@ -156,13 +199,13 @@ end it 'unmemoizes feature' do feature = flipper[:stats] gate = feature.gate(:boolean) - cache[feature.key] = { some: 'thing' } + cache[described_class.key_for(feature.key)] = { some: 'thing' } subject.enable(feature, gate, flipper.bool) - expect(cache[feature.key]).to be_nil + expect(cache[described_class.key_for(feature.key)]).to be_nil end end context 'with memoization disabled' do before do @@ -186,13 +229,13 @@ end it 'unmemoizes feature' do feature = flipper[:stats] gate = feature.gate(:boolean) - cache[feature.key] = { some: 'thing' } + cache[described_class.key_for(feature.key)] = { some: 'thing' } subject.disable(feature, gate, flipper.bool) - expect(cache[feature.key]).to be_nil + expect(cache[described_class.key_for(feature.key)]).to be_nil end end context 'with memoization disabled' do before do @@ -270,13 +313,13 @@ expect(cache).to be_empty end it 'unmemoizes the feature' do feature = flipper[:stats] - cache[feature.key] = { some: 'thing' } + cache[described_class.key_for(feature.key)] = { some: 'thing' } subject.remove(feature) - expect(cache[feature.key]).to be_nil + expect(cache[described_class.key_for(feature.key)]).to be_nil end end context 'with memoization disabled' do before do @@ -295,12 +338,12 @@ subject.memoize = true end it 'unmemoizes feature' do feature = flipper[:stats] - cache[feature.key] = { some: 'thing' } + cache[described_class.key_for(feature.key)] = { some: 'thing' } subject.clear(feature) - expect(cache[feature.key]).to be_nil + expect(cache[described_class.key_for(feature.key)]).to be_nil end end context 'with memoization disabled' do before do