spec/lib/gdk/dependencies_spec.rb (88 lines of code) (raw):
# frozen_string_literal: true
RSpec.describe GDK::Dependencies do
let(:tmp_path) { Dir.mktmpdir('gdk-path') }
let(:asdf_path) { Pathname(tmp_path).join('.asdf') }
before do
unstub_find_executable
stub_env('PATH', tmp_path)
end
describe '.homebrew_available?' do
it 'returns true when Homebrew is available in PATH' do
create_dummy_executable('brew')
expect(described_class.homebrew_available?).to be_truthy
end
it 'returns false when Homebrew is not available in PATH' do
expect(described_class.homebrew_available?).to be_falsey
end
end
describe '.macports_available?' do
it 'returns true when Macports is available in PATH' do
create_dummy_executable('port')
expect(described_class.macports_available?).to be_truthy
end
it 'returns false when Macports is not available in PATH' do
expect(described_class.macports_available?).to be_falsey
end
end
describe '.linux_apt_available?' do
it 'returns true when APT is available in PATH' do
create_dummy_executable('apt')
expect(described_class.linux_apt_available?).to be_truthy
end
it 'returns false when APT is not available in PATH' do
expect(described_class.linux_apt_available?).to be_falsey
end
end
describe '.asdf_available?' do
subject { described_class.asdf_available? }
it 'returns true when ASDF_DATA_DIR is present' do
stub_env('ASDF_DIR', nil)
stub_env('ASDF_DATA_DIR', asdf_path)
expect(subject).to be_truthy
end
it 'returns true when ASDF_DIR is present' do
stub_env('ASDF_DIR', asdf_path)
stub_env('ASDF_DATA_DIR', nil)
expect(subject).to be_truthy
end
it 'returns true when asdf binary is available in PATH' do
create_dummy_executable('asdf')
stub_env('ASDF_DIR', nil)
stub_env('ASDF_DATA_DIR', nil)
expect(subject).to be_truthy
end
it 'returns true when both asdf binary and ENV variables are present' do
create_dummy_executable('asdf')
stub_env('ASDF_DIR', asdf_path)
stub_env('ASDF_DATA_DIR', asdf_path)
expect(subject).to be_truthy
end
it 'returns false when neither asdf binary not ENV variables are present' do
stub_env('ASDF_DIR', nil)
stub_env('ASDF_DATA_DIR', nil)
expect(subject).to be_falsey
end
it 'returns false when the user opted out' do
stub_gdk_yaml('asdf' => { 'opt_out' => true })
create_dummy_executable('asdf')
stub_env('ASDF_DIR', asdf_path)
expect(subject).to be_falsey
end
end
describe '.mise_available?' do
subject { described_class.mise_available? }
it 'returns true when it is enabled and installed' do
stub_gdk_yaml('mise' => { 'enabled' => true })
create_dummy_executable('mise')
expect(subject).to be_truthy
end
it 'returns false when it is enabled but not installed' do
stub_gdk_yaml('mise' => { 'enabled' => true })
expect(subject).to be_falsey
end
it 'returns false when it is not enabled' do
stub_gdk_yaml('mise' => { 'enabled' => false })
create_dummy_executable('mise')
expect(subject).to be_falsey
end
end
end