| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "api" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe Homebrew::API::Cask do | 
					
						
							| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  |   let(:cache_dir) { mktmpdir } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   before do | 
					
						
							|  |  |  |     stub_const("Homebrew::API::HOMEBREW_CACHE_API", cache_dir) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def mock_curl_download(stdout:) | 
					
						
							|  |  |  |     allow(Utils::Curl).to receive(:curl_download) do |*_args, **kwargs| | 
					
						
							|  |  |  |       kwargs[:to].write stdout | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2023-02-19 00:54:45 +00:00
										 |  |  |     allow(Homebrew::API).to receive(:verify_and_parse_jws) do |json_data| | 
					
						
							|  |  |  |       [true, json_data] | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "::all_casks" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     let(:casks_json) do | 
					
						
							| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  |       <<~EOS | 
					
						
							|  |  |  |         [{ | 
					
						
							|  |  |  |           "token": "foo", | 
					
						
							|  |  |  |           "url": "https://brew.sh/foo" | 
					
						
							|  |  |  |         }, { | 
					
						
							|  |  |  |           "token": "bar", | 
					
						
							|  |  |  |           "url": "https://brew.sh/bar" | 
					
						
							|  |  |  |         }] | 
					
						
							|  |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |     let(:casks_hash) do | 
					
						
							| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  |       { | 
					
						
							|  |  |  |         "foo" => { "url" => "https://brew.sh/foo" }, | 
					
						
							|  |  |  |         "bar" => { "url" => "https://brew.sh/bar" }, | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns the expected cask JSON list" do | 
					
						
							|  |  |  |       mock_curl_download stdout: casks_json | 
					
						
							|  |  |  |       casks_output = described_class.all_casks | 
					
						
							|  |  |  |       expect(casks_output).to eq casks_hash | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2024-03-19 15:59:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "::source_download", :needs_macos do | 
					
						
							|  |  |  |     let(:cask) do | 
					
						
							|  |  |  |       cask = Cask::CaskLoader::FromAPILoader.new( | 
					
						
							|  |  |  |         "everything", | 
					
						
							|  |  |  |         from_json: JSON.parse((TEST_FIXTURE_DIR/"cask/everything.json").read.strip), | 
					
						
							|  |  |  |       ).load(config: nil) | 
					
						
							|  |  |  |       cask | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       allow_any_instance_of(Homebrew::API::Download).to receive(:fetch) | 
					
						
							|  |  |  |       allow_any_instance_of(Homebrew::API::Download).to receive(:symlink_location).and_return( | 
					
						
							|  |  |  |         TEST_FIXTURE_DIR/"cask/Casks/everything.rb", | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "specifies the correct URL and sha256" do | 
					
						
							|  |  |  |       expect(Homebrew::API::Download).to receive(:new).with( | 
					
						
							|  |  |  |         "https://raw.githubusercontent.com/Homebrew/homebrew-cask/abcdef1234567890abcdef1234567890abcdef12/Casks/everything.rb", | 
					
						
							|  |  |  |         Checksum.new("d8d0d6b2e5ff65388eccb82236fd3aa157b4a29bb043a1f72b97f0e9b70e8320"), | 
					
						
							|  |  |  |         any_args, | 
					
						
							|  |  |  |       ).and_call_original | 
					
						
							|  |  |  |       described_class.source_download(cask) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2022-12-30 01:54:32 -05:00
										 |  |  | end |