blob: acb9528fe6a4c72f42b57007922471f5ea83fe14 (
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# 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("#{root}/config/feature_flags/development").expand_path(Runtime::Path.qa_root)
path.mkpath
Tempfile.new(%w[ff-test .yml], path)
end
let(:flag) { Pathname.new(file.path).basename('.yml').to_s }
let(:root) { '..' }
before do
definition = <<~YAML
name: #{flag}
type: development
default_enabled: #{flag_enabled}
YAML
File.write(file, definition)
end
after do
file.close!
end
shared_examples 'gets flag value' do
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
.within(max_duration: 60, sleep_interval: 5)
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
.within(max_duration: 60, sleep_interval: 5)
end
end
end
context 'with a CE feature flag' do
include_examples 'gets flag value'
end
context 'with an EE feature flag' do
let(:root) { '../ee' }
include_examples 'gets flag value'
end
end
end
end
|