202 lines
4.8 KiB
Ruby
202 lines
4.8 KiB
Ruby
|
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
|