diff --git a/test/unit/plugins/provisioners/chef/command_builder_test.rb b/test/unit/plugins/provisioners/chef/command_builder_test.rb index 3fb53693b..655c9041f 100644 --- a/test/unit/plugins/provisioners/chef/command_builder_test.rb +++ b/test/unit/plugins/provisioners/chef/command_builder_test.rb @@ -8,97 +8,110 @@ describe VagrantPlugins::Chef::CommandBuilder do let(:chef_config) { double("chef_config") } before(:each) do - allow(chef_config).to receive(:provisioning_path).and_return('/tmp/vagrant-chef-1') + allow(chef_config).to receive(:provisioning_path).and_return("/tmp/vagrant-chef-1") allow(chef_config).to receive(:arguments).and_return(nil) allow(chef_config).to receive(:binary_env).and_return(nil) allow(chef_config).to receive(:binary_path).and_return(nil) allow(chef_config).to receive(:binary_env).and_return(nil) + allow(chef_config).to receive(:log_level).and_return(:info) end - describe '.initialize' do - it 'should raise when chef type is not client or solo' do + describe ".initialize" do + it "raises an error when chef type is not client or solo" do expect { VagrantPlugins::Chef::CommandBuilder.new(chef_config, :client_bad) }. to raise_error end + + it "does not raise an error for :client" do + expect { + VagrantPlugins::Chef::CommandBuilder.new(:client, chef_config) + }.to_not raise_error + end + + it "does not raise an error for :solo" do + expect { + VagrantPlugins::Chef::CommandBuilder.new(:solo, chef_config) + }.to_not raise_error + end end - describe 'build_command' do - describe 'windows' do + describe "#command" do + describe "windows" do subject do - VagrantPlugins::Chef::CommandBuilder.new(chef_config, :client, true) + VagrantPlugins::Chef::CommandBuilder.new(:client, chef_config, windows: true) end it "executes the chef-client in PATH by default" do - expect(subject.build_command()).to match(/^chef-client/) + expect(subject.command).to match(/^chef-client/) end it "executes the chef-client using full path if binary_path is specified" do allow(chef_config).to receive(:binary_path).and_return( "c:\\opscode\\chef\\bin\\chef-client") - expect(subject.build_command()).to match(/^c:\\opscode\\chef\\bin\\chef-client\\chef-client/) + expect(subject.command).to match(/^c:\\opscode\\chef\\bin\\chef-client\\chef-client/) end it "builds a guest friendly client.rb path" do - expect(subject.build_command()).to include( - '-c c:\\tmp\\vagrant-chef-1\\client.rb') + expect(subject.command).to include( + '--config c:\\tmp\\vagrant-chef-1\\client.rb') end it "builds a guest friendly solo.json path" do - expect(subject.build_command()).to include( - '-j c:\\tmp\\vagrant-chef-1\\dna.json') + expect(subject.command).to include( + '--json-attributes c:\\tmp\\vagrant-chef-1\\dna.json') end - it 'includes Chef arguments if specified' do - allow(chef_config).to receive(:arguments).and_return("-l DEBUG") - expect(subject.build_command()).to include( - '-l DEBUG') + it "includes Chef arguments if specified" do + allow(chef_config).to receive(:arguments).and_return("bacon pants") + expect(subject.command).to include( + " bacon pants") end - it 'includes --no-color if UI is not colored' do - expect(subject.build_command()).to include( - ' --no-color') + it "includes --no-color if UI is not colored" do + expect(subject.command).to include( + " --no-color") end end - describe 'linux' do + describe "linux" do subject do - VagrantPlugins::Chef::CommandBuilder.new(chef_config, :client, false) + VagrantPlugins::Chef::CommandBuilder.new(:client, chef_config, windows: false) end it "executes the chef-client in PATH by default" do - expect(subject.build_command()).to match(/^chef-client/) + expect(subject.command).to match(/^chef-client/) end it "executes the chef-client using full path if binary_path is specified" do allow(chef_config).to receive(:binary_path).and_return( "/opt/chef/chef-client") - expect(subject.build_command()).to match(/^\/opt\/chef\/chef-client/) + expect(subject.command).to match(/^\/opt\/chef\/chef-client/) end it "builds a guest friendly client.rb path" do - expect(subject.build_command()).to include( - '-c /tmp/vagrant-chef-1/client.rb') + expect(subject.command).to include( + "--config /tmp/vagrant-chef-1/client.rb") end it "builds a guest friendly solo.json path" do - expect(subject.build_command()).to include( - '-j /tmp/vagrant-chef-1/dna.json') + expect(subject.command).to include( + "--json-attributes /tmp/vagrant-chef-1/dna.json") end - it 'includes Chef arguments if specified' do - allow(chef_config).to receive(:arguments).and_return("-l DEBUG") - expect(subject.build_command()).to include( - '-l DEBUG') + it "includes Chef arguments if specified" do + allow(chef_config).to receive(:arguments).and_return("bacon") + expect(subject.command).to include( + " bacon") end - it 'includes --no-color if UI is not colored' do - expect(subject.build_command()).to include( - ' --no-color') + it "includes --no-color if UI is not colored" do + expect(subject.command).to include( + " --no-color") end - it 'includes environment variables if specified' do + it "includes environment variables if specified" do allow(chef_config).to receive(:binary_env).and_return("ENVVAR=VAL") - expect(subject.build_command()).to match(/^ENVVAR=VAL /) + expect(subject.command).to match(/^ENVVAR=VAL /) end end end