| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  | # typed: false | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  | require "livecheck/strategy" | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | describe Homebrew::Livecheck::Strategy::ElectronBuilder do | 
					
						
							|  |  |  |   subject(:electron_builder) { described_class } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 17:39:11 -04:00
										 |  |  |   let(:yaml_url) { "https://www.example.com/example/latest-mac.yml" } | 
					
						
							|  |  |  |   let(:non_yaml_url) { "https://brew.sh/test" } | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-11-16 12:31:54 -05:00
										 |  |  |   let(:mac_regex) { /Example[._-]v?(\d+(?:\.\d+)+)[._-]mac\.zip/i } | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |   let(:versions) { ["1.2.3"] } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  |   describe "::match?" do | 
					
						
							| 
									
										
										
										
											2021-08-10 17:39:11 -04:00
										 |  |  |     it "returns true for a YAML file URL" do | 
					
						
							|  |  |  |       expect(electron_builder.match?(yaml_url)).to be true | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 17:39:11 -04:00
										 |  |  |     it "returns false for non-YAML URL" do | 
					
						
							|  |  |  |       expect(electron_builder.match?(non_yaml_url)).to be false | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |   describe "::versions_from_content" do | 
					
						
							|  |  |  |     it "returns an empty array if content is blank" do | 
					
						
							|  |  |  |       expect(electron_builder.versions_from_content("")).to eq([]) | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |     it "returns an array of version strings when given YAML text" do | 
					
						
							|  |  |  |       expect(electron_builder.versions_from_content(electron_builder_yaml)).to eq(versions) | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-03-17 02:29:53 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |     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"]) | 
					
						
							| 
									
										
										
										
											2021-03-17 02:29:53 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |       # Returning an array of strings from block | 
					
						
							|  |  |  |       expect(electron_builder.versions_from_content(electron_builder_yaml) { versions }).to eq(versions) | 
					
						
							| 
									
										
										
										
											2021-03-17 02:29:53 +05:30
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-07-26 20:32:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-16 12:31:54 -05:00
										 |  |  |     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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |     it "allows a nil return from a block" do | 
					
						
							|  |  |  |       expect(electron_builder.versions_from_content(electron_builder_yaml) { next }).to eq([]) | 
					
						
							| 
									
										
										
										
											2021-07-26 20:32:10 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:09:55 -04:00
										 |  |  |     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) | 
					
						
							| 
									
										
										
										
											2021-07-26 20:32:10 -04:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-03-17 01:58:31 +05:30
										 |  |  |   end | 
					
						
							|  |  |  | end |