Skip to content

Commit 03520f1

Browse files
committed
update filters properly and fix issues.
1 parent bddc65f commit 03520f1

File tree

4 files changed

+45
-23
lines changed

4 files changed

+45
-23
lines changed

common/lib/dependabot/package/package_latest_version_finder.rb

+10-10
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,16 @@ def available_versions
121121
.returns(T.nilable(Dependabot::Version))
122122
end
123123
def fetch_latest_version(language_version: nil)
124-
version_hashes = available_versions
125-
return unless version_hashes
126-
127-
version_hashes = filter_yanked_versions(version_hashes)
128-
version_hashes = filter_by_cooldown(version_hashes)
129-
versions = filter_unsupported_versions(version_hashes, language_version)
130-
versions = filter_prerelease_versions(versions)
131-
versions = filter_ignored_versions(versions)
132-
versions = apply_post_fetch_latest_versions_filter(versions)
133-
versions.max_by(&:version)&.version
124+
releases = available_versions
125+
return unless releases
126+
127+
releases = filter_yanked_versions(releases)
128+
releases = filter_by_cooldown(releases)
129+
releases = filter_unsupported_versions(releases, language_version)
130+
releases = filter_prerelease_versions(releases)
131+
releases = filter_ignored_versions(releases)
132+
releases = apply_post_fetch_latest_versions_filter(releases)
133+
releases.max_by(&:version)&.version
134134
end
135135

136136
sig do

common/lib/dependabot/package/package_release.rb

+14
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,20 @@ def initialize(
8484
def yanked?
8585
@yanked
8686
end
87+
88+
# Overriding the `==` method to compare two PackageRelease objects based on version
89+
sig { params(other: Object).returns(T::Boolean) }
90+
def ==(other)
91+
# Ensure other is a PackageRelease object and compare versions
92+
return false unless other.is_a?(PackageRelease)
93+
94+
version == other.version
95+
end
96+
97+
sig { returns(String) }
98+
def to_s
99+
version.to_s
100+
end
87101
end
88102
end
89103
end

common/spec/dependabot/package/package_latest_version_finder_spec.rb

+16-13
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def package_details
4242
language = if release[:language]
4343
Dependabot::Package::PackageLanguage.new(
4444
name: release[:language].fetch(:name, ""),
45-
version: release[:language].fetch(:version, nil)&.then { |v| Dependabot::Version.new(v) },
45+
version: release[:language].fetch(:version, nil)&.then { |v| TestVersion.new(v) },
4646
requirement: release[:language].fetch(:requirement, nil)&.then do |r|
4747
TestRequirement.new(r)
4848
end
@@ -266,7 +266,7 @@ def package_details
266266
describe "#latest_version" do
267267
subject(:latest_version) { finder.latest_version }
268268

269-
it { is_expected.to eq(Gem::Version.new("7.0.0")) }
269+
it { is_expected.to eq(TestVersion.new("7.0.0")) }
270270

271271
context "when all supported versions are ignored" do
272272
let(:ignored_versions) { ["7.0.0", "6.1.4", "6.0.2", "6.0.0"] }
@@ -286,7 +286,7 @@ def package_details
286286
end
287287

288288
it "ignores prerelease versions" do
289-
expect(latest_version).to eq(Gem::Version.new("7.0.0"))
289+
expect(latest_version).to eq(TestVersion.new("7.0.0"))
290290
end
291291

292292
context "when prereleases are allowed" do
@@ -295,7 +295,7 @@ def package_details
295295
end
296296

297297
it "selects the highest prerelease version" do
298-
expect(latest_version).to eq(Gem::Version.new("7.0.0"))
298+
expect(latest_version).to eq(TestVersion.new("7.0.0"))
299299
end
300300
end
301301
end
@@ -305,29 +305,29 @@ def package_details
305305
subject(:latest_version_with_no_unlock) { finder.latest_version_with_no_unlock }
306306

307307
context "when no constraints are present" do
308-
it { is_expected.to eq(Gem::Version.new("7.0.0")) }
308+
it { is_expected.to eq(TestVersion.new("7.0.0")) }
309309
end
310310

311311
context "with an exact version requirement" do
312312
let(:dependency_requirements) do
313313
[{ file: "Gemfile", requirement: "=6.0.2", groups: [], source: nil }]
314314
end
315315

316-
it { is_expected.to eq(Gem::Version.new("6.0.2")) }
316+
it { is_expected.to eq(TestVersion.new("6.0.2")) }
317317
end
318318

319319
context "with an upper bound restriction" do
320320
let(:dependency_requirements) do
321321
[{ file: "Gemfile", requirement: ">=6.0.0,<7.0.0", groups: [], source: nil }]
322322
end
323323

324-
it { is_expected.to eq(Gem::Version.new("6.1.4")) }
324+
it { is_expected.to eq(TestVersion.new("6.1.4")) }
325325
end
326326

327327
context "when ignored versions affect the latest selection" do
328328
let(:ignored_versions) { ["7.0.0"] }
329329

330-
it { is_expected.to eq(Gem::Version.new("6.1.4")) }
330+
it { is_expected.to eq(TestVersion.new("6.1.4")) }
331331
end
332332
end
333333

@@ -344,7 +344,7 @@ def package_details
344344
]
345345
end
346346

347-
it { is_expected.to eq(Gem::Version.new("6.0.2")) }
347+
it { is_expected.to eq(TestVersion.new("6.0.2")) }
348348

349349
context "when no non-vulnerable versions exist" do
350350
let(:available_releases) do
@@ -356,23 +356,26 @@ def package_details
356356
end
357357

358358
describe "version filtering" do
359-
subject(:filtered_versions) { finder.send(:filter_ignored_versions, versions) }
359+
subject(:filtered_versions) { finder.send(:filter_ignored_versions, releases) }
360360

361-
let(:versions) { [Gem::Version.new("7.0.0"), Gem::Version.new("6.1.4"), Gem::Version.new("6.0.2")] }
361+
let(:r1) { Dependabot::Package::PackageRelease.new(version: TestVersion.new("7.0.0")) }
362+
let(:r2) { Dependabot::Package::PackageRelease.new(version: TestVersion.new("6.1.4")) }
363+
let(:r3) { Dependabot::Package::PackageRelease.new(version: TestVersion.new("6.0.2")) }
364+
let(:releases) { [r1, r2, r3] }
362365

363366
context "when no ignored versions are specified" do
364367
let(:ignored_versions) { [] }
365368

366369
it "returns all versions" do
367-
expect(filtered_versions).to eq(versions)
370+
expect(filtered_versions).to eq(releases)
368371
end
369372
end
370373

371374
context "when ignoring a specific version" do
372375
let(:ignored_versions) { ["7.0.0"] }
373376

374377
it "removes the ignored version" do
375-
expect(filtered_versions).to eq([Gem::Version.new("6.1.4"), Gem::Version.new("6.0.2")])
378+
expect(filtered_versions).to eq([r2, r3])
376379
end
377380
end
378381

common/spec/spec_helper.rb

+5
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,8 @@ def initialize(constraint_string)
211211
super(requirements)
212212
end
213213
end
214+
215+
# Define an anonymous subclass of Dependabot::Requirement for testing purposes
216+
TestVersion = Class.new(Dependabot::Version) do
217+
# Initialize with a version string
218+
end

0 commit comments

Comments
 (0)