summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Mundrawala <jdmundrawala@gmail.com>2015-05-04 12:30:30 -0700
committerJay Mundrawala <jdmundrawala@gmail.com>2015-05-15 07:04:18 -0700
commitfdcfa8df0a27e7e552e81e15645349696e0485c0 (patch)
treec9b75b4b445ae4221534f6a7323d758984941bf9
parent311f33e75b85d8f8303bca966f9601a2588571b8 (diff)
downloadchef-fdcfa8df0a27e7e552e81e15645349696e0485c0.tar.gz
Added specs to for windows_package provider's uri feature
-rw-r--r--spec/unit/provider/package/windows_spec.rb114
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