diff options
author | Salim Afiune <afiune@chef.io> | 2017-03-03 15:31:42 -0500 |
---|---|---|
committer | Salim Afiune <afiune@chef.io> | 2017-03-03 17:04:02 -0500 |
commit | e55307170dbeb693933307c194a23a8a458e4571 (patch) | |
tree | 87340ca53c1d67b4b59a68f127bf6ca958897b30 | |
parent | ed8de07a2c601b46d65cee3d9a44f76a676fc71d (diff) | |
download | chef-e55307170dbeb693933307c194a23a8a458e4571.tar.gz |
Add test to assert we use GET Requestafiune/COOL-634/verify-if-data-bag-exists
Signed-off-by: Salim Afiune <afiune@chef.io>
-rw-r--r-- | spec/unit/knife/data_bag_create_spec.rb | 110 |
1 files changed, 65 insertions, 45 deletions
diff --git a/spec/unit/knife/data_bag_create_spec.rb b/spec/unit/knife/data_bag_create_spec.rb index b852c30401..b7d185a58c 100644 --- a/spec/unit/knife/data_bag_create_spec.rb +++ b/spec/unit/knife/data_bag_create_spec.rb @@ -46,64 +46,84 @@ describe Chef::Knife::DataBagCreate do allow(knife).to receive(:config).and_return(config) end - it "tries to create a data bag with an invalid name when given one argument" do - knife.name_args = ["invalid&char"] - expect(Chef::DataBag).to receive(:validate_name!).with(knife.name_args[0]).and_raise(Chef::Exceptions::InvalidDataBagName) - expect { knife.run }.to exit_with_code(1) - end - - context "when given one argument" do - before do - knife.name_args = [bag_name] - end - - it "creates a data bag" do - expect(rest).to receive(:post).with("data", { "name" => bag_name }) - expect(knife.ui).to receive(:info).with("Created data_bag[#{bag_name}]") + context "when data_bag already exist" do + it "doesn't creates a data bag" do + expect(knife).to receive(:create_object).and_yield(raw_hash) + expect(rest).to receive(:get).with("data/#{bag_name}") + expect(rest).to_not receive(:post).with("data", { "name" => bag_name }) + expect(knife.ui).to receive(:info).with("Data bag #{bag_name} already exists") knife.run end end - context "no secret is specified for encryption" do - let(:item) do - item = Chef::DataBagItem.from_hash(raw_hash) - item.data_bag(bag_name) - item + context "when data_bag doesn't exist" do + before do + # Data bag doesn't exist by default so we mock the GET request to return 404 + exception = double("404 error", :code => "404") + allow(rest).to receive(:get) + .with("data/#{bag_name}") + .and_raise(Net::HTTPServerException.new("404", exception)) end - it "creates a data bag item" do - expect(knife).to receive(:create_object).and_yield(raw_hash) - expect(knife).to receive(:encryption_secret_provided?).and_return(false) - expect(rest).to receive(:post).with("data", { "name" => bag_name }).ordered - expect(rest).to receive(:post).with("data/#{bag_name}", item).ordered - - knife.run + it "tries to create a data bag with an invalid name when given one argument" do + knife.name_args = ["invalid&char"] + expect(Chef::DataBag).to receive(:validate_name!).with(knife.name_args[0]).and_raise(Chef::Exceptions::InvalidDataBagName) + expect { knife.run }.to exit_with_code(1) end - end - context "a secret is specified for encryption" do - let(:encoded_data) { Chef::EncryptedDataBagItem.encrypt_data_bag_item(raw_hash, secret) } + context "when given one argument" do + before do + knife.name_args = [bag_name] + end + + it "creates a data bag" do + expect(rest).to receive(:post).with("data", { "name" => bag_name }) + expect(knife.ui).to receive(:info).with("Created data_bag[#{bag_name}]") - let(:item) do - item = Chef::DataBagItem.from_hash(encoded_data) - item.data_bag(bag_name) - item + knife.run + end end - it "creates an encrypted data bag item" do - expect(knife).to receive(:create_object).and_yield(raw_hash) - expect(knife).to receive(:encryption_secret_provided?).and_return(true) - expect(knife).to receive(:read_secret).and_return(secret) - expect(Chef::EncryptedDataBagItem) - .to receive(:encrypt_data_bag_item) - .with(raw_hash, secret) - .and_return(encoded_data) - expect(rest).to receive(:post).with("data", { "name" => bag_name }).ordered - expect(rest).to receive(:post).with("data/#{bag_name}", item).ordered + context "no secret is specified for encryption" do + let(:item) do + item = Chef::DataBagItem.from_hash(raw_hash) + item.data_bag(bag_name) + item + end + + it "creates a data bag item" do + expect(knife).to receive(:create_object).and_yield(raw_hash) + expect(knife).to receive(:encryption_secret_provided?).and_return(false) + expect(rest).to receive(:post).with("data", { "name" => bag_name }).ordered + expect(rest).to receive(:post).with("data/#{bag_name}", item).ordered + + knife.run + end + end - knife.run + context "a secret is specified for encryption" do + let(:encoded_data) { Chef::EncryptedDataBagItem.encrypt_data_bag_item(raw_hash, secret) } + + let(:item) do + item = Chef::DataBagItem.from_hash(encoded_data) + item.data_bag(bag_name) + item + end + + it "creates an encrypted data bag item" do + expect(knife).to receive(:create_object).and_yield(raw_hash) + expect(knife).to receive(:encryption_secret_provided?).and_return(true) + expect(knife).to receive(:read_secret).and_return(secret) + expect(Chef::EncryptedDataBagItem) + .to receive(:encrypt_data_bag_item) + .with(raw_hash, secret) + .and_return(encoded_data) + expect(rest).to receive(:post).with("data", { "name" => bag_name }).ordered + expect(rest).to receive(:post).with("data/#{bag_name}", item).ordered + + knife.run + end end end - end |