diff options
Diffstat (limited to 'spec/unit/compliance/fetcher/chef_server_spec.rb')
-rw-r--r-- | spec/unit/compliance/fetcher/chef_server_spec.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/spec/unit/compliance/fetcher/chef_server_spec.rb b/spec/unit/compliance/fetcher/chef_server_spec.rb new file mode 100644 index 0000000000..fc1c229989 --- /dev/null +++ b/spec/unit/compliance/fetcher/chef_server_spec.rb @@ -0,0 +1,93 @@ +require "spec_helper" +require "chef/compliance/fetcher/chef_server" + +describe Chef::Compliance::Fetcher::ChefServer do + let(:node) do + Chef::Node.new.tap do |n| + n.default["audit"] = {} + end + end + + before :each do + allow(Chef).to receive(:node).and_return(node) + + Chef::Config[:chef_server_url] = "http://127.0.0.1:8889/organizations/my_org" + end + + describe ".resolve" do + context "when target is a string" do + it "should resolve a compliance URL" do + res = Chef::Compliance::Fetcher::ChefServer.resolve("compliance://namespace/profile_name") + + expect(res).to be_kind_of(Chef::Compliance::Fetcher::ChefServer) + expected = "http://127.0.0.1:8889/organizations/my_org/owners/namespace/compliance/profile_name/tar" + expect(res.target).to eq(expected) + end + + it "should add /compliance URL prefix if needed" do + node.default["audit"]["fetcher"] = "chef-server" + res = Chef::Compliance::Fetcher::ChefServer.resolve("compliance://namespace/profile_name") + + expect(res).to be_kind_of(Chef::Compliance::Fetcher::ChefServer) + expected = "http://127.0.0.1:8889/compliance/organizations/my_org/owners/namespace/compliance/profile_name/tar" + expect(res.target).to eq(expected) + end + + it "includes user in the URL if present" do + res = Chef::Compliance::Fetcher::ChefServer.resolve("compliance://username@namespace/profile_name") + + expect(res).to be_kind_of(Chef::Compliance::Fetcher::ChefServer) + expected = "http://127.0.0.1:8889/organizations/my_org/owners/username@namespace/compliance/profile_name/tar" + expect(res.target).to eq(expected) + end + + it "returns nil with a non-compliance URL" do + res = Chef::Compliance::Fetcher::ChefServer.resolve("http://github.com/chef-cookbooks/audit") + + expect(res).to eq(nil) + end + end + + context "when target is a hash" do + it "should resolve a target with a version" do + res = Chef::Compliance::Fetcher::ChefServer.resolve( + compliance: "namespace/profile_name", + version: "1.2.3" + ) + + expect(res).to be_kind_of(Chef::Compliance::Fetcher::ChefServer) + expected = "http://127.0.0.1:8889/organizations/my_org/owners/namespace/compliance/profile_name/version/1.2.3/tar" + expect(res.target).to eq(expected) + end + + it "should resolve a target without a version" do + res = Chef::Compliance::Fetcher::ChefServer.resolve( + compliance: "namespace/profile_name" + ) + + expect(res).to be_kind_of(Chef::Compliance::Fetcher::ChefServer) + expected = "http://127.0.0.1:8889/organizations/my_org/owners/namespace/compliance/profile_name/tar" + expect(res.target).to eq(expected) + end + + it "includes user in the URL if present" do + res = Chef::Compliance::Fetcher::ChefServer.resolve( + compliance: "username@namespace/profile_name" + ) + + expect(res).to be_kind_of(Chef::Compliance::Fetcher::ChefServer) + expected = "http://127.0.0.1:8889/organizations/my_org/owners/username@namespace/compliance/profile_name/tar" + expect(res.target).to eq(expected) + end + + it "returns nil with a non-profile Hash" do + res = Chef::Compliance::Fetcher::ChefServer.resolve( + profile: "namespace/profile_name", + version: "1.2.3" + ) + + expect(res).to eq(nil) + end + end + end +end |