63 lines
2.1 KiB
Ruby
63 lines
2.1 KiB
Ruby
![]() |
# frozen_string_literal: true
|
||
|
|
||
|
RSpec.describe Cask::Artifact::Symlinked, :cask do
|
||
|
# Test the formula conflict detection functionality that applies to all symlinked artifacts
|
||
|
describe "#conflicting_formula" do
|
||
|
let(:cask) do
|
||
|
Cask::CaskLoader.load(cask_path("with-binary")).tap do |cask|
|
||
|
InstallHelper.install_without_artifacts(cask)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
let(:binary_artifact) { cask.artifacts.find { |a| a.is_a?(Cask::Artifact::Binary) } }
|
||
|
let(:binarydir) { cask.config.binarydir }
|
||
|
let(:target_path) { binarydir.join("binary") }
|
||
|
|
||
|
around do |example|
|
||
|
binarydir.mkpath
|
||
|
|
||
|
example.run
|
||
|
ensure
|
||
|
FileUtils.rm_f target_path
|
||
|
FileUtils.rmdir binarydir
|
||
|
# Clean up the fake formula directory
|
||
|
FileUtils.rm_rf(HOMEBREW_CELLAR/"with-binary") if (HOMEBREW_CELLAR/"with-binary").exist?
|
||
|
end
|
||
|
|
||
|
context "when target is already linked from a formula" do
|
||
|
it "detects the conflict and skips linking with warning" do
|
||
|
# Create a fake formula directory structure
|
||
|
formula_cellar_path = HOMEBREW_CELLAR/"with-binary/1.0.0/bin"
|
||
|
formula_cellar_path.mkpath
|
||
|
formula_binary_path = formula_cellar_path/"binary"
|
||
|
FileUtils.touch formula_binary_path
|
||
|
|
||
|
# Create symlink from the expected location to the formula binary
|
||
|
target_path.make_symlink(formula_binary_path)
|
||
|
|
||
|
stderr = <<~EOS
|
||
|
Warning: It seems there is already a Binary at '#{target_path}' from formula with-binary; skipping link.
|
||
|
EOS
|
||
|
|
||
|
expect do
|
||
|
binary_artifact.install_phase(command: NeverSudoSystemCommand, force: false)
|
||
|
end.to output(stderr).to_stderr
|
||
|
|
||
|
expect(target_path).to be_a_symlink
|
||
|
expect(target_path.readlink).to eq(formula_binary_path)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when target doesn't exist" do
|
||
|
it "proceeds with normal installation" do
|
||
|
expect do
|
||
|
binary_artifact.install_phase(command: NeverSudoSystemCommand, force: false)
|
||
|
end.not_to raise_error
|
||
|
|
||
|
expect(target_path).to be_a_symlink
|
||
|
expect(target_path.readlink).to exist
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|