diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-05-04 12:30:30 -0700 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-05-15 07:04:18 -0700 |
commit | fdcfa8df0a27e7e552e81e15645349696e0485c0 (patch) | |
tree | c9b75b4b445ae4221534f6a7323d758984941bf9 | |
parent | 311f33e75b85d8f8303bca966f9601a2588571b8 (diff) | |
download | chef-fdcfa8df0a27e7e552e81e15645349696e0485c0.tar.gz |
Added specs to for windows_package provider's uri feature
-rw-r--r-- | spec/unit/provider/package/windows_spec.rb | 114 |
1 files changed, 90 insertions, 24 deletions
diff --git a/spec/unit/provider/package/windows_spec.rb b/spec/unit/provider/package/windows_spec.rb index d1a5a98140..b42f112037 100644 --- a/spec/unit/provider/package/windows_spec.rb +++ b/spec/unit/provider/package/windows_spec.rb @@ -19,50 +19,116 @@ require 'spec_helper' describe Chef::Provider::Package::Windows, :windows_only do + before(:each) do + allow(Chef::Util::PathHelper).to receive(:windows?).and_return(true) + allow(Chef::FileCache).to receive(:create_cache_path).with("package/").and_return(cache_path) + end + let(:node) { double('Chef::Node') } let(:events) { double('Chef::Events').as_null_object } # mock all the methods let(:run_context) { double('Chef::RunContext', :node => node, :events => events) } - let(:new_resource) { Chef::Resource::WindowsPackage.new("calculator.msi") } + let(:resource_source) { 'calculator.msi' } + let(:new_resource) { Chef::Resource::WindowsPackage.new(resource_source) } let(:provider) { Chef::Provider::Package::Windows.new(new_resource, run_context) } + let(:cache_path) { 'c:\\cache\\' } describe "load_current_resource" do - before(:each) do - allow(Chef::Util::PathHelper).to receive(:validate_path) - allow(provider).to receive(:package_provider).and_return(double('package_provider', + shared_examples "a local file" do + before(:each) do + allow(Chef::Util::PathHelper).to receive(:validate_path) + allow(provider).to receive(:package_provider).and_return(double('package_provider', :installed_version => "1.0", :package_version => "2.0")) - end + end + + it "creates a current resource with the name of the new resource" do + provider.load_current_resource + expect(provider.current_resource).to be_a(Chef::Resource::WindowsPackage) + expect(provider.current_resource.name).to eql(resource_source) + end - it "creates a current resource with the name of the new resource" do - provider.load_current_resource - expect(provider.current_resource).to be_a(Chef::Resource::WindowsPackage) - expect(provider.current_resource.name).to eql("calculator.msi") + it "sets the current version if the package is installed" do + provider.load_current_resource + expect(provider.current_resource.version).to eql("1.0") + end + + it "sets the version to be installed" do + provider.load_current_resource + expect(provider.new_resource.version).to eql("2.0") + end end - it "sets the current version if the package is installed" do - provider.load_current_resource - expect(provider.current_resource.version).to eql("1.0") + context "when the source is a uri" do + let(:resource_source) { 'https://foo.bar/calculator.msi' } + + context "when the source has not been downloaded" do + before(:each) do + allow(provider).to receive(:should_download?).and_return(true) + end + it "sets the current version to unknown" do + provider.load_current_resource + expect(provider.current_resource.version).to eql("unknown") + end + end + + context "when the source has been downloaded" do + before(:each) do + allow(provider).to receive(:should_download?).and_return(false) + end + it_behaves_like "a local file" + end end - it "sets the version to be installed" do - provider.load_current_resource - expect(provider.new_resource.version).to eql("2.0") + context "when source is a local file" do + it_behaves_like "a local file" end end describe "package_provider" do - it "checks that the source path is valid" do - expect(Chef::Util::PathHelper).to receive(:validate_path) - provider.package_provider + shared_examples "a local file" do + it "checks that the source path is valid" do + expect(Chef::Util::PathHelper).to receive(:validate_path) + provider.package_provider + end + + it "sets the package provider to MSI if the the installer type is :msi" do + allow(provider).to receive(:installer_type).and_return(:msi) + expect(provider.package_provider).to be_a(Chef::Provider::Package::Windows::MSI) + end + + it "raises an error if the installer_type is unknown" do + allow(provider).to receive(:installer_type).and_return(:apt_for_windows) + expect { provider.package_provider }.to raise_error + end end - it "sets the package provider to MSI if the the installer type is :msi" do - allow(provider).to receive(:installer_type).and_return(:msi) - expect(provider.package_provider).to be_a(Chef::Provider::Package::Windows::MSI) + context "when the source is a uri" do + let(:resource_source) { 'https://foo.bar/calculator.msi' } + + context "when the source has not been downloaded" do + before(:each) do + allow(provider).to receive(:should_download?).and_return(true) + end + + it "should create a package provider with source pointing at the local file" do + expect(Chef::Provider::Package::Windows::MSI).to receive(:new) do |r| + expect(r.source).to eq("#{cache_path}#{::File.basename(resource_source)}") + end + provider.package_provider + end + + it_behaves_like "a local file" + end + + context "when the source has been downloaded" do + before(:each) do + allow(provider).to receive(:should_download?).and_return(false) + end + it_behaves_like "a local file" + end end - it "raises an error if the installer_type is unknown" do - allow(provider).to receive(:installer_type).and_return(:apt_for_windows) - expect { provider.package_provider }.to raise_error + context "when source is a local file" do + it_behaves_like "a local file" end end |