153 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "missing_formula"
 | |
| 
 | |
| describe Homebrew::MissingFormula do
 | |
|   describe "::reason" do
 | |
|     subject { described_class.reason("gem") }
 | |
| 
 | |
|     it { is_expected.not_to be_nil }
 | |
|   end
 | |
| 
 | |
|   describe "::disallowed_reason" do
 | |
|     matcher :disallow do |name|
 | |
|       match do |expected|
 | |
|         expected.disallowed_reason(name)
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     it { is_expected.to disallow("gem") }
 | |
|     it { is_expected.to disallow("pip") }
 | |
|     it { is_expected.to disallow("pil") }
 | |
|     it { is_expected.to disallow("macruby") }
 | |
|     it { is_expected.to disallow("lzma") }
 | |
|     it { is_expected.to disallow("sshpass") }
 | |
|     it { is_expected.to disallow("gsutil") }
 | |
|     it { is_expected.to disallow("gfortran") }
 | |
|     it { is_expected.to disallow("play") }
 | |
|     it { is_expected.to disallow("haskell-platform") }
 | |
|     it { is_expected.to disallow("mysqldump-secure") }
 | |
|     it { is_expected.to disallow("ngrok") }
 | |
|     it("disallows Xcode", :needs_macos) { is_expected.to disallow("xcode") }
 | |
|   end
 | |
| 
 | |
|   describe "::tap_migration_reason" do
 | |
|     subject { described_class.tap_migration_reason(formula) }
 | |
| 
 | |
|     before do
 | |
|       tap_path = Tap::TAP_DIRECTORY/"homebrew/homebrew-foo"
 | |
|       tap_path.mkpath
 | |
|       (tap_path/"tap_migrations.json").write <<~JSON
 | |
|         { "migrated-formula": "homebrew/bar" }
 | |
|       JSON
 | |
|     end
 | |
| 
 | |
|     context "with a migrated formula" do
 | |
|       let(:formula) { "migrated-formula" }
 | |
| 
 | |
|       it { is_expected.not_to be_nil }
 | |
|     end
 | |
| 
 | |
|     context "with a missing formula" do
 | |
|       let(:formula) { "missing-formula" }
 | |
| 
 | |
|       it { is_expected.to be_nil }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "::deleted_reason" do
 | |
|     subject { described_class.deleted_reason(formula, silent: true) }
 | |
| 
 | |
|     before do
 | |
|       tap_path = Tap::TAP_DIRECTORY/"homebrew/homebrew-foo"
 | |
|       tap_path.mkpath
 | |
|       (tap_path/"deleted-formula.rb").write "placeholder"
 | |
|       ENV.delete "GIT_AUTHOR_DATE"
 | |
|       ENV.delete "GIT_COMMITTER_DATE"
 | |
| 
 | |
|       tap_path.cd do
 | |
|         system "git", "init"
 | |
|         system "git", "add", "--all"
 | |
|         system "git", "commit", "-m", "initial state"
 | |
|         system "git", "rm", "deleted-formula.rb"
 | |
|         system "git", "commit", "-m", "delete formula 'deleted-formula'"
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "with a deleted formula" do
 | |
|       let(:formula) { "homebrew/foo/deleted-formula" }
 | |
| 
 | |
|       it { is_expected.not_to be_nil }
 | |
|     end
 | |
| 
 | |
|     context "with a formula that never existed" do
 | |
|       let(:formula) { "homebrew/foo/missing-formula" }
 | |
| 
 | |
|       it { is_expected.to be_nil }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "::cask_reason", :cask do
 | |
|     subject { described_class.cask_reason(formula, show_info: show_info) }
 | |
| 
 | |
|     context "with a formula name that is a cask and show_info: false" do
 | |
|       let(:formula) { "local-caffeine" }
 | |
|       let(:show_info) { false }
 | |
| 
 | |
|       it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
 | |
|       it { is_expected.to match(/Try\n  brew install --cask local-caffeine/) }
 | |
|     end
 | |
| 
 | |
|     context "with a formula name that is a cask and show_info: true" do
 | |
|       let(:formula) { "local-caffeine" }
 | |
|       let(:show_info) { true }
 | |
| 
 | |
|       it { is_expected.to match(/Found a cask named "local-caffeine" instead.\n\nlocal-caffeine: 1.2.3\n/) }
 | |
|     end
 | |
| 
 | |
|     context "with a formula name that is not a cask" do
 | |
|       let(:formula) { "missing-formula" }
 | |
|       let(:show_info) { false }
 | |
| 
 | |
|       it { is_expected.to be_nil }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "::suggest_command", :cask do
 | |
|     subject { described_class.suggest_command(name, command) }
 | |
| 
 | |
|     context "when installing" do
 | |
|       let(:name) { "local-caffeine" }
 | |
|       let(:command) { "install" }
 | |
| 
 | |
|       it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
 | |
|       it { is_expected.to match(/Try\n  brew install --cask local-caffeine/) }
 | |
|     end
 | |
| 
 | |
|     context "when uninstalling" do
 | |
|       let(:name) { "local-caffeine" }
 | |
|       let(:command) { "uninstall" }
 | |
| 
 | |
|       it { is_expected.to be_nil }
 | |
| 
 | |
|       context "with described cask installed" do
 | |
|         before do
 | |
|           allow(Cask::Caskroom).to receive(:casks).and_return(["local-caffeine"])
 | |
|         end
 | |
| 
 | |
|         it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
 | |
|         it { is_expected.to match(/Try\n  brew uninstall --cask local-caffeine/) }
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "when getting info" do
 | |
|       let(:name) { "local-caffeine" }
 | |
|       let(:command) { "info" }
 | |
| 
 | |
|       it { is_expected.to match(/Found a cask named "local-caffeine" instead./) }
 | |
|       it { is_expected.to match(/local-caffeine: 1.2.3/) }
 | |
|     end
 | |
|   end
 | |
| end
 | 
