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
|
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
require 'pp'
require 'pathname'
FlipperRoot = Pathname(__FILE__).dirname.join('..').expand_path
require 'debug'
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
require 'flipper'
require 'flipper/api'
require 'flipper/spec/shared_adapter_specs'
require 'flipper/ui'
Dir[FlipperRoot.join('spec/support/**/*.rb')].sort.each { |f| require f }
RSpec.configure do |config|
config.before(:example) do
Flipper::Poller.reset if defined?(Flipper::Poller)
Flipper.unregister_groups
Flipper.configuration = nil
end
config.disable_monkey_patching!
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
RSpec.shared_examples_for 'a percentage' do
it 'initializes with value' do
percentage = described_class.new(12)
expect(percentage).to be_instance_of(described_class)
end
it 'converts string values to integers when initializing' do
percentage = described_class.new('15')
expect(percentage.value).to eq(15)
end
it 'has a value' do
percentage = described_class.new(19)
expect(percentage.value).to eq(19)
end
it 'raises exception for value higher than 100' do
expect do
described_class.new(101)
end.to raise_error(ArgumentError,
'value must be a positive number less than or equal to 100, but was 101')
end
it 'raises exception for negative value' do
expect do
described_class.new(-1)
end.to raise_error(ArgumentError,
'value must be a positive number less than or equal to 100, but was -1')
end
end
RSpec.shared_examples_for 'a DSL feature' do
it 'returns instance of feature' do
expect(feature).to be_instance_of(Flipper::Feature)
end
it 'sets name' do
expect(feature.name).to eq(:stats)
end
it 'sets adapter' do
expect(feature.adapter.name).to eq(dsl.adapter.name)
end
it 'sets instrumenter' do
expect(feature.instrumenter).to eq(dsl.instrumenter)
end
it 'memoizes the feature' do
expect(dsl.send(method_name, :stats)).to equal(feature)
end
it 'raises argument error if not string or symbol' do
expect do
dsl.send(method_name, Object.new)
end.to raise_error(ArgumentError, /must be a String or Symbol/)
end
end
RSpec.shared_examples_for 'a DSL boolean method' do
it 'returns boolean with value set' do
result = subject.send(method_name, true)
expect(result).to be_instance_of(Flipper::Types::Boolean)
expect(result.value).to be(true)
result = subject.send(method_name, false)
expect(result).to be_instance_of(Flipper::Types::Boolean)
expect(result.value).to be(false)
end
end
|