require 'spec_helper' require 'cookbook-omnifetch/path' module CookbookOmnifetch describe PathLocation do let(:relative_paths_root) { File.dirname(__FILE__) } let(:constraint) { double('constraint', satisfies?: true) } let(:dependency) do double('dependency', name: 'nginx', version_constraint: constraint, relative_paths_root: relative_paths_root ) end let(:path) { fixtures_path.join('cookbooks', 'example_cookbook') } let(:relative_path) { Pathname.new('../fixtures/cookbooks/example_cookbook') } subject { described_class.new(dependency, path: path) } describe '#installed?' do it 'returns false' do expect(subject.installed?).to be false end end describe '#install' do it 'validates the cached cookbook' do expect(subject).to receive(:validate_cached!).with(path) subject.install end end describe '#cached_cookbook' do it 'loads the cached cookbook at the path' do expect(MockCachedCookbook).to receive(:from_path).with(path) subject.cached_cookbook end end describe '#relative_path' do it 'returns the path to the Berksfile' do expect(subject.relative_path).to eq(relative_path) end end describe '#expanded_path' do it 'returns the expanded path, relative to the Berksfile' do absolute_path = Pathname.new(File.expand_path(relative_path, relative_paths_root)) expect(subject.expanded_path).to eq(absolute_path) end end describe '#==' do it 'is false when compared with a non-PathLocation' do this = PathLocation.new(dependency, path: '.') that = 'A string' expect(this).to_not eq(that) end it 'is false when the metadata? is not the same' do this = PathLocation.new(dependency, path: '.') that = PathLocation.new(dependency, path: '.', metadata: true) expect(this).to_not eq(that) end it 'is false when the expanded paths are different' do this = PathLocation.new(dependency, path: '.') that = PathLocation.new(dependency, path: '..') expect(this).to_not eq(that) end it 'is true when they are the same' do this = PathLocation.new(dependency, path: '.', metadata: true) that = PathLocation.new(dependency, path: '.', metadata: true) expect(this).to eq(that) end end describe '#to_lock' do it 'includes the path relative to the Berksfile' do expect(subject.to_lock).to eq <<-EOH.gsub(/^ {10}/, '') path: #{relative_path} EOH end it 'includes the metadata attribute' do subject.stub(:metadata?).and_return(true) expect(subject.to_lock).to eq <<-EOH.gsub(/^ {10}/, '') path: #{relative_path} metadata: true EOH end end describe '#to_s' do it 'uses the relative path' do expect(subject.to_s).to eq("source at #{relative_path}") end end describe '#inspect' do it 'includes the right information' do subject.stub(:metadata?).and_return(true) expect(subject.inspect).to eq("#") end end end end