|
1 | 1 | require "spec_helper" |
2 | 2 | require 'ostruct' |
3 | 3 |
|
4 | | -describe LaunchDarkly::InMemoryFeatureStore do |
5 | | - subject { LaunchDarkly::InMemoryFeatureStore } |
6 | | - |
7 | | - include LaunchDarkly |
8 | | - |
9 | | - let(:store) { subject.new } |
10 | | - let(:key) { :asdf } |
11 | | - let(:feature) { { key: "asdf", value: "qwer", version: 0 } } |
12 | | - |
13 | | - describe '#all' do |
14 | | - it "will get all keys" do |
15 | | - store.upsert(LaunchDarkly::FEATURES, feature) |
16 | | - data = store.all(LaunchDarkly::FEATURES) |
17 | | - expect(data).to eq(key => feature) |
18 | | - end |
19 | | - it "will not get deleted keys" do |
20 | | - store.upsert(LaunchDarkly::FEATURES, feature) |
21 | | - store.delete(LaunchDarkly::FEATURES, key, 1) |
22 | | - data = store.all(LaunchDarkly::FEATURES) |
23 | | - expect(data).to eq({}) |
24 | | - end |
25 | | - end |
26 | | - |
27 | | - describe '#initialized?' do |
28 | | - it "will return whether the store has been initialized" do |
29 | | - expect(store.initialized?).to eq false |
30 | | - store.init(key => feature) |
31 | | - expect(store.initialized?).to eq true |
32 | | - end |
33 | | - end |
34 | | -end |
35 | | - |
36 | 4 | describe LaunchDarkly::StreamProcessor do |
37 | 5 | subject { LaunchDarkly::StreamProcessor } |
38 | 6 | let(:config) { LaunchDarkly::Config.new } |
39 | | - let(:requestor) { LaunchDarkly::Requestor.new("sdk_key", config)} |
| 7 | + let(:requestor) { double() } |
40 | 8 | let(:processor) { subject.new("sdk_key", config, requestor) } |
41 | 9 |
|
42 | 10 | describe '#process_message' do |
|
45 | 13 | let(:patch_seg_message) { OpenStruct.new({data: '{"path": "/segments/key", "data": {"key": "asdf", "version": 1}}'}) } |
46 | 14 | let(:delete_flag_message) { OpenStruct.new({data: '{"path": "/flags/key", "version": 2}'}) } |
47 | 15 | let(:delete_seg_message) { OpenStruct.new({data: '{"path": "/segments/key", "version": 2}'}) } |
| 16 | + let(:indirect_patch_flag_message) { OpenStruct.new({data: "/flags/key"}) } |
| 17 | + let(:indirect_patch_segment_message) { OpenStruct.new({data: "/segments/key"}) } |
| 18 | + |
48 | 19 | it "will accept PUT methods" do |
49 | 20 | processor.send(:process_message, put_message, LaunchDarkly::PUT) |
50 | 21 | expect(config.feature_store.get(LaunchDarkly::FEATURES, "asdf")).to eq(key: "asdf") |
|
68 | 39 | processor.send(:process_message, delete_seg_message, LaunchDarkly::DELETE) |
69 | 40 | expect(config.feature_store.get(LaunchDarkly::SEGMENTS, "key")).to eq(nil) |
70 | 41 | end |
| 42 | + it "will accept INDIRECT PATCH method for flags" do |
| 43 | + flag = { key: 'key', version: 1 } |
| 44 | + allow(requestor).to receive(:request_flag).with(flag[:key]).and_return(flag) |
| 45 | + processor.send(:process_message, indirect_patch_flag_message, LaunchDarkly::INDIRECT_PATCH); |
| 46 | + expect(config.feature_store.get(LaunchDarkly::FEATURES, flag[:key])).to eq(flag) |
| 47 | + end |
| 48 | + it "will accept INDIRECT PATCH method for segments" do |
| 49 | + segment = { key: 'key', version: 1 } |
| 50 | + allow(requestor).to receive(:request_segment).with(segment[:key]).and_return(segment) |
| 51 | + processor.send(:process_message, indirect_patch_segment_message, LaunchDarkly::INDIRECT_PATCH); |
| 52 | + expect(config.feature_store.get(LaunchDarkly::SEGMENTS, segment[:key])).to eq(segment) |
| 53 | + end |
71 | 54 | it "will log a warning if the method is not recognized" do |
72 | 55 | expect(processor.instance_variable_get(:@config).logger).to receive :warn |
73 | 56 | processor.send(:process_message, put_message, "get") |
|
0 commit comments