|
4 | 4 | require 'datadog/open_feature/evaluation_engine' |
5 | 5 |
|
6 | 6 | RSpec.describe Datadog::OpenFeature::EvaluationEngine do |
7 | | - let(:evaluator) { described_class.new(telemetry, logger: logger) } |
| 7 | + let(:engine) { described_class.new(reporter, telemetry: telemetry, logger: logger) } |
| 8 | + let(:reporter) { instance_double(Datadog::OpenFeature::Exposures::Reporter) } |
8 | 9 | let(:telemetry) { instance_double(Datadog::Core::Telemetry::Component) } |
9 | 10 | let(:logger) { instance_double(Datadog::Core::Logger) } |
10 | 11 | let(:ufc) do |
|
41 | 42 | end |
42 | 43 |
|
43 | 44 | describe '#fetch_value' do |
44 | | - let(:result) { evaluator.fetch_value(flag_key: 'test', expected_type: :string) } |
| 45 | + let(:result) { engine.fetch_value(flag_key: 'test', expected_type: :string) } |
45 | 46 |
|
46 | 47 | context 'when binding evaluator is not ready' do |
47 | 48 | it 'returns evaluation error' do |
|
53 | 54 |
|
54 | 55 | context 'when binding evaluator returns error' do |
55 | 56 | before do |
56 | | - evaluator.configuration = ufc |
57 | | - evaluator.reconfigure! |
| 57 | + engine.configuration = ufc |
| 58 | + engine.reconfigure! |
58 | 59 |
|
59 | 60 | allow_any_instance_of(Datadog::OpenFeature::Binding::Evaluator).to receive(:get_assignment) |
60 | 61 | .and_return(error) |
|
71 | 72 |
|
72 | 73 | context 'when binding evaluator raises error' do |
73 | 74 | before do |
74 | | - evaluator.configuration = ufc |
75 | | - evaluator.reconfigure! |
| 75 | + engine.configuration = ufc |
| 76 | + engine.reconfigure! |
76 | 77 |
|
77 | 78 | allow(telemetry).to receive(:report) |
78 | 79 | allow_any_instance_of(Datadog::OpenFeature::Binding::Evaluator).to receive(:get_assignment) |
|
90 | 91 |
|
91 | 92 | context 'when expected type not in the allowed list' do |
92 | 93 | before do |
93 | | - evaluator.configuration = ufc |
94 | | - evaluator.reconfigure! |
| 94 | + engine.configuration = ufc |
| 95 | + engine.reconfigure! |
95 | 96 | end |
96 | 97 |
|
97 | | - let(:result) { evaluator.fetch_value(flag_key: 'test', expected_type: :whatever) } |
| 98 | + let(:result) { engine.fetch_value(flag_key: 'test', expected_type: :whatever) } |
98 | 99 |
|
99 | 100 | it 'returns evaluation error' do |
100 | 101 | expect(result.reason).to eq('ERROR') |
|
105 | 106 |
|
106 | 107 | context 'when binding evaluator returns resolution details' do |
107 | 108 | before do |
108 | | - evaluator.configuration = ufc |
109 | | - evaluator.reconfigure! |
| 109 | + engine.configuration = ufc |
| 110 | + engine.reconfigure! |
110 | 111 | end |
111 | 112 |
|
112 | | - let(:result) { evaluator.fetch_value(flag_key: 'test', expected_type: :string) } |
| 113 | + let(:result) { engine.fetch_value(flag_key: 'test', expected_type: :string) } |
113 | 114 |
|
114 | 115 | it { expect(result.value).to eq('hello') } |
115 | 116 | end |
|
120 | 121 | it 'does nothing and logs the issue' do |
121 | 122 | expect(logger).to receive(:debug).with(/OpenFeature: Configuration is not received, skip reconfiguration/) |
122 | 123 |
|
123 | | - evaluator.reconfigure! |
| 124 | + engine.reconfigure! |
124 | 125 | end |
125 | 126 | end |
126 | 127 |
|
127 | 128 | context 'when binding initialization fails with exception' do |
128 | 129 | before do |
129 | | - evaluator.configuration = ufc |
130 | | - evaluator.reconfigure! |
| 130 | + engine.configuration = ufc |
| 131 | + engine.reconfigure! |
131 | 132 |
|
132 | 133 | allow(Datadog::OpenFeature::Binding::Evaluator).to receive(:new).and_raise(error) |
133 | 134 | end |
|
139 | 140 | expect(telemetry).to receive(:report) |
140 | 141 | .with(error, description: match(/OpenFeature: Failed to reconfigure/)) |
141 | 142 |
|
142 | | - evaluator.configuration = '{}' |
143 | | - expect { evaluator.reconfigure! }.not_to raise_error |
| 143 | + engine.configuration = '{}' |
| 144 | + expect { engine.reconfigure! }.not_to raise_error |
144 | 145 | end |
145 | 146 |
|
146 | 147 | it 'persists previouly configured evaluator' do |
147 | 148 | allow(logger).to receive(:error) |
148 | 149 | allow(telemetry).to receive(:report) |
149 | 150 |
|
150 | | - evaluator.configuration = '{}' |
151 | | - expect { evaluator.reconfigure! }.not_to change { |
152 | | - evaluator.fetch_value(flag_key: 'test', expected_type: :string).value |
| 151 | + engine.configuration = '{}' |
| 152 | + expect { engine.reconfigure! }.not_to change { |
| 153 | + engine.fetch_value(flag_key: 'test', expected_type: :string).value |
153 | 154 | }.from('hello') |
154 | 155 | end |
155 | 156 | end |
156 | 157 |
|
157 | 158 | context 'when binding initialization succeeds' do |
158 | 159 | before do |
159 | | - evaluator.configuration = ufc |
160 | | - evaluator.reconfigure! |
| 160 | + engine.configuration = ufc |
| 161 | + engine.reconfigure! |
161 | 162 | end |
162 | 163 |
|
163 | 164 | let(:new_ufc) do |
|
194 | 195 | end |
195 | 196 |
|
196 | 197 | xit 'reconfigures binding evaluator with new flags configuration' do |
197 | | - expect { evaluator.configuration = new_ufc; evaluator.reconfigure!} |
198 | | - .to change { evaluator.fetch_value(flag_key: 'test', expected_type: :string).value } |
| 198 | + expect { engine.configuration = new_ufc; engine.reconfigure!} |
| 199 | + .to change { engine.fetch_value(flag_key: 'test', expected_type: :string).value } |
199 | 200 | .from('hello').to('goodbye') |
200 | 201 | end |
201 | 202 | end |
|
0 commit comments