File: registry_spec.rb

package info (click to toggle)
ruby-flipper 0.26.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,296 kB
  • sloc: ruby: 16,377; sh: 61; javascript: 24; makefile: 14
file content (140 lines) | stat: -rw-r--r-- 2,893 bytes parent folder | download | duplicates (3)
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