diff options
Diffstat (limited to 'spec/bundler/commands/update_spec.rb')
-rw-r--r-- | spec/bundler/commands/update_spec.rb | 295 |
1 files changed, 221 insertions, 74 deletions
diff --git a/spec/bundler/commands/update_spec.rb b/spec/bundler/commands/update_spec.rb index 0f17d931a3..51a0b925a3 100644 --- a/spec/bundler/commands/update_spec.rb +++ b/spec/bundler/commands/update_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true RSpec.describe "bundle update" do - before :each do - build_repo2 + describe "with no arguments" do + before do + build_repo2 - install_gemfile <<-G - source "#{file_uri_for(gem_repo2)}" - gem "activesupport" - gem "rack-obama" - gem "platform_specific" - G - end + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end - describe "with no arguments", :bundler => "< 3" do it "updates the entire bundle" do update_repo2 do build_gem "rack", "1.2" do |s| @@ -39,7 +39,18 @@ RSpec.describe "bundle update" do end end - describe "with --all", :bundler => "3" do + describe "with --all" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "updates the entire bundle" do update_repo2 do build_gem "rack", "1.2" do |s| @@ -55,6 +66,8 @@ RSpec.describe "bundle update" do end it "doesn't delete the Gemfile.lock file if something goes wrong" do + install_gemfile "" + gemfile <<-G source "#{file_uri_for(gem_repo2)}" gem "activesupport" @@ -102,6 +115,17 @@ RSpec.describe "bundle update" do end describe "--quiet argument" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "hides UI messages" do bundle "update --quiet" expect(out).not_to include("Bundle updated!") @@ -109,6 +133,17 @@ RSpec.describe "bundle update" do end describe "with a top level dependency" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "unlocks all child dependencies that are unrelated to other locked dependencies" do update_repo2 do build_gem "rack", "1.2" do |s| @@ -124,6 +159,17 @@ RSpec.describe "bundle update" do end describe "with an unknown dependency" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "should inform the user" do bundle "update halting-problem-solver", :raise_on_error => false expect(err).to include "Could not find gem 'halting-problem-solver'" @@ -135,6 +181,17 @@ RSpec.describe "bundle update" do end describe "with a child dependency" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "should update the child dependency" do update_repo2 do build_gem "rack", "1.2" do |s| @@ -212,6 +269,17 @@ RSpec.describe "bundle update" do end describe "with --local option" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "doesn't hit repo2" do FileUtils.rm_rf(gem_repo2) @@ -221,6 +289,10 @@ RSpec.describe "bundle update" do end describe "with --group option" do + before do + build_repo2 + end + it "should update only specified group gems" do install_gemfile <<-G source "#{file_uri_for(gem_repo2)}" @@ -257,7 +329,7 @@ RSpec.describe "bundle update" do end context "when there is a source with the same name as a gem in a group" do - before :each do + before do build_git "foo", :path => lib_path("activesupport") install_gemfile <<-G source "#{file_uri_for(gem_repo2)}" @@ -299,6 +371,17 @@ RSpec.describe "bundle update" do end describe "in a frozen bundle" do + before do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + gem "rack-obama" + gem "platform_specific" + G + end + it "should fail loudly", :bundler => "< 3" do bundle "install --deployment" bundle "update", :all => true, :raise_on_error => false @@ -324,6 +407,10 @@ RSpec.describe "bundle update" do end describe "with --source option" do + before do + build_repo2 + end + it "should not update gems not included in the source that happen to have the same name", :bundler => "< 3" do install_gemfile <<-G source "#{file_uri_for(gem_repo2)}" @@ -449,10 +536,130 @@ RSpec.describe "bundle update" do expect(the_bundle).to include_gems "harry 1.0", "fred 1.0", "george 1.0" end end + + it "shows the previous version of the gem when updated from rubygems source", :bundler => "< 3" do + build_repo2 + + install_gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + G + + bundle "update", :all => true + expect(out).to include("Using activesupport 2.3.5") + + update_repo2 do + build_gem "activesupport", "3.0" + end + + bundle "update", :all => true + expect(out).to include("Installing activesupport 3.0 (was 2.3.5)") + end + + context "with suppress_install_using_messages set" do + before { bundle "config set suppress_install_using_messages true" } + + it "only prints `Using` for versions that have changed" do + build_repo4 do + build_gem "bar" + build_gem "foo" + end + + install_gemfile <<-G + source "#{file_uri_for(gem_repo4)}" + gem "bar" + gem "foo" + G + + bundle "update", :all => true + expect(out).to match(/Resolving dependencies\.\.\.\.*\nBundle updated!/) + + update_repo4 do + build_gem "foo", "2.0" + end + + bundle "update", :all => true + out.sub!("Removing foo (1.0)\n", "") + expect(out).to match(/Resolving dependencies\.\.\.\.*\nFetching foo 2\.0 \(was 1\.0\)\nInstalling foo 2\.0 \(was 1\.0\)\nBundle updated/) + end + end + + it "shows error message when Gemfile.lock is not preset and gem is specified" do + gemfile <<-G + source "#{file_uri_for(gem_repo2)}" + gem "activesupport" + G + + bundle "update nonexisting", :raise_on_error => false + expect(err).to include("This Bundle hasn't been installed yet. Run `bundle install` to update and install the bundled gems.") + expect(exitstatus).to eq(22) + end + + context "with multiple, duplicated sources, with lockfile in old format", :bundler => "< 3" do + before do + build_repo2 do + build_gem "dotenv", "2.7.6" + + build_gem "oj", "3.11.3" + build_gem "oj", "3.11.5" + + build_gem "vcr", "6.0.0" + end + + build_repo gem_repo3 do + build_gem "pkg-gem-flowbyte-with-dep", "1.0.0" do |s| + s.add_dependency "oj" + end + end + + gemfile <<~G + source "https://gem.repo2" + + gem "dotenv" + + source "https://gem.repo3" do + gem 'pkg-gem-flowbyte-with-dep' + end + + gem "vcr",source: "https://gem.repo2" + G + + lockfile <<~L + GEM + remote: https://gem.repo2/ + remote: https://gem.repo3/ + specs: + dotenv (2.7.6) + oj (3.11.3) + pkg-gem-flowbyte-with-dep (1.0.0) + oj + vcr (6.0.0) + + PLATFORMS + #{specific_local_platform} + + DEPENDENCIES + dotenv + pkg-gem-flowbyte-with-dep! + vcr! + + BUNDLED WITH + #{Bundler::VERSION} + L + end + + it "works" do + bundle :install, :artifice => :compact_index + bundle "update oj", :artifice => :compact_index + + expect(out).to include("Bundle updated!") + expect(the_bundle).to include_gems "oj 3.11.5" + end + end end RSpec.describe "bundle update in more complicated situations" do - before :each do + before do build_repo2 end @@ -640,7 +847,7 @@ RSpec.describe "bundle update without a Gemfile.lock" do end RSpec.describe "bundle update when a gem depends on a newer version of bundler" do - before(:each) do + before do build_repo2 do build_gem "rails", "3.0.1" do |s| s.add_dependency "bundler", Bundler::VERSION.succ @@ -663,66 +870,6 @@ RSpec.describe "bundle update when a gem depends on a newer version of bundler" end end -RSpec.describe "bundle update" do - it "shows the previous version of the gem when updated from rubygems source", :bundler => "< 3" do - build_repo2 - - install_gemfile <<-G - source "#{file_uri_for(gem_repo2)}" - gem "activesupport" - G - - bundle "update", :all => true - expect(out).to include("Using activesupport 2.3.5") - - update_repo2 do - build_gem "activesupport", "3.0" - end - - bundle "update", :all => true - expect(out).to include("Installing activesupport 3.0 (was 2.3.5)") - end - - context "with suppress_install_using_messages set" do - before { bundle "config set suppress_install_using_messages true" } - - it "only prints `Using` for versions that have changed" do - build_repo4 do - build_gem "bar" - build_gem "foo" - end - - install_gemfile <<-G - source "#{file_uri_for(gem_repo4)}" - gem "bar" - gem "foo" - G - - bundle "update", :all => true - expect(out).to match(/Resolving dependencies\.\.\.\.*\nBundle updated!/) - - update_repo4 do - build_gem "foo", "2.0" - end - - bundle "update", :all => true - out.sub!("Removing foo (1.0)\n", "") - expect(out).to match(/Resolving dependencies\.\.\.\.*\nFetching foo 2\.0 \(was 1\.0\)\nInstalling foo 2\.0 \(was 1\.0\)\nBundle updated/) - end - end - - it "shows error message when Gemfile.lock is not preset and gem is specified" do - gemfile <<-G - source "#{file_uri_for(gem_repo2)}" - gem "activesupport" - G - - bundle "update nonexisting", :raise_on_error => false - expect(err).to include("This Bundle hasn't been installed yet. Run `bundle install` to update and install the bundled gems.") - expect(exitstatus).to eq(22) - end -end - RSpec.describe "bundle update --ruby" do before do install_gemfile <<-G |