diff --git a/cargo/lib/dependabot/cargo/update_checker/requirements_updater.rb b/cargo/lib/dependabot/cargo/update_checker/requirements_updater.rb index b02a91eb70..2c08acd131 100644 --- a/cargo/lib/dependabot/cargo/update_checker/requirements_updater.rb +++ b/cargo/lib/dependabot/cargo/update_checker/requirements_updater.rb @@ -141,7 +141,11 @@ def update_range_requirements(string_reqs) raise UnfixableRequirement if req.start_with?(">") req.sub(VERSION_REGEX) do |old_version| - update_greatest_version(old_version, target_version) + if req.start_with?("<=") + target_version + else + update_greatest_version(old_version, target_version) + end end end.join(", ") rescue UnfixableRequirement diff --git a/cargo/spec/dependabot/cargo/update_checker/requirements_updater_spec.rb b/cargo/spec/dependabot/cargo/update_checker/requirements_updater_spec.rb index ad8c424cfd..267c17c038 100644 --- a/cargo/spec/dependabot/cargo/update_checker/requirements_updater_spec.rb +++ b/cargo/spec/dependabot/cargo/update_checker/requirements_updater_spec.rb @@ -168,20 +168,40 @@ end context "when there were multiple range specifications" do - let(:req_string) { "> 1.0.0, < 1.2.0" } + context "with `less than`" do + let(:req_string) { "> 1.0.0, < 1.2.0" } - its([:requirement]) { is_expected.to eq("> 1.0.0, < 1.6.0") } + its([:requirement]) { is_expected.to eq("> 1.0.0, < 1.6.0") } - context "when already valid" do - let(:req_string) { "> 1.0.0, < 1.7.0" } + context "when already valid" do + let(:req_string) { "> 1.0.0, < 1.7.0" } - its([:requirement]) { is_expected.to eq(req_string) } + its([:requirement]) { is_expected.to eq(req_string) } + end + + context "when including a pre-release" do + let(:req_string) { ">=1.2.0, <1.4.0-dev" } + + its([:requirement]) { is_expected.to eq(">=1.2.0, <1.6.0") } + end end - context "when including a pre-release" do - let(:req_string) { ">=1.2.0, <1.4.0-dev" } + context "with `less than equal`" do + let(:req_string) { "> 1.0.0, <= 1.2.0" } - its([:requirement]) { is_expected.to eq(">=1.2.0, <1.6.0") } + its([:requirement]) { is_expected.to eq("> 1.0.0, <= 1.5.0") } + + context "when already valid" do + let(:req_string) { "> 1.0.0, <= 1.7.0" } + + its([:requirement]) { is_expected.to eq(req_string) } + end + + context "when including a pre-release" do + let(:req_string) { ">=1.2.0, <=1.4.0-dev" } + + its([:requirement]) { is_expected.to eq(">=1.2.0, <=1.5.0") } + end end end