brew/Library/Homebrew/test/bundle/cask_installer_spec.rb
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

165 lines
6.6 KiB
Ruby

# frozen_string_literal: true
require "bundle"
require "bundle/cask_dumper"
require "bundle/cask_installer"
RSpec.describe Homebrew::Bundle::CaskInstaller do
describe ".installed_casks" do
before do
Homebrew::Bundle::CaskDumper.reset!
end
it "shells out" do
expect { described_class.installed_casks }.not_to raise_error
end
end
describe ".cask_installed_and_up_to_date?" do
it "returns result" do
described_class.reset!
allow(described_class).to receive_messages(installed_casks: ["foo", "baz"],
outdated_casks: ["baz"])
expect(described_class.cask_installed_and_up_to_date?("foo")).to be(true)
expect(described_class.cask_installed_and_up_to_date?("baz")).to be(false)
end
end
context "when brew-cask is not installed" do
describe ".outdated_casks" do
it "returns empty array" do
described_class.reset!
expect(described_class.outdated_casks).to eql([])
end
end
end
context "when brew-cask is installed" do
before do
Homebrew::Bundle::CaskDumper.reset!
allow(Homebrew::Bundle).to receive(:cask_installed?).and_return(true)
end
describe ".outdated_casks" do
it "returns empty array" do
described_class.reset!
expect(described_class.outdated_casks).to eql([])
end
end
context "when cask is installed" do
before do
Homebrew::Bundle::CaskDumper.reset!
allow(described_class).to receive(:installed_casks).and_return(["google-chrome"])
end
it "skips" do
expect(Homebrew::Bundle).not_to receive(:system)
expect(described_class.preinstall!("google-chrome")).to be(false)
end
end
context "when cask is outdated" do
before do
allow(described_class).to receive_messages(installed_casks: ["google-chrome"],
outdated_casks: ["google-chrome"])
end
it "upgrades" do
expect(Homebrew::Bundle).to \
receive(:system).with(HOMEBREW_BREW_FILE, "upgrade", "--cask", "google-chrome", verbose: false)
.and_return(true)
expect(described_class.preinstall!("google-chrome")).to be(true)
expect(described_class.install!("google-chrome")).to be(true)
end
end
context "when cask is outdated and uses auto-update" do
before do
described_class.reset!
allow(Homebrew::Bundle::CaskDumper).to receive_messages(cask_names: ["opera"], outdated_cask_names: [])
allow(Homebrew::Bundle::CaskDumper).to receive(:cask_is_outdated_using_greedy?).with("opera").and_return(true)
end
it "upgrades" do
expect(Homebrew::Bundle).to \
receive(:system).with(HOMEBREW_BREW_FILE, "upgrade", "--cask", "opera", verbose: false)
.and_return(true)
expect(described_class.preinstall!("opera", greedy: true)).to be(true)
expect(described_class.install!("opera", greedy: true)).to be(true)
end
end
context "when cask is not installed" do
before do
allow(described_class).to receive(:installed_casks).and_return([])
end
it "installs cask" do
expect(Homebrew::Bundle).to receive(:brew).with("install", "--cask", "google-chrome", "--adopt",
verbose: false)
.and_return(true)
expect(described_class.preinstall!("google-chrome")).to be(true)
expect(described_class.install!("google-chrome")).to be(true)
end
it "installs cask with arguments" do
expect(Homebrew::Bundle).to(
receive(:brew).with("install", "--cask", "firefox", "--appdir=/Applications", "--adopt",
verbose: false)
.and_return(true),
)
expect(described_class.preinstall!("firefox", args: { appdir: "/Applications" })).to be(true)
expect(described_class.install!("firefox", args: { appdir: "/Applications" })).to be(true)
end
it "reports a failure" do
expect(Homebrew::Bundle).to receive(:brew).with("install", "--cask", "google-chrome", "--adopt",
verbose: false)
.and_return(false)
expect(described_class.preinstall!("google-chrome")).to be(true)
expect(described_class.install!("google-chrome")).to be(false)
end
context "with boolean arguments" do
it "includes a flag if true" do
expect(Homebrew::Bundle).to receive(:brew).with("install", "--cask", "iterm", "--force",
verbose: false)
.and_return(true)
expect(described_class.preinstall!("iterm", args: { force: true })).to be(true)
expect(described_class.install!("iterm", args: { force: true })).to be(true)
end
it "does not include a flag if false" do
expect(Homebrew::Bundle).to receive(:brew).with("install", "--cask", "iterm", "--adopt", verbose: false)
.and_return(true)
expect(described_class.preinstall!("iterm", args: { force: false })).to be(true)
expect(described_class.install!("iterm", args: { force: false })).to be(true)
end
end
end
context "when the postinstall option is provided" do
before do
Homebrew::Bundle::CaskDumper.reset!
allow(Homebrew::Bundle::CaskDumper).to receive_messages(cask_names: ["google-chrome"],
outdated_cask_names: ["google-chrome"])
allow(Homebrew::Bundle).to receive(:brew).and_return(true)
allow(described_class).to receive(:upgrading?).and_return(true)
end
it "runs the postinstall command" do
expect(Kernel).to receive(:system).with("custom command").and_return(true)
expect(described_class.preinstall!("google-chrome", postinstall: "custom command")).to be(true)
expect(described_class.install!("google-chrome", postinstall: "custom command")).to be(true)
end
it "reports a failure when postinstall fails" do
expect(Kernel).to receive(:system).with("custom command").and_return(false)
expect(described_class.preinstall!("google-chrome", postinstall: "custom command")).to be(true)
expect(described_class.install!("google-chrome", postinstall: "custom command")).to be(false)
end
end
end
end