| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "bundle" | 
					
						
							| 
									
										
										
										
											2025-03-24 21:55:47 +08:00
										 |  |  | require "bundle/whalebrew_dumper" | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe Homebrew::Bundle::WhalebrewDumper do | 
					
						
							|  |  |  |   subject(:dumper) { described_class } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe ".images" do | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       dumper.reset! | 
					
						
							|  |  |  |       allow(Homebrew::Bundle).to receive(:whalebrew_installed?).and_return(true) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let(:whalebrew_list_single_output) do | 
					
						
							|  |  |  |       "COMMAND   IMAGE\nwget      whalebrew/wget" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let(:whalebrew_list_duplicate_output) do | 
					
						
							|  |  |  |       "COMMAND   IMAGE\nwget      whalebrew/wget\nwget      whalebrew/wget" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "removes the header" do | 
					
						
							|  |  |  |       allow(dumper).to receive(:`).with("whalebrew list 2>/dev/null") | 
					
						
							|  |  |  |                                   .and_return(whalebrew_list_single_output) | 
					
						
							|  |  |  |       expect(dumper.images).not_to include("COMMAND") | 
					
						
							|  |  |  |       expect(dumper.images).not_to include("IMAGE") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "dedupes items" do | 
					
						
							|  |  |  |       allow(dumper).to receive(:`).with("whalebrew list 2>/dev/null") | 
					
						
							|  |  |  |                                   .and_return(whalebrew_list_duplicate_output) | 
					
						
							|  |  |  |       expect(dumper.images).to eq(["whalebrew/wget"]) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when whalebrew is not installed" do | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       dumper.reset! | 
					
						
							|  |  |  |       allow(Homebrew::Bundle).to receive(:whalebrew_installed?).and_return(false) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns empty list" do | 
					
						
							|  |  |  |       expect(dumper.images).to be_empty | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "dumps as empty string" do | 
					
						
							|  |  |  |       expect(dumper.dump).to eql("") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when whalebrew is installed" do | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       allow(Homebrew::Bundle).to receive(:whalebrew_installed?).and_return(true) | 
					
						
							|  |  |  |       allow(dumper).to receive(:images).and_return(["whalebrew/wget", "whalebrew/dig"]) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "when images are installed" do | 
					
						
							|  |  |  |       let(:expected_whalebrew_dump) do | 
					
						
							|  |  |  |         %Q(whalebrew "whalebrew/wget"\nwhalebrew "whalebrew/dig") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns correct listing" do | 
					
						
							|  |  |  |         expect(dumper.images).to eq(["whalebrew/wget", "whalebrew/dig"]) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "dumps usable output for Brewfile" do | 
					
						
							|  |  |  |         expect(dumper.dump).to eql(expected_whalebrew_dump) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |