# # Copyright:: Copyright (c) 2014 Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # require "spec_helper" require "chef-dk/helpers" describe ChefDK::Helpers do let (:helpers) do ChefDK::Helpers.send(:reset!) ChefDK::Helpers end let(:env) { {} } describe "chefdk_home" do before do allow(ENV).to receive(:[]) do |k| env[k] end allow(Chef::Platform).to receive(:windows?).and_return(false) end context "when CHEFDK_HOME is set" do let(:env) { { "CHEFDK_HOME" => "foo" } } it "returns CHEFDK_HOME" do expect(helpers.chefdk_home).to eq(env["CHEFDK_HOME"]) end end context "when CHEFDK_HOME is not set" do context "on windows" do before do allow(Chef::Platform).to receive(:windows?).and_return(true) end let(:env) { { "LOCALAPPDATA" => 'C:\\foo' } } it "uses LOCALAPPDATA" do expect(File).to receive(:join).with(env["LOCALAPPDATA"], "chefdk").and_return("chefdkdefaulthome") expect(helpers.chefdk_home).to eq("chefdkdefaulthome") end end context "on *nix" do it "uses LOCALAPPDATA" do expect(File).to receive(:expand_path).with("~/.chefdk").and_return("chefdkdefaulthome") expect(helpers.chefdk_home).to eq("chefdkdefaulthome") end end end context "using usr_bin_prefix" do before do stub_const("RUBY_PLATFORM", ruby_platform_string) end context "on Mac" do let(:ruby_platform_string) { "x86_64-darwin12.0" } it "uses /usr/local/bin" do expect(helpers.usr_bin_prefix).to eq("/usr/local/bin") expect(helpers.usr_bin_path("berks")).to eq("/usr/local/bin/berks") end end context "on other systems" do let(:ruby_platform_string) { "x86_64-linux" } it "uses /usr/bin" do expect(helpers.usr_bin_prefix).to eq("/usr/bin") expect(helpers.usr_bin_path("berks")).to eq("/usr/bin/berks") end end end end describe "omnibus_env" do let(:git_tools_path) { File.join("embedded", "git", "usr", "bin") } let(:custom_gitbin_path) { File.join("gitbin") } before do allow(helpers).to receive(:omnibus_expand_path) { |*paths| File.expand_path(File.join(paths)) } allow(Dir).to receive(:exists?).with(/#{custom_gitbin_path}/).and_return false allow(Dir).to receive(:exists?).with(/#{git_tools_path}/).and_return false end it "does not include the git tools in the path" do expect(helpers.omnibus_env["PATH"]).to_not match(/#{git_tools_path}/) end context "when the custom gitbin directory exists" do it "includes them in the path" do expect(Dir).to receive(:exists?).with(/#{custom_gitbin_path}/).and_return true expect(helpers.omnibus_env["PATH"]).to match(/#{custom_gitbin_path}$/) end end context "when the git tools directory exists" do it "includes them in the path" do expect(Dir).to receive(:exists?).with(/#{git_tools_path}/).and_return true expect(helpers.omnibus_env["PATH"]).to match(/#{git_tools_path}$/) end end end end