| 
									
										
										
										
											2025-07-06 16:13:39 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "utils/cpan" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe CPAN do | 
					
						
							|  |  |  |   let(:cpan_package_url) do | 
					
						
							|  |  |  |     "https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.68.tar.gz" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2025-07-14 14:15:20 +09:00
										 |  |  |   let(:cpan_tgz_url) do | 
					
						
							|  |  |  |     "https://cpan.metacpan.org/authors/id/S/ST/STBEY/Example-Module-1.23.tgz" | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2025-07-06 16:13:39 +09:00
										 |  |  |   let(:non_cpan_package_url) do | 
					
						
							|  |  |  |     "https://github.com/example/package/archive/v1.0.0.tar.gz" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe CPAN::Package do | 
					
						
							|  |  |  |     let(:package_from_cpan_url) { described_class.new("Scalar::Util", cpan_package_url) } | 
					
						
							| 
									
										
										
										
											2025-07-14 14:15:20 +09:00
										 |  |  |     let(:package_from_tgz_url) { described_class.new("Example::Module", cpan_tgz_url) } | 
					
						
							| 
									
										
										
										
											2025-07-06 16:13:39 +09:00
										 |  |  |     let(:package_from_non_cpan_url) { described_class.new("SomePackage", non_cpan_package_url) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "initialize" do | 
					
						
							|  |  |  |       it "initializes resource name" do | 
					
						
							|  |  |  |         expect(package_from_cpan_url.name).to eq "Scalar::Util" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "extracts version from CPAN url" do | 
					
						
							|  |  |  |         expect(package_from_cpan_url.current_version).to eq "1.68" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2025-07-14 14:15:20 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |       it "handles .tgz extensions" do | 
					
						
							|  |  |  |         expect(package_from_tgz_url.current_version).to eq "1.23" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2025-07-06 16:13:39 +09:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe ".valid_cpan_package?" do | 
					
						
							|  |  |  |       it "is true for CPAN URLs" do | 
					
						
							|  |  |  |         expect(package_from_cpan_url.valid_cpan_package?).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "is false for non-CPAN URLs" do | 
					
						
							|  |  |  |         expect(package_from_non_cpan_url.valid_cpan_package?).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe ".to_s" do | 
					
						
							|  |  |  |       it "returns resource name" do | 
					
						
							|  |  |  |         expect(package_from_cpan_url.to_s).to eq "Scalar::Util" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |