spec/unit/berkshelf/source_spec.rb in berkshelf-6.0.1 vs spec/unit/berkshelf/source_spec.rb in berkshelf-6.1.0

- old
+ new

@@ -1,106 +1,112 @@ require "spec_helper" module Berkshelf describe Source do + let(:berksfile) { double("Berksfile", filepath: "/test/Berksfile") } let(:arguments) { [] } let(:config) { Config.new } - subject(:instance) { described_class.new(*arguments) } + subject(:instance) { described_class.new(berksfile, *arguments) } before do allow(Berkshelf::Config).to receive(:instance).and_return(config) end describe "#type" do subject { instance.type } context "with a string argument" do - let(:arguments) { ['https://example.com'] } + let(:arguments) { ["https://example.com"] } it { is_expected.to eq :supermarket } end context "with a string argument and options" do - let(:arguments) { ['https://example.com', {key: 'value'}] } + let(:arguments) { ["https://example.com", { key: "value" }] } it { is_expected.to eq :supermarket } end context "with a symbol argument" do let(:arguments) { [:chef_server] } it { is_expected.to eq :chef_server } end context "with a symbol argument and options" do - let(:arguments) { [:chef_server, {key: 'value'}] } + let(:arguments) { [:chef_server, { key: "value" }] } it { is_expected.to eq :chef_server } end context "with a hash argument" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}] } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }] } it { is_expected.to eq :artifactory } end context "with a hash argument and connected options" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual', key: 'value'}] } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual", key: "value" }] } it { is_expected.to eq :artifactory } end context "with a hash argument and disconnected options" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}, {key: 'value'}] } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }, { key: "value" }] } it { is_expected.to eq :artifactory } end end describe "#uri" do subject { instance.uri.to_s } context "with a string argument" do - let(:arguments) { ['https://example.com'] } - it { is_expected.to eq 'https://example.com' } + let(:arguments) { ["https://example.com"] } + it { is_expected.to eq "https://example.com" } end context "with a string argument and options" do - let(:arguments) { ['https://example.com', {key: 'value'}] } - it { is_expected.to eq 'https://example.com' } + let(:arguments) { ["https://example.com", { key: "value" }] } + it { is_expected.to eq "https://example.com" } end context "with a symbol argument" do let(:arguments) { [:chef_server] } - before { config.chef.chef_server_url = 'https://chefserver/' } - it { is_expected.to eq 'https://chefserver/' } + before { config.chef.chef_server_url = "https://chefserver/" } + it { is_expected.to eq "https://chefserver/" } end context "with a symbol argument and options" do - let(:arguments) { [:chef_server, {key: 'value'}] } - before { config.chef.chef_server_url = 'https://chefserver/' } - it { is_expected.to eq 'https://chefserver/' } + let(:arguments) { [:chef_server, { key: "value" }] } + before { config.chef.chef_server_url = "https://chefserver/" } + it { is_expected.to eq "https://chefserver/" } end context "with a hash argument" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}] } - it { is_expected.to eq 'https://example.com/api/chef/chef-virtual' } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }] } + it { is_expected.to eq "https://example.com/api/chef/chef-virtual" } end context "with a hash argument and connected options" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual', key: 'value'}] } - it { is_expected.to eq 'https://example.com/api/chef/chef-virtual' } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual", key: "value" }] } + it { is_expected.to eq "https://example.com/api/chef/chef-virtual" } end context "with a hash argument and disconnected options" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}, {key: 'value'}] } - it { is_expected.to eq 'https://example.com/api/chef/chef-virtual' } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }, { key: "value" }] } + it { is_expected.to eq "https://example.com/api/chef/chef-virtual" } end context "with an invalid URI" do - let(:arguments) { ['ftp://example.com'] } + let(:arguments) { ["ftp://example.com"] } it { expect { subject }.to raise_error InvalidSourceURI } end + + context "with a chef_repo source" do + let(:arguments) { [{ chef_repo: "." }] } + it { is_expected.to eq(windows? ? "file://C/test" : "file:///test") } + end end describe "#options" do subject { instance.options } context "with a string argument" do - let(:arguments) { ['https://example.com'] } + let(:arguments) { ["https://example.com"] } it { is_expected.to be_a(Hash) } # Check all baseline values. its([:timeout]) { is_expected.to eq 30 } its([:open_timeout]) { is_expected.to eq 3 } @@ -111,75 +117,80 @@ its([:ssl, :client_key]) { is_expected.to be_nil } its([:ssl, :cert_store]) { is_expected.to be_a(OpenSSL::X509::Store) } end context "with a string argument and options" do - let(:arguments) { ['https://example.com', {key: 'value'}] } - its([:key]) { is_expected.to eq 'value' } + let(:arguments) { ["https://example.com", { key: "value" }] } + its([:key]) { is_expected.to eq "value" } end context "with a symbol argument" do let(:arguments) { [:chef_server] } it { is_expected.to be_a(Hash) } end context "with a symbol argument and options" do - let(:arguments) { [:chef_server, {key: 'value'}] } - its([:key]) { is_expected.to eq 'value' } + let(:arguments) { [:chef_server, { key: "value" }] } + its([:key]) { is_expected.to eq "value" } end context "with a hash argument" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}] } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }] } it { is_expected.to be_a(Hash) } end context "with a hash argument and connected options" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual', key: 'value'}] } - its([:key]) { is_expected.to eq 'value' } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual", key: "value" }] } + its([:key]) { is_expected.to eq "value" } end context "with a hash argument and disconnected options" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}, {key: 'value'}] } - its([:key]) { is_expected.to eq 'value' } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }, { key: "value" }] } + its([:key]) { is_expected.to eq "value" } end context "with an artifactory source and the API key in the Chef config" do - let(:arguments) { [{artifactory: 'https://example.com/api/chef/chef-virtual'}] } - before { config.chef.artifactory_api_key = 'secret' } - its([:api_key]) { is_expected.to eq 'secret' } + let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }] } + before { config.chef.artifactory_api_key = "secret" } + its([:api_key]) { is_expected.to eq "secret" } end + + context "with a chef_repo source" do + let(:arguments) { [{ chef_repo: "." }] } + its([:path]) { is_expected.to eq(windows? ? "C:/test" : "/test") } + end end describe "#==" do it "is the same if the uri matches" do - first = described_class.new("http://localhost:8080") - other = described_class.new("http://localhost:8080") + first = described_class.new(berksfile, "http://localhost:8080") + other = described_class.new(berksfile, "http://localhost:8080") expect(first).to eq(other) end it "is not the same if the uri is different" do - first = described_class.new("http://localhost:8089") - other = described_class.new("http://localhost:8080") + first = described_class.new(berksfile, "http://localhost:8089") + other = described_class.new(berksfile, "http://localhost:8080") expect(first).to_not eq(other) end end describe ".default?" do it "returns true when the source is the default" do - instance = described_class.new(Berksfile::DEFAULT_API_URL) + instance = described_class.new(berksfile, Berksfile::DEFAULT_API_URL) expect(instance).to be_default end it "returns true when the scheme is different" do - instance = described_class.new("http://supermarket.chef.io") + instance = described_class.new(berksfile, "http://supermarket.chef.io") expect(instance).to be_default end it "returns false when the source is not the default" do - instance = described_class.new("http://localhost:8080") + instance = described_class.new(berksfile, "http://localhost:8080") expect(instance).to_not be_default end end describe "#search" do @@ -192,10 +203,10 @@ before do allow_any_instance_of(APIClient::Connection).to receive(:universe).and_return(cookbooks) end it "returns the latest version" do - instance = described_class.new(Berksfile::DEFAULT_API_URL) + instance = described_class.new(berksfile, Berksfile::DEFAULT_API_URL) expect(instance.search("cb1")).to eq [cookbooks[1]] end end end end