| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "ostruct" | 
					
						
							|  |  |  | require "bundle" | 
					
						
							| 
									
										
										
										
											2025-03-24 21:55:47 +08:00
										 |  |  | require "bundle/skipper" | 
					
						
							|  |  |  | require "bundle/dsl" | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe Homebrew::Bundle::Skipper do | 
					
						
							|  |  |  |   subject(:skipper) { described_class } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   before do | 
					
						
							|  |  |  |     allow(ENV).to receive(:[]).and_return(nil) | 
					
						
							|  |  |  |     allow(ENV).to receive(:[]).with("HOMEBREW_BUNDLE_BREW_SKIP").and_return("mysql") | 
					
						
							|  |  |  |     allow(ENV).to receive(:[]).with("HOMEBREW_BUNDLE_WHALEBREW_SKIP").and_return("whalebrew/imagemagick") | 
					
						
							|  |  |  |     allow(ENV).to receive(:[]).with("HOMEBREW_BUNDLE_TAP_SKIP").and_return("org/repo") | 
					
						
							|  |  |  |     allow(Formatter).to receive(:warning) | 
					
						
							|  |  |  |     skipper.instance_variable_set(:@skipped_entries, nil) | 
					
						
							|  |  |  |     skipper.instance_variable_set(:@failed_taps, nil) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe ".skip?" do | 
					
						
							|  |  |  |     context "with a listed formula" do | 
					
						
							|  |  |  |       let(:entry) { Homebrew::Bundle::Dsl::Entry.new(:brew, "mysql") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns true" do | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-01 14:36:43 +01:00
										 |  |  |     context "with an unbottled formula on ARM" do | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |       let(:entry) { Homebrew::Bundle::Dsl::Entry.new(:brew, "mysql") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns true" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:arm?).and_return(true) | 
					
						
							| 
									
										
										
										
											2025-04-01 14:36:43 +01:00
										 |  |  |         allow(Homebrew).to receive(:default_prefix?).and_return(true) | 
					
						
							|  |  |  |         stub_formula_loader formula("mysql") { url "mysql-1.0" } | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "with an unlisted cask", :needs_macos do | 
					
						
							|  |  |  |       let(:entry) { Homebrew::Bundle::Dsl::Entry.new(:cask, "java") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns false" do | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "with a listed whalebrew image" do | 
					
						
							|  |  |  |       let(:entry) { Homebrew::Bundle::Dsl::Entry.new(:whalebrew, "whalebrew/imagemagick") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns true" do | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "with a listed formula in a failed tap" do | 
					
						
							|  |  |  |       let(:entry) { Homebrew::Bundle::Dsl::Entry.new(:brew, "org/repo/formula") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns true" do | 
					
						
							|  |  |  |         skipper.tap_failed!("org/repo") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe ".failed_tap!" do | 
					
						
							|  |  |  |     context "with a tap" do | 
					
						
							|  |  |  |       let(:tap) { Homebrew::Bundle::Dsl::Entry.new(:tap, "org/repo-b") } | 
					
						
							|  |  |  |       let(:entry) { Homebrew::Bundle::Dsl::Entry.new(:brew, "org/repo-b/formula") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns false" do | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         skipper.tap_failed! tap.name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(skipper.skip?(entry)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |