1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
require 'flipper/adapters/instrumented'
require 'flipper/instrumenters/memory'
RSpec.describe Flipper::Adapters::Instrumented do
let(:instrumenter) { Flipper::Instrumenters::Memory.new }
let(:adapter) { Flipper::Adapters::Memory.new }
let(:flipper) { Flipper.new(adapter) }
let(:feature) { flipper[:stats] }
let(:gate) { feature.gate(:percentage_of_actors) }
let(:thing) { flipper.actors(22) }
subject do
described_class.new(adapter, instrumenter: instrumenter)
end
it_should_behave_like 'a flipper adapter'
it 'forwards missing methods to underlying adapter' do
adapter = Class.new do
def foo
:foo
end
end.new
instrumented = described_class.new(adapter)
expect(instrumented.foo).to eq(:foo)
end
describe '#name' do
it 'is instrumented' do
expect(subject.name).to be(:instrumented)
end
end
describe '#get' do
it 'records instrumentation' do
result = subject.get(feature)
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:get)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_name]).to eq(:stats)
expect(event.payload[:result]).to be(result)
end
end
describe '#get_multi' do
it 'records instrumentation' do
result = subject.get_multi([feature])
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:get_multi)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_names]).to eq([:stats])
expect(event.payload[:result]).to be(result)
end
end
describe '#enable' do
it 'records instrumentation' do
result = subject.enable(feature, gate, thing)
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:enable)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_name]).to eq(:stats)
expect(event.payload[:gate_name]).to eq(:percentage_of_actors)
expect(event.payload[:thing_value]).to eq(22)
expect(event.payload[:result]).to be(result)
end
end
describe '#disable' do
it 'records instrumentation' do
result = subject.disable(feature, gate, thing)
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:disable)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_name]).to eq(:stats)
expect(event.payload[:gate_name]).to eq(:percentage_of_actors)
expect(event.payload[:thing_value]).to eq(22)
expect(event.payload[:result]).to be(result)
end
end
describe '#add' do
it 'records instrumentation' do
result = subject.add(feature)
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:add)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_name]).to eq(:stats)
expect(event.payload[:result]).to be(result)
end
end
describe '#remove' do
it 'records instrumentation' do
result = subject.remove(feature)
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:remove)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_name]).to eq(:stats)
expect(event.payload[:result]).to be(result)
end
end
describe '#clear' do
it 'records instrumentation' do
result = subject.clear(feature)
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:clear)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:feature_name]).to eq(:stats)
expect(event.payload[:result]).to be(result)
end
end
describe '#features' do
it 'records instrumentation' do
result = subject.features
event = instrumenter.events.last
expect(event).not_to be_nil
expect(event.name).to eq('adapter_operation.flipper')
expect(event.payload[:operation]).to eq(:features)
expect(event.payload[:adapter_name]).to eq(:memory)
expect(event.payload[:result]).to be(result)
end
end
end
|