spec/unit/berkshelf/downloader_spec.rb in berkshelf-2.0.18 vs spec/unit/berkshelf/downloader_spec.rb in berkshelf-3.0.0.beta1
- old
+ new
@@ -1,190 +1,11 @@
require 'spec_helper'
describe Berkshelf::Downloader do
- let(:locations) do
- [
- {
- type: :chef_api,
- value: double('capi'),
- options: double('capi_opts')
- },
- {
- type: :chef_api,
- value: double('capi2'),
- options: double('capi_opts2')
- }
- ]
+ describe "#download" do
+ pending
end
- describe '.initialize' do
- context 'when no value for locations is given' do
- it 'sets the @locations instance variable to a blank array' do
- downloader = Berkshelf::Downloader.new(double('store'))
- locations = downloader.instance_variable_get(:@locations)
-
- expect(locations).to be_a(Array)
- expect(locations).to be_empty
- end
- end
-
- context 'when an explicit value of locations is given' do
- it 'sets the @locations instance variable to the given locations' do
- downloader = Berkshelf::Downloader.new(double('store'), locations: locations)
- expect(downloader.instance_variable_get(:@locations)).to eq(locations)
- end
- end
- end
-
-
-
- let!(:cookbook_store) { Berkshelf::CookbookStore.new(tmp_path) }
- subject { Berkshelf::Downloader.new(cookbook_store) }
-
- describe '#download' do
- let(:source) { double('source', name: 'artifact', version_constraint: '= 0.10.0', locked_version: '0.10.0') }
- let(:location) { double('location') }
- let(:cached_cookbook) { double('cached') }
-
- context 'when the source has a location' do
- before do
- source.stub(:location).and_return(location)
- location.should_receive(:download).with(subject.storage_path).and_return(cached_cookbook)
- source.should_receive(:cached_cookbook=).with(cached_cookbook)
- end
-
- it "sends :download to the source's location and sets the source's cached_cookbook to the result" do
- expect(subject.download(source)).to be_true
- end
-
- it 'returns an Array containing the cached_cookbook and location used to download' do
- result = subject.download(source)
-
- expect(result).to be_a(Array)
- expect(result[0]).to eq(cached_cookbook)
- expect(result[1]).to eq(location)
- end
- end
-
- context 'when the source does not have a location' do
- before do
- source.stub(:location).and_return(nil)
- subject.stub(:locations).and_return([{ type: :chef_api, value: :config, options: {} }])
- end
-
- it 'sends the :download message to the default location' do
- Berkshelf::Location.should_receive(:init).with(source.name, source.version_constraint, chef_api: :config).and_return(location)
- location.should_receive(:download).with(subject.storage_path).and_return(cached_cookbook)
- source.should_receive(:cached_cookbook=).with(cached_cookbook)
-
- subject.download(source)
- end
- end
- end
-
- describe '#locations' do
- let(:type) { :site }
- let(:value) { double('value') }
- let(:options) { double('options') }
-
- it 'returns an array of Hashes representing locations' do
- subject.add_location(type, value, options)
-
- subject.locations.each do |location|
- expect(location).to be_a(Hash)
- end
- end
-
- context 'when no locations are explicitly added' do
- subject { Berkshelf::Downloader.new(double('store')) }
-
- it 'returns an array of default locations' do
- expect(subject.locations).to eq(Berkshelf::Downloader::DEFAULT_LOCATIONS)
- end
- end
-
- context 'when locations are explicitly added' do
- subject { Berkshelf::Downloader.new(double('store'), locations: locations) }
-
- it 'contains only the locations passed to the initializer' do
- expect(subject.locations).to eq(locations)
- end
-
- it 'does not include the array of default locations' do
- expect(subject.locations).to_not include(Berkshelf::Downloader::DEFAULT_LOCATIONS)
- end
- end
- end
-
- describe '#add_location' do
- let(:type) { :site }
- let(:value) { double('value') }
- let(:options) { double('options') }
-
- it 'adds a hash to the end of the array of locations' do
- subject.add_location(type, value, options)
- expect(subject.locations).to have(1).item
- end
-
- it 'adds a hash with a type, value, and options key' do
- subject.add_location(type, value, options)
- location = subject.locations.last
-
- [:type, :value, :options].each do |key|
- expect(location).to have_key(key)
- end
- end
-
- it 'sets the value of the given :value to the value of the key :value' do
- subject.add_location(type, value, options)
- expect(subject.locations.last[:value]).to eq(value)
- end
-
- it 'sets the value of the given :type to the value of the key :type' do
- subject.add_location(type, value, options)
- expect(subject.locations.last[:type]).to eq(type)
- end
-
- it 'sets the value of the given :options to the value of the key :options' do
- subject.add_location(type, value, options)
- expect(subject.locations.last[:options]).to eq(options)
- end
-
- it 'raises a DuplicateLocationDefined error if a location of the given type and value was already added' do
- subject.add_location(type, value, options)
-
- expect {
- subject.add_location(type, value, options)
- }.to raise_error(Berkshelf::DuplicateLocationDefined)
- end
-
- context 'adding multiple locations' do
- let(:type_2) { :site }
- let(:value_2) { double('value_2') }
- let(:options_2) { double('options_2') }
-
- it 'adds locations in the order they are added' do
- subject.add_location(type, value, options)
- subject.add_location(type_2, value_2, options_2)
-
- expect(subject.locations).to have(2).items
-
- expect(subject.locations[0][:value]).to eql(value)
- expect(subject.locations[1][:value]).to eql(value_2)
- end
- end
- end
-
- describe '#has_location?' do
- let(:type) { :site }
- let(:value) { double('value') }
-
- it 'returns true if a source of the given type and value was already added' do
- subject.add_location(type, value)
- expect(subject.has_location?(type, value)).to be_true
- end
-
- it 'returns false if a source of the given type and value was not added' do
- expect(subject.has_location?(type, value)).to be_false
- end
+ describe "#try_download" do
+ pending
end
end