spec/flipper/cloud_spec.rb in flipper-cloud-0.20.1 vs spec/flipper/cloud_spec.rb in flipper-cloud-0.20.2

- old
+ new

@@ -112,6 +112,91 @@ expect(Flipper::Adapters::Http::Client).to receive(:new) .with(hash_including(open_timeout: 1)) described_class.new('asdf', open_timeout: 1) end end + + it 'can import' do + stub_request(:post, /www\.flippercloud\.io\/adapter\/features.*/). + with(headers: { + 'Feature-Flipper-Token'=>'asdf', + 'Flipper-Cloud-Token'=>'asdf', + }).to_return(status: 200, body: "{}", headers: {}) + + flipper = Flipper.new(Flipper::Adapters::Memory.new) + + flipper.enable(:test) + flipper.enable(:search) + flipper.enable_actor(:stats, Flipper::Actor.new("jnunemaker")) + flipper.enable_percentage_of_time(:logging, 5) + + cloud_flipper = Flipper::Cloud.new("asdf") + + get_all = { + "logging" => {actors: Set.new, boolean: nil, groups: Set.new, percentage_of_actors: nil, percentage_of_time: "5"}, + "search" => {actors: Set.new, boolean: "true", groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + "stats" => {actors: Set["jnunemaker"], boolean: nil, groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + "test" => {actors: Set.new, boolean: "true", groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + } + + expect(flipper.adapter.get_all).to eq(get_all) + cloud_flipper.import(flipper) + expect(flipper.adapter.get_all).to eq(get_all) + expect(cloud_flipper.adapter.get_all).to eq(get_all) + end + + it 'raises error for failure while importing' do + stub_request(:post, /www\.flippercloud\.io\/adapter\/features.*/). + with(headers: { + 'Feature-Flipper-Token'=>'asdf', + 'Flipper-Cloud-Token'=>'asdf', + }).to_return(status: 500, body: "{}") + + flipper = Flipper.new(Flipper::Adapters::Memory.new) + + flipper.enable(:test) + flipper.enable(:search) + flipper.enable_actor(:stats, Flipper::Actor.new("jnunemaker")) + flipper.enable_percentage_of_time(:logging, 5) + + cloud_flipper = Flipper::Cloud.new("asdf") + + get_all = { + "logging" => {actors: Set.new, boolean: nil, groups: Set.new, percentage_of_actors: nil, percentage_of_time: "5"}, + "search" => {actors: Set.new, boolean: "true", groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + "stats" => {actors: Set["jnunemaker"], boolean: nil, groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + "test" => {actors: Set.new, boolean: "true", groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + } + + expect(flipper.adapter.get_all).to eq(get_all) + expect { cloud_flipper.import(flipper) }.to raise_error(Flipper::Adapters::Http::Error) + expect(flipper.adapter.get_all).to eq(get_all) + end + + it 'raises error for timeout while importing' do + stub_request(:post, /www\.flippercloud\.io\/adapter\/features.*/). + with(headers: { + 'Feature-Flipper-Token'=>'asdf', + 'Flipper-Cloud-Token'=>'asdf', + }).to_timeout + + flipper = Flipper.new(Flipper::Adapters::Memory.new) + + flipper.enable(:test) + flipper.enable(:search) + flipper.enable_actor(:stats, Flipper::Actor.new("jnunemaker")) + flipper.enable_percentage_of_time(:logging, 5) + + cloud_flipper = Flipper::Cloud.new("asdf") + + get_all = { + "logging" => {actors: Set.new, boolean: nil, groups: Set.new, percentage_of_actors: nil, percentage_of_time: "5"}, + "search" => {actors: Set.new, boolean: "true", groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + "stats" => {actors: Set["jnunemaker"], boolean: nil, groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + "test" => {actors: Set.new, boolean: "true", groups: Set.new, percentage_of_actors: nil, percentage_of_time: nil}, + } + + expect(flipper.adapter.get_all).to eq(get_all) + expect { cloud_flipper.import(flipper) }.to raise_error(Net::OpenTimeout) + expect(flipper.adapter.get_all).to eq(get_all) + end end