 9e8900fb6e
			
		
	
	
		9e8900fb6e
		
			
		
	
	
	
	
		
			
			This modifies cask-related livecheck strategies to allow passing a regex into a `strategy` block, when appropriate. These strategies were outliers that explicitly rejected a regex even if a `strategy` block was used, forcing any regex to be inlined in the `strategy` block (instead of being defined using `#regex`). With these changes, all `strategy` blocks will be able to accept a regex, further simplifying the mental model. This also helps to better align the various `find_versions` and `versions_from_*` methods across strategies.
		
			
				
	
	
		
			93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "livecheck/strategy"
 | |
| 
 | |
| describe Homebrew::Livecheck::Strategy::ElectronBuilder do
 | |
|   subject(:electron_builder) { described_class }
 | |
| 
 | |
|   let(:yaml_url) { "https://www.example.com/example/latest-mac.yml" }
 | |
|   let(:non_yaml_url) { "https://brew.sh/test" }
 | |
| 
 | |
|   let(:electron_builder_yaml) {
 | |
|     <<~EOS
 | |
|       version: 1.2.3
 | |
|       files:
 | |
|         - url: Example-1.2.3-mac.zip
 | |
|           sha512: MDXR0pxozBJjxxbtUQJOnhiaiiQkryLAwtcVjlnNiz30asm/PtSxlxWKFYN3kV/kl+jriInJrGypuzajTF6XIA==
 | |
|           size: 92031237
 | |
|           blockMapSize: 96080
 | |
|         - url: Example-1.2.3.dmg
 | |
|           sha512: k6WRDlZEfZGZHoOfUShpHxXZb5p44DRp+FAO2FXNx2kStZvyW9VuaoB7phPMfZpcMKrzfRfncpP8VEM8OB2y9g==
 | |
|           size: 94972630
 | |
|       path: Example-1.2.3-mac.zip
 | |
|       sha512: MDXR0pxozBJjxxbtUQJOnhiaiiQkryLAwtcVjlnNiz30asm/PtSxlxWKFYN3kV/kl+jriInJrGypuzajTF6XIA==
 | |
|       releaseDate: '2000-01-01T00:00:00.000Z'
 | |
|     EOS
 | |
|   }
 | |
|   let(:mac_regex) { /Example[._-]v?(\d+(?:\.\d+)+)[._-]mac\.zip/i }
 | |
| 
 | |
|   let(:versions) { ["1.2.3"] }
 | |
| 
 | |
|   describe "::match?" do
 | |
|     it "returns true for a YAML file URL" do
 | |
|       expect(electron_builder.match?(yaml_url)).to be true
 | |
|     end
 | |
| 
 | |
|     it "returns false for non-YAML URL" do
 | |
|       expect(electron_builder.match?(non_yaml_url)).to be false
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "::versions_from_content" do
 | |
|     it "returns an empty array if content is blank" do
 | |
|       expect(electron_builder.versions_from_content("")).to eq([])
 | |
|     end
 | |
| 
 | |
|     it "returns an array of version strings when given YAML text" do
 | |
|       expect(electron_builder.versions_from_content(electron_builder_yaml)).to eq(versions)
 | |
|     end
 | |
| 
 | |
|     it "returns an array of version strings when given YAML text and a block" do
 | |
|       # Returning a string from block
 | |
|       expect(
 | |
|         electron_builder.versions_from_content(electron_builder_yaml) do |yaml|
 | |
|           yaml["version"].sub("3", "4")
 | |
|         end,
 | |
|       ).to eq(["1.2.4"])
 | |
| 
 | |
|       # Returning an array of strings from block
 | |
|       expect(electron_builder.versions_from_content(electron_builder_yaml) { versions }).to eq(versions)
 | |
|     end
 | |
| 
 | |
|     it "returns an array of version strings when given YAML text, a regex, and a block" do
 | |
|       # Returning a string from block
 | |
|       expect(
 | |
|         electron_builder.versions_from_content(electron_builder_yaml, mac_regex) do |yaml, regex|
 | |
|           yaml["path"][regex, 1]
 | |
|         end,
 | |
|       ).to eq(versions)
 | |
| 
 | |
|       # Returning an array of strings from block
 | |
|       expect(
 | |
|         electron_builder.versions_from_content(electron_builder_yaml, mac_regex) do |yaml, regex|
 | |
|           yaml["files"]&.map do |file|
 | |
|             next if file["url"].blank?
 | |
| 
 | |
|             file["url"][regex, 1]
 | |
|           end
 | |
|         end,
 | |
|       ).to eq(versions)
 | |
|     end
 | |
| 
 | |
|     it "allows a nil return from a block" do
 | |
|       expect(electron_builder.versions_from_content(electron_builder_yaml) { next }).to eq([])
 | |
|     end
 | |
| 
 | |
|     it "errors on an invalid return type from a block" do
 | |
|       expect { electron_builder.versions_from_content(electron_builder_yaml) { 123 } }
 | |
|         .to raise_error(TypeError, Homebrew::Livecheck::Strategy::INVALID_BLOCK_RETURN_VALUE_MSG)
 | |
|     end
 | |
|   end
 | |
| end
 |