require 'omnibus' require 'spec_helper' describe Omnibus do before do allow(File).to receive(:directory?).and_return(true) allow(Gem::Specification).to receive(:find_all_by_name) .with('omnibus-software') .and_return([double(gem_dir: File.join(tmp_path, '/gem/omnibus-software'))]) allow(Gem::Specification).to receive(:find_all_by_name) .with('custom-omnibus-software') .and_return([double(gem_dir: File.join(tmp_path, '/gem/custom-omnibus-software'))]) Omnibus::Config.project_root(File.join(tmp_path, '/foo/bar')) Omnibus::Config.local_software_dirs([File.join(tmp_path, '/local'), File.join(tmp_path, '/other')]) Omnibus::Config.software_gems(['omnibus-software', 'custom-omnibus-software']) end describe '#which' do it 'returns nil when the file does not exist' do stub_env('PATH', nil) expect(subject.which('not_a_real_executable')).to be nil end it 'returns the path when the file exists' do ruby_cmd = windows? ? 'ruby.exe' : 'ruby' ruby = Bundler.which(ruby_cmd) expect(subject.which(ruby)).to eq(ruby) expect(subject.which(ruby_cmd)).to eq(ruby) end end describe '#project_path' do before do allow(Omnibus).to receive(:project_map) .and_return('chef' => '/projects/chef') end it 'accepts a string' do expect(subject.project_path('chef')).to eq('/projects/chef') end it 'accepts a symbol' do expect(subject.project_path(:chef)).to eq('/projects/chef') end it 'returns nil when the project does not exist' do expect(subject.project_path('bacon')).to be nil end end describe '#software_path' do before do allow(Omnibus).to receive(:software_map) .and_return('chef' => '/software/chef') end it 'accepts a string' do expect(subject.software_path('chef')).to eq('/software/chef') end it 'accepts a symbol' do expect(subject.software_path(:chef)).to eq('/software/chef') end it 'returns nil when the project does not exist' do expect(subject.software_path('bacon')).to be nil end end describe '#possible_paths_for' do it 'searches all paths' do expect(subject.possible_paths_for('file')).to eq(%w( /foo/bar/file /local/file /other/file /gem/omnibus-software/file /gem/custom-omnibus-software/file ).map { |path| File.join(tmp_path, path) }) end end end