|
39 | 39 | let(:auth_body_response) do |
40 | 40 | File.read(File.join(SplitIoClient.root, 'spec/test_data/integrations/auth_body_response.json')) |
41 | 41 | end |
| 42 | + let(:metadata) { nil } |
| 43 | + let(:event_ready) { false } |
| 44 | + let(:sdk_update) { false } |
42 | 45 |
|
43 | 46 | before do |
44 | 47 | stub_request(:any, /https:\/\/events.*/).to_return(status: 200, body: '') |
|
155 | 158 | stub_request(:get, auth_service_url + "?s=1.3").to_return(status: 200, body: auth_body_response) |
156 | 159 |
|
157 | 160 | mock_server do |server| |
158 | | - |
| 161 | + log = StringIO.new |
159 | 162 | streaming_service_url = server.base_uri |
160 | 163 | factory = SplitIoClient::SplitFactory.new( |
161 | 164 | 'test_api_key', |
162 | 165 | streaming_service_url: streaming_service_url, |
163 | | - auth_service_url: auth_service_url |
| 166 | + auth_service_url: auth_service_url, |
| 167 | + logger: Logger.new(log), |
| 168 | + debug_enabled: true |
164 | 169 | ) |
165 | 170 |
|
| 171 | + reset_flags |
166 | 172 | client = factory.client |
| 173 | + client.register(SplitIoClient::Engine::Models::SdkEvent::SDK_READY, method(:ready_call_back)) |
| 174 | + client.register(SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE, method(:update_call_back)) |
167 | 175 | client.block_until_ready |
168 | 176 |
|
169 | 177 | server.setup_response('/') do |_, res| |
170 | 178 | send_content(res, event_split_iff_update_no_compression) |
171 | 179 | end |
172 | | - |
173 | 180 | treatment = 'control' |
174 | 181 | for i in 1..10 do |
175 | 182 | sleep(1) |
176 | 183 | treatment = client.get_treatment('admin', 'bilal_split') |
177 | 184 | break if treatment != 'control' |
178 | 185 | end |
179 | 186 |
|
| 187 | + expect(@metadata.length).to eq(2) |
| 188 | + check1 = false |
| 189 | + check2 = false |
| 190 | + @metadata.each do |meta| |
| 191 | + if meta.type == SplitIoClient::Engine::Models::SdkEventType::FLAG_UPDATE |
| 192 | + expect(meta.names).to eq(['bilal_split']) |
| 193 | + check1 = true |
| 194 | + end |
| 195 | + if meta.type == SplitIoClient::Engine::Models::SdkEventType::SEGMENTS_UPDATE |
| 196 | + expect(meta.names).to eq([]) |
| 197 | + check2 = true |
| 198 | + end |
| 199 | + end |
| 200 | + expect(check1).to be(true) |
| 201 | + expect(check2).to be(true) |
| 202 | + expect(@event_ready).to be(true) |
| 203 | + expect(@sdk_update).to eq(true) |
180 | 204 | expect(treatment).to eq('off') |
| 205 | + |
181 | 206 | client.destroy |
182 | 207 | end |
183 | 208 | end |
|
319 | 344 | stub_request(:get, auth_service_url + "?s=1.3").to_return(status: 200, body: auth_body_response) |
320 | 345 |
|
321 | 346 | streaming_service_url = server.base_uri |
| 347 | + log = StringIO.new |
322 | 348 | factory = SplitIoClient::SplitFactory.new( |
323 | 349 | 'test_api_key', |
324 | 350 | streaming_enabled: true, |
325 | 351 | streaming_service_url: streaming_service_url, |
326 | | - auth_service_url: auth_service_url |
| 352 | + auth_service_url: auth_service_url, |
| 353 | + logger: Logger.new(log), |
| 354 | + debug_enabled: true |
327 | 355 | ) |
328 | 356 |
|
| 357 | + reset_flags |
329 | 358 | client = factory.client |
| 359 | + client.register(SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE, method(:update_call_back)) |
330 | 360 | client.block_until_ready(1) |
331 | 361 | sleep(2) |
332 | 362 | expect(client.get_treatment('admin', 'push_test')).to eq('on') |
333 | 363 | expect(a_request(:get, 'https://sdk.split.io/api/splitChanges?s=1.3&since=-1&rbSince=-1')).to have_been_made.times(1) |
334 | 364 | expect(a_request(:get, 'https://sdk.split.io/api/splitChanges?s=1.3&since=1585948850109&rbSince=-1')).to have_been_made.times(1) |
335 | 365 | expect(a_request(:get, 'https://sdk.split.io/api/splitChanges?s=1.3&since=1585948850110&rbSince=-1')).to have_been_made.times(0) |
| 366 | + |
| 367 | + check1 = false |
| 368 | + @metadata.each do |meta| |
| 369 | + if meta.type == SplitIoClient::Engine::Models::SdkEventType::FLAG_UPDATE |
| 370 | + expect(meta.names.include?('push_test')).to eq(true) |
| 371 | + check1 = true |
| 372 | + end |
| 373 | + end |
| 374 | + expect(check1).to eq(true) |
| 375 | + |
336 | 376 | client.destroy |
337 | 377 | end |
338 | 378 | end |
@@ -572,4 +612,19 @@ def mock_segment_changes(segment_name, segment_json, since) |
572 | 612 | stub_request(:get, "https://sdk.split.io/api/segmentChanges/#{segment_name}?since=#{since}") |
573 | 613 | .to_return(status: 200, body: segment_json) |
574 | 614 | end |
| 615 | + |
| 616 | + def ready_call_back(metadata) |
| 617 | + @event_ready = true |
| 618 | + end |
| 619 | + |
| 620 | + def update_call_back(metadata) |
| 621 | + @sdk_update = true |
| 622 | + @metadata.push(metadata) |
| 623 | + end |
| 624 | + |
| 625 | + def reset_flags |
| 626 | + @event_ready = false |
| 627 | + @sdk_update = false |
| 628 | + @metadata = [] |
| 629 | + end |
575 | 630 | end |
0 commit comments