spec/unit/berkshelf/location_spec.rb in berkshelf-3.0.0.beta7 vs spec/unit/berkshelf/location_spec.rb in berkshelf-3.0.0.beta8

- old
+ new

@@ -1,157 +1,29 @@ require 'spec_helper' -describe Berkshelf::Location do - describe "ClassMethods" do - describe "::init" do - let(:dependency) { double('dependency') } +module Berkshelf + describe Location do + let(:dependency) { double(name: 'bacon') } - it 'returns an instance of PathLocation given a path: option key' do - result = described_class.init(dependency, path: '/Users/reset/code') - expect(result).to be_a(Berkshelf::PathLocation) + describe '.init' do + it 'finds a :path location by key' do + instance = described_class.init(dependency, path: '~/Dev/meats/bacon') + expect(instance).to be_a(PathLocation) end - it 'returns an instance of GitLocation given a git: option key' do - result = described_class.init(dependency, git: 'git://github.com/something.git') - expect(result).to be_a(Berkshelf::GitLocation) + it 'finds a :git location by key' do + instance = described_class.init(dependency, git: 'git://foo.com/meats/bacon.git') + expect(instance).to be_a(GitLocation) end - context 'given two location_keys' do - it 'raises an InternalError' do - expect { - described_class.init(dependency, git: :value, path: :value) - }.to raise_error(Berkshelf::InternalError) - end + it 'finds a :github location by key' do + instance = described_class.init(dependency, github: 'meats/bacon') + expect(instance).to be_a(GitLocation) end - end - end -end -describe Berkshelf::Location::Base do - describe "ClassMethods" do - subject { Class.new(described_class) } - - describe "::set_location_key" do - before do - @original = Berkshelf::Dependency.class_variable_get :@@location_keys - Berkshelf::Dependency.class_variable_set :@@location_keys, {} - end - - after do - Berkshelf::Dependency.class_variable_set :@@location_keys, @original - end - - it 'adds the given location key Berkshelf::Dependency.location_keys' do - subject.set_location_key(:reset) - - expect(Berkshelf::Dependency.location_keys).to have(1).item - expect(Berkshelf::Dependency.location_keys).to include(:reset) - expect(Berkshelf::Dependency.location_keys[:reset]).to eq(subject) - end - end - - describe "::location_key" do - before do - @original = Berkshelf::Dependency.class_variable_get :@@location_keys - Berkshelf::Dependency.class_variable_set :@@location_keys, {} - end - - after do - Berkshelf::Dependency.class_variable_set :@@location_keys, @original - end - - it "returns the class' registered location key" do - subject.set_location_key(:reset) - expect(subject.location_key).to eq(:reset) - end - end - - describe "::set_valid_options" do - before do - @original = Berkshelf::Dependency.class_variable_get :@@valid_options - Berkshelf::Dependency.class_variable_set :@@valid_options, [] - end - - after do - Berkshelf::Dependency.class_variable_set :@@valid_options, @original - end - - it 'adds the given symbol to the list of valid options on Berkshelf::Dependency' do - subject.set_valid_options(:mundo) - - expect(Berkshelf::Dependency.valid_options).to have(1).item - expect(Berkshelf::Dependency.valid_options).to include(:mundo) - end - - it 'adds parameters to the list of valid options on the Berkshelf::Dependency' do - subject.set_valid_options(:riot, :arenanet) - - expect(Berkshelf::Dependency.valid_options).to have(2).items - expect(Berkshelf::Dependency.valid_options).to include(:riot) - expect(Berkshelf::Dependency.valid_options).to include(:arenanet) - end - end - end - - let(:name) { "nginx" } - let(:constraint) { double('constraint') } - let(:dependency) { double('dependency', name: name, version_constraint: constraint) } - subject { Class.new(Berkshelf::Location::Base).new(dependency) } - - describe "#download" do - context "when #do_download is not defined" do - it "raises a AbstractFunction" do - expect { subject.download }.to raise_error(Berkshelf::AbstractFunction) - end - end - - context "when #do_download is defined" do - let(:cached) { double('cached') } - before { subject.stub(do_download: cached) } - - it "validates the returned cached cookbook" do - subject.should_receive(:validate_cached).with(cached).and_return(true) - subject.download - end - - it "returns the cached cookbook if valid" do - subject.stub(validate_cached: true) - - expect(subject.download).to eq(cached) - end - end - end - - describe '#validate_cached' do - let(:cached) { double('cached-cb', cookbook_name: name, version: '0.1.0') } - - it 'raises a CookbookValidationFailure error if the version constraint does not satisfy the cached version' do - constraint.should_receive(:satisfies?).with(cached.version).and_return(false) - - expect { - subject.validate_cached(cached) - }.to raise_error(Berkshelf::CookbookValidationFailure) - end - - it 'returns true if cached_cookbooks satisfies the version constraint' do - constraint.should_receive(:satisfies?).with(cached.version).and_return(true) - expect(subject.validate_cached(cached)).to be_true - end - - context "when the cached_cookbooks satisfies the version constraint" do - it "returns true if the name of the cached_cookbook matches the name of the location" do - constraint.should_receive(:satisfies?).with(cached.version).and_return(true) - cached.stub(:name) { name } - expect(subject.validate_cached(cached)).to be_true - end - - it "warns about the MismatchedCookbookName if the cached_cookbook's name does not match the location's" do - constraint.should_receive(:satisfies?).with(cached.version).and_return(true) - cached.stub(:cookbook_name) { "artifact" } - msg = Berkshelf::MismatchedCookbookName.new(dependency, cached).to_s - - Berkshelf.ui.should_receive(:warn).with(msg) - subject.validate_cached(cached) + it 'returns nil when a location cannot be found' do + instance = described_class.init(dependency, lamesauce: 'meats/bacon') + expect(instance).to be_nil end end end end