63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| ![copilot-swe-agent[bot]](/assets/img/avatar_default.png)  | # 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 |