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
|
require 'flipper/registry'
RSpec.describe Flipper::Registry do
subject { described_class.new(source) }
let(:source) { {} }
describe '#add' do
it 'adds to source' do
value = 'thing'
subject.add(:admins, value)
expect(source[:admins]).to eq(value)
end
it 'converts key to symbol' do
value = 'thing'
subject.add('admins', value)
expect(source[:admins]).to eq(value)
end
it 'raises exception if key already registered' do
subject.add(:admins, 'thing')
expect do
subject.add('admins', 'again')
end.to raise_error(Flipper::Registry::DuplicateKey)
end
end
describe '#get' do
context 'key registered' do
before do
source[:admins] = 'thing'
end
it 'returns value' do
expect(subject.get(:admins)).to eq('thing')
end
it 'returns value if given string key' do
expect(subject.get('admins')).to eq('thing')
end
end
context 'key not registered' do
it 'returns nil' do
expect(subject.get(:admins)).to be(nil)
end
end
end
describe '#key?' do
before do
source[:admins] = 'admins'
end
it 'returns true if the key exists' do
expect(subject.key?(:admins)).to eq true
end
it 'returns false if the key does not exists' do
expect(subject.key?(:unknown_key)).to eq false
end
end
describe '#each' do
before do
source[:admins] = 'admins'
source[:devs] = 'devs'
end
it 'iterates source keys and values' do
results = {}
subject.each do |key, value|
results[key] = value
end
expect(results).to eq(admins: 'admins',
devs: 'devs')
end
end
describe '#keys' do
before do
source[:admins] = 'admins'
source[:devs] = 'devs'
end
it 'returns the keys' do
expect(subject.keys.map(&:to_s).sort).to eq(%w(admins devs))
end
it 'returns the keys as symbols' do
subject.keys.each do |key|
expect(key).to be_instance_of(Symbol)
end
end
end
describe '#values' do
before do
source[:admins] = 'admins'
source[:devs] = 'devs'
end
it 'returns the values' do
expect(subject.values.map(&:to_s).sort).to eq(%w(admins devs))
end
end
describe 'enumeration' do
before do
source[:admins] = 'admins'
source[:devs] = 'devs'
end
it 'works' do
keys = []
values = []
subject.map do |key, value|
keys << key
values << value
end
expect(keys.map(&:to_s).sort).to eq(%w(admins devs))
expect(values.sort).to eq(%w(admins devs))
end
end
describe '#clear' do
before do
source[:admins] = 'admins'
end
it 'clears the source' do
subject.clear
expect(source).to be_empty
end
end
end
|