Patrick Linnane 4513a43d53
Fix RuboCop failures.
Co-authored-by: Patrick Linnane <patrick@linnane.io>
Co-authored-by: Carlo Cabrera <github@carlo.cab>
Co-authored-by: Thierry Moisan <thierry.moisan@gmail.com>
Co-authored-by: Mike McQuaid <mike@mikemcquaid.com>
2025-07-14 19:12:38 +01:00

84 lines
3.9 KiB
Ruby

# frozen_string_literal: true
require "bundle"
require "bundle/commands/install"
require "bundle/skipper"
RSpec.describe Homebrew::Bundle::Commands::Install do
before do
allow_any_instance_of(IO).to receive(:puts)
end
context "when a Brewfile is not found" do
it "raises an error" do
allow_any_instance_of(Pathname).to receive(:read).and_raise(Errno::ENOENT)
expect { described_class.run }.to raise_error(RuntimeError)
end
end
context "when a Brewfile is found", :no_api do
let(:brewfile_contents) do
<<~EOS
tap 'phinze/cask'
brew 'mysql', conflicts_with: ['mysql56']
cask 'phinze/cask/google-chrome', greedy: true
mas '1Password', id: 443987910
vscode 'GitHub.codespaces'
EOS
end
it "does not raise an error" do
allow(Homebrew::Bundle::TapInstaller).to receive(:preinstall!).and_return(false)
allow(Homebrew::Bundle::VscodeExtensionInstaller).to receive(:preinstall!).and_return(false)
allow(Homebrew::Bundle::FormulaInstaller).to receive_messages(preinstall!: true, install!: true)
allow(Homebrew::Bundle::CaskInstaller).to receive_messages(preinstall!: true, install!: true)
allow(Homebrew::Bundle::MacAppStoreInstaller).to receive_messages(preinstall!: true, install!: true)
allow_any_instance_of(Pathname).to receive(:read).and_return(brewfile_contents)
expect { described_class.run }.not_to raise_error
end
it "#dsl returns a valid DSL" do
allow(Homebrew::Bundle::TapInstaller).to receive(:preinstall!).and_return(false)
allow(Homebrew::Bundle::VscodeExtensionInstaller).to receive(:preinstall!).and_return(false)
allow(Homebrew::Bundle::FormulaInstaller).to receive_messages(preinstall!: true, install!: true)
allow(Homebrew::Bundle::CaskInstaller).to receive_messages(preinstall!: true, install!: true)
allow(Homebrew::Bundle::MacAppStoreInstaller).to receive_messages(preinstall!: true, install!: true)
allow_any_instance_of(Pathname).to receive(:read).and_return(brewfile_contents)
described_class.run
expect(described_class.dsl.entries.first.name).to eql("phinze/cask")
end
it "does not raise an error when skippable" do
expect(Homebrew::Bundle::FormulaInstaller).not_to receive(:install!)
allow(Homebrew::Bundle::Skipper).to receive(:skip?).and_return(true)
allow_any_instance_of(Pathname).to receive(:read)
.and_return("brew 'mysql'")
expect { described_class.run }.not_to raise_error
end
it "exits on failures" do
allow(Homebrew::Bundle::FormulaInstaller).to receive_messages(preinstall!: true, install!: false)
allow(Homebrew::Bundle::CaskInstaller).to receive_messages(preinstall!: true, install!: false)
allow(Homebrew::Bundle::MacAppStoreInstaller).to receive_messages(preinstall!: true, install!: false)
allow(Homebrew::Bundle::TapInstaller).to receive_messages(preinstall!: true, install!: false)
allow(Homebrew::Bundle::VscodeExtensionInstaller).to receive_messages(preinstall!: true, install!: false)
allow_any_instance_of(Pathname).to receive(:read).and_return(brewfile_contents)
expect { described_class.run }.to raise_error(SystemExit)
end
it "skips installs from failed taps" do
allow(Homebrew::Bundle::CaskInstaller).to receive(:preinstall!).and_return(false)
allow(Homebrew::Bundle::TapInstaller).to receive_messages(preinstall!: true, install!: false)
allow(Homebrew::Bundle::FormulaInstaller).to receive_messages(preinstall!: true, install!: true)
allow(Homebrew::Bundle::MacAppStoreInstaller).to receive_messages(preinstall!: true, install!: true)
allow(Homebrew::Bundle::VscodeExtensionInstaller).to receive_messages(preinstall!: true, install!: true)
allow_any_instance_of(Pathname).to receive(:read).and_return(brewfile_contents)
expect(Homebrew::Bundle).not_to receive(:system)
expect { described_class.run }.to raise_error(SystemExit)
end
end
end