summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalim Afiune <afiune@chef.io>2017-03-03 15:31:42 -0500
committerTom Duffield <tom@chef.io>2017-03-07 10:42:07 -0600
commitbdb97d59fee1d79510346c1c4e0430f71abbe2a8 (patch)
treeb806e4ac8ce1db9b21f1f1e1a51e0ee91bdc2f42
parent42445a55fe97a4c8c1b5b88b91b38e3f15babc61 (diff)
downloadchef-bdb97d59fee1d79510346c1c4e0430f71abbe2a8.tar.gz
Add test to assert we use GET Request
Signed-off-by: Salim Afiune <afiune@chef.io>
-rw-r--r--spec/unit/knife/data_bag_create_spec.rb110
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