| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "bundle" | 
					
						
							| 
									
										
										
										
											2025-03-24 21:55:47 +08:00
										 |  |  | require "bundle/commands/dump" | 
					
						
							|  |  |  | require "bundle/cask_dumper" | 
					
						
							| 
									
										
										
										
											2025-07-04 11:25:41 +01:00
										 |  |  | require "bundle/formula_dumper" | 
					
						
							| 
									
										
										
										
											2025-03-24 21:55:47 +08:00
										 |  |  | require "bundle/tap_dumper" | 
					
						
							|  |  |  | require "bundle/whalebrew_dumper" | 
					
						
							|  |  |  | require "bundle/vscode_extension_dumper" | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe Homebrew::Bundle::Commands::Dump do | 
					
						
							|  |  |  |   subject(:dump) do | 
					
						
							| 
									
										
										
										
											2025-07-04 11:25:41 +01:00
										 |  |  |     described_class.run(global:, file: nil, describe: false, force:, no_restart: false, taps: true, formulae: true, | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |                         casks: true, mas: true, whalebrew: true, vscode: true) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let(:force) { false } | 
					
						
							|  |  |  |   let(:global) { false } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   before do | 
					
						
							|  |  |  |     Homebrew::Bundle::CaskDumper.reset! | 
					
						
							| 
									
										
										
										
											2025-07-04 11:25:41 +01:00
										 |  |  |     Homebrew::Bundle::FormulaDumper.reset! | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |     Homebrew::Bundle::TapDumper.reset! | 
					
						
							|  |  |  |     Homebrew::Bundle::WhalebrewDumper.reset! | 
					
						
							|  |  |  |     Homebrew::Bundle::VscodeExtensionDumper.reset! | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when files existed" do | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       allow_any_instance_of(Pathname).to receive(:exist?).and_return(true) | 
					
						
							|  |  |  |       allow(Homebrew::Bundle).to receive(:cask_installed?).and_return(true) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises error" do | 
					
						
							|  |  |  |       expect do | 
					
						
							|  |  |  |         dump | 
					
						
							|  |  |  |       end.to raise_error(RuntimeError) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "exits before doing any work" do | 
					
						
							|  |  |  |       expect(Homebrew::Bundle::TapDumper).not_to receive(:dump) | 
					
						
							| 
									
										
										
										
											2025-07-04 11:25:41 +01:00
										 |  |  |       expect(Homebrew::Bundle::FormulaDumper).not_to receive(:dump) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |       expect(Homebrew::Bundle::CaskDumper).not_to receive(:dump) | 
					
						
							|  |  |  |       expect(Homebrew::Bundle::WhalebrewDumper).not_to receive(:dump) | 
					
						
							|  |  |  |       expect do | 
					
						
							|  |  |  |         dump | 
					
						
							|  |  |  |       end.to raise_error(RuntimeError) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when files existed and `--force` and `--global` are passed" do | 
					
						
							|  |  |  |     let(:force) { true } | 
					
						
							|  |  |  |     let(:global) { true } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       ENV["HOMEBREW_BUNDLE_FILE"] = "" | 
					
						
							|  |  |  |       allow_any_instance_of(Pathname).to receive(:exist?).and_return(true) | 
					
						
							|  |  |  |       allow(Homebrew::Bundle).to receive(:cask_installed?).and_return(true) | 
					
						
							|  |  |  |       allow(Cask::Caskroom).to receive(:casks).and_return([]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # don't try to load gcc/glibc | 
					
						
							|  |  |  |       allow(DevelopmentTools).to receive_messages(needs_libc_formula?: false, needs_compiler_formula?: false) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       stub_formula_loader formula("mas") { url "mas-1.0" } | 
					
						
							|  |  |  |       stub_formula_loader formula("whalebrew") { url "whalebrew-1.0" } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "doesn't raise error" do | 
					
						
							|  |  |  |       io = instance_double(File, write: true) | 
					
						
							|  |  |  |       expect_any_instance_of(Pathname).to receive(:open).with("w").and_yield(io) | 
					
						
							|  |  |  |       expect(io).to receive(:write) | 
					
						
							|  |  |  |       expect { dump }.not_to raise_error | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |