blob: 7e68c70ee097c609e3f837336518e11e689e054c (
plain)
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
|
# frozen_string_literal: true
module QA
RSpec.describe 'Feature flag handler sanity checks', :sanity_feature_flags do
context 'with an existing feature flag definition file' do
let(:definition) do
path = Pathname.new('../config/feature_flags')
.expand_path(Runtime::Path.qa_root)
.glob('**/*.yml')
.first
YAML.safe_load(File.read(path))
end
it 'reads the correct default enabled state' do
# This test will fail if we ever remove all the feature flags, but that's very unlikely given how many there
# are and how much we rely on them.
expect(QA::Runtime::Feature.enabled?(definition['name'])).to be definition['default_enabled']
end
end
describe 'feature flag definition files' do
let(:file) do
path = Pathname.new('../config/feature_flags/development').expand_path(Runtime::Path.qa_root)
Tempfile.new(%w[ff-test .yml], path)
end
let(:flag) { Pathname.new(file.path).basename('.yml').to_s }
before do
definition = <<~YAML
name: #{flag}
type: development
default_enabled: #{flag_enabled}
YAML
File.write(file, definition)
end
after do
file.close!
end
context 'with a default disabled feature flag' do
let(:flag_enabled) { 'false' }
it 'reads the flag as disabled' do
expect(QA::Runtime::Feature.enabled?(flag)).to be false
end
it 'reads as enabled after the flag is enabled' do
QA::Runtime::Feature.enable(flag)
expect { QA::Runtime::Feature.enabled?(flag) }.to eventually_be_truthy
end
end
context 'with a default enabled feature flag' do
let(:flag_enabled) { 'true' }
it 'reads the flag as enabled' do
expect(QA::Runtime::Feature.enabled?(flag)).to be true
end
it 'reads as disabled after the flag is disabled' do
QA::Runtime::Feature.disable(flag)
expect { QA::Runtime::Feature.enabled?(flag) }.to eventually_be_falsey
end
end
end
end
end
|