bundle-new/spec/update/gems_spec.rb

202 lines
4.8 KiB
Ruby
Raw Normal View History

2019-10-06 15:45:34 +00:00
require "spec_helper"
describe "bundle update" do
before :each do
build_repo2
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "activesupport"
gem "rack-obama"
G
end
describe "with no arguments" do
it "updates the entire bundle" do
update_repo2 do
build_gem "activesupport", "3.0"
end
bundle "update"
should_be_installed "rack 1.2", "rack-obama 1.0", "activesupport 3.0"
end
it "doesn't delete the Gemfile.lock file if something goes wrong" do
gemfile <<-G
source "file://#{gem_repo2}"
gem "activesupport"
gem "rack-obama"
exit!
G
bundle "update"
expect(bundled_app("Gemfile.lock")).to exist
end
end
describe "--quiet argument" do
it "shows UI messages without --quiet argument" do
bundle "update"
expect(out).to include("Fetching source")
end
it "does not show UI messages with --quiet argument" do
bundle "update --quiet"
expect(out).not_to include("Fetching source")
end
end
describe "with a top level dependency" do
it "unlocks all child dependencies that are unrelated to other locked dependencies" do
update_repo2 do
build_gem "activesupport", "3.0"
end
bundle "update rack-obama"
should_be_installed "rack 1.2", "rack-obama 1.0", "activesupport 2.3.5"
end
end
describe "with an unknown dependency" do
it "should inform the user" do
bundle "update halting-problem-solver", :expect_err=>true
expect(out).to include "Could not find gem 'halting-problem-solver'"
end
it "should suggest alternatives" do
bundle "update active-support", :expect_err=>true
expect(out).to include "Did you mean activesupport?"
end
end
describe "with a child dependency" do
it "should update the child dependency" do
update_repo2
bundle "update rack"
should_be_installed "rack 1.2"
end
end
describe "with --local option" do
it "doesn't hit repo2" do
FileUtils.rm_rf(gem_repo2)
bundle "update --local"
expect(out).not_to match(/Fetching source index/)
end
end
describe "with --group option" do
it "should update only specifed group gems" do
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "activesupport", :group => :development
gem "rack"
G
update_repo2 do
build_gem "activesupport", "3.0"
end
bundle "update --group development"
should_be_installed "activesupport 3.0"
should_not_be_installed "rack 1.2"
end
end
end
describe "bundle update in more complicated situations" do
before :each do
build_repo2
end
it "will eagerly unlock dependencies of a specified gem" do
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "thin"
gem "rack-obama"
G
update_repo2 do
build_gem "thin" , '2.0' do |s|
s.add_dependency "rack"
end
end
bundle "update thin"
should_be_installed "thin 2.0", "rack 1.2", "rack-obama 1.0"
end
end
describe "bundle update without a Gemfile.lock" do
it "should not explode" do
build_repo2
gemfile <<-G
source "file://#{gem_repo2}"
gem "rack", "1.0"
G
bundle "update"
should_be_installed "rack 1.0.0"
end
end
describe "bundle update when a gem depends on a newer version of bundler" do
before(:each) do
build_repo2 do
build_gem "rails", "3.0.1" do |s|
s.add_dependency "bundler", Bundler::VERSION.succ
end
end
gemfile <<-G
source "file://#{gem_repo2}"
gem "rails", "3.0.1"
G
end
it "should not explode" do
bundle "update"
expect(err).to be_empty
end
it "should explain that bundler conflicted" do
bundle "update"
expect(out).not_to match(/in snapshot/i)
expect(out).to match(/current Bundler version/i)
expect(out).to match(/perhaps you need to update bundler/i)
end
end
describe "bundle update" do
it "shows the previous version of the gem when updated from rubygems source" do
build_repo2
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "activesupport"
G
bundle "update"
expect(out).to include("Using activesupport 2.3.5")
update_repo2 do
build_gem "activesupport", "3.0"
end
bundle "update"
expect(out).to include("Installing activesupport 3.0 (was 2.3.5)")
end
it "shows error message when Gemfile.lock is not preset and gem is specified" do
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "activesupport"
G
bundle "update nonexisting", :exitstatus => true
expect(out).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