# # 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 "pry" require "spec_helper" require "chef-dk/command/generator_commands/base" describe ChefDK::Command::GeneratorCommands::Base do describe "parsing Chef configuration" do let(:cli_args) do [ "-C", "Business Man", "-I", "Serious Business", "-m", "business.man@corporation.com" ] end before do Chef::Config.reset end context "when generator configuration is defined" do before do Chef::Config.reset Chef::Config.chefdk.generator.copyright_holder = "This Guy" Chef::Config.chefdk.generator.email = "this.guy@twothumbs.net" Chef::Config.chefdk.generator.license = "Two Thumbs License" end it "uses the defined values" do cmd = ChefDK::Command::GeneratorCommands::Base.new([]) cmd.parse_options cmd.setup_context cfg = cmd.config expect(cfg[:copyright_holder]).to eq("This Guy") expect(cfg[:email]).to eq("this.guy@twothumbs.net") expect(cfg[:license]).to eq("Two Thumbs License") end context "when cli overrides are provided" do before do Chef::Config.reset Chef::Config.chefdk.generator.copyright_holder = "This Guy" Chef::Config.chefdk.generator.email = "this.guy@twothumbs.net" Chef::Config.chefdk.generator.license = "Two Thumbs License" end it "uses the cli args" do cmd = ChefDK::Command::GeneratorCommands::Base.new(cli_args) cmd.parse_options(cli_args) cmd.setup_context cfg = cmd.config expect(cfg[:copyright_holder]).to eq("Business Man") expect(cfg[:email]).to eq("business.man@corporation.com") expect(cfg[:license]).to eq("Serious Business") end end context "when knife configuration is also defined" do before do Chef::Config.reset Chef::Config.chefdk.generator.copyright_holder = "This Guy" Chef::Config.chefdk.generator.email = "this.guy@twothumbs.net" Chef::Config.chefdk.generator.license = "Two Thumbs License" Chef::Config.knife.cookbook_copyright = "Knife User" Chef::Config.knife.cookbook_email = "knife.user@example.com" Chef::Config.knife.cookbook_license = "GPLv9000" end it "uses the generator configuration" do cmd = ChefDK::Command::GeneratorCommands::Base.new([]) cmd.parse_options cmd.setup_context cfg = cmd.config expect(cfg[:copyright_holder]).to eq("This Guy") expect(cfg[:email]).to eq("this.guy@twothumbs.net") expect(cfg[:license]).to eq("Two Thumbs License") end end end context "when knife configuration is defined" do before do Chef::Config.reset Chef::Config.knife.cookbook_copyright = "Knife User" Chef::Config.knife.cookbook_email = "knife.user@example.com" Chef::Config.knife.cookbook_license = "GPLv9000" end it "uses the defined values" do cmd = ChefDK::Command::GeneratorCommands::Base.new([]) cmd.parse_options cmd.setup_context cfg = cmd.config expect(cfg[:copyright_holder]).to eq("Knife User") expect(cfg[:email]).to eq("knife.user@example.com") expect(cfg[:license]).to eq("GPLv9000") end context "when cli overrides are provided" do before do Chef::Config.reset Chef::Config.knife.cookbook_copyright = "Knife User" Chef::Config.knife.cookbook_email = "knife.user@example.com" Chef::Config.knife.cookbook_license = "GPLv9000" end it "uses the cli args" do cmd = ChefDK::Command::GeneratorCommands::Base.new(cli_args) cmd.parse_options(cli_args) cmd.setup_context cfg = cmd.config expect(cfg[:copyright_holder]).to eq("Business Man") expect(cfg[:email]).to eq("business.man@corporation.com") expect(cfg[:license]).to eq("Serious Business") end end end end describe '#have_git?' do let(:cmd) { described_class.new([]) } let(:path) { "bin_path" } before do allow(File).to receive(:exist?) allow(ENV).to receive(:[]).with("PATH").and_return(path) allow(ENV).to receive(:[]).with("PATHEXT").and_return(nil) allow(RbConfig::CONFIG).to receive(:[]).with("EXEEXT").and_return("") end describe "when git executable exists" do it "returns true" do allow(File).to receive(:exist?).and_return(true) expect(cmd.have_git?).to eq(true) end end describe "when git executable does not exist" do it "returns false" do allow(File).to receive(:exist?).and_return(false) expect(cmd.have_git?).to eq(false) end end it "checks PATH for git executable" do expect(File).to receive(:exist?).with(File.join(path, "git")) cmd.have_git? end describe "when on Windows" do before do allow(ENV).to receive(:[]).with("PATHEXT").and_return(".com;.exe;.bat") allow(RbConfig::CONFIG).to receive(:[]).with("EXEEXT").and_return(".exe") end it "checks PATH for git executable with an extension found in PATHEXT" do expect(File).to receive(:exist?).with(File.join(path, "git.com")) expect(File).to receive(:exist?).with(File.join(path, "git.exe")) expect(File).to receive(:exist?).with(File.join(path, "git.bat")) cmd.have_git? end end end end