aboutsummaryrefslogtreecommitdiffstats
path: root/spec/bundler/commands/outdated_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/bundler/commands/outdated_spec.rb')
-rw-r--r--spec/bundler/commands/outdated_spec.rb755
1 files changed, 0 insertions, 755 deletions
diff --git a/spec/bundler/commands/outdated_spec.rb b/spec/bundler/commands/outdated_spec.rb
deleted file mode 100644
index f0ad136c98..0000000000
--- a/spec/bundler/commands/outdated_spec.rb
+++ /dev/null
@@ -1,755 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe "bundle outdated" do
- before :each do
- build_repo2 do
- build_git "foo", :path => lib_path("foo")
- build_git "zebra", :path => lib_path("zebra")
- end
-
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "zebra", :git => "#{lib_path("zebra")}"
- gem "foo", :git => "#{lib_path("foo")}"
- gem "activesupport", "2.3.5"
- gem "weakling", "~> 0.0.1"
- gem "duradura", '7.0'
- gem "terranova", '8'
- G
- end
-
- describe "with no arguments" do
- it "returns a sorted list of outdated gems" do
- update_repo2 do
- build_gem "activesupport", "3.0"
- build_gem "weakling", "0.2"
- update_git "foo", :path => lib_path("foo")
- update_git "zebra", :path => lib_path("zebra")
- end
-
- bundle "outdated"
-
- expect(out).to include("activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5)")
- expect(out).to include("weakling (newest 0.2, installed 0.0.3, requested ~> 0.0.1)")
- expect(out).to include("foo (newest 1.0")
-
- # Gem names are one per-line, between "*" and their parenthesized version.
- gem_list = out.split("\n").map {|g| g[/\* (.*) \(/, 1] }.compact
- expect(gem_list).to eq(gem_list.sort)
- end
-
- it "returns non zero exit status if outdated gems present" do
- update_repo2 do
- build_gem "activesupport", "3.0"
- update_git "foo", :path => lib_path("foo")
- end
-
- bundle "outdated"
-
- expect(exitstatus).to_not be_zero if exitstatus
- end
-
- it "returns success exit status if no outdated gems present" do
- bundle "outdated"
-
- expect(exitstatus).to be_zero if exitstatus
- end
-
- it "adds gem group to dependency output when repo is updated" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
-
- group :development, :test do
- gem 'activesupport', '2.3.5'
- end
- G
-
- update_repo2 { build_gem "activesupport", "3.0" }
-
- bundle "outdated --verbose"
- expect(out).to include("activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5) in groups \"development, test\"")
- end
- end
-
- describe "with --group option" do
- def test_group_option(group = nil, gems_list_size = 1)
- install_gemfile <<-G
- source "file://#{gem_repo2}"
-
- gem "weakling", "~> 0.0.1"
- gem "terranova", '8'
- group :development, :test do
- gem "duradura", '7.0'
- gem 'activesupport', '2.3.5'
- end
- G
-
- update_repo2 do
- build_gem "activesupport", "3.0"
- build_gem "terranova", "9"
- build_gem "duradura", "8.0"
- end
-
- bundle "outdated --group #{group}"
-
- # Gem names are one per-line, between "*" and their parenthesized version.
- gem_list = out.split("\n").map {|g| g[/\* (.*) \(/, 1] }.compact
- expect(gem_list).to eq(gem_list.sort)
- expect(gem_list.size).to eq gems_list_size
- end
-
- it "not outdated gems" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
-
- gem "weakling", "~> 0.0.1"
- gem "terranova", '8'
- group :development, :test do
- gem 'activesupport', '2.3.5'
- gem "duradura", '7.0'
- end
- G
-
- bundle "outdated --group"
- expect(out).to include("Bundle up to date!")
- end
-
- it "returns a sorted list of outdated gems from one group => 'default'" do
- test_group_option("default")
-
- expect(out).to include("===== Group default =====")
- expect(out).to include("terranova (")
-
- expect(out).not_to include("===== Group development, test =====")
- expect(out).not_to include("activesupport")
- expect(out).not_to include("duradura")
- end
-
- it "returns a sorted list of outdated gems from one group => 'development'" do
- test_group_option("development", 2)
-
- expect(out).not_to include("===== Group default =====")
- expect(out).not_to include("terranova (")
-
- expect(out).to include("===== Group development, test =====")
- expect(out).to include("activesupport")
- expect(out).to include("duradura")
- end
- end
-
- describe "with --groups option" do
- it "not outdated gems" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
-
- gem "weakling", "~> 0.0.1"
- gem "terranova", '8'
- group :development, :test do
- gem 'activesupport', '2.3.5'
- gem "duradura", '7.0'
- end
- G
-
- bundle "outdated --groups"
- expect(out).to include("Bundle up to date!")
- end
-
- it "returns a sorted list of outdated gems by groups" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
-
- gem "weakling", "~> 0.0.1"
- gem "terranova", '8'
- group :development, :test do
- gem 'activesupport', '2.3.5'
- gem "duradura", '7.0'
- end
- G
-
- update_repo2 do
- build_gem "activesupport", "3.0"
- build_gem "terranova", "9"
- build_gem "duradura", "8.0"
- end
-
- bundle "outdated --groups"
- expect(out).to include("===== Group default =====")
- expect(out).to include("terranova (newest 9, installed 8, requested = 8)")
- expect(out).to include("===== Group development, test =====")
- expect(out).to include("activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5)")
- expect(out).to include("duradura (newest 8.0, installed 7.0, requested = 7.0)")
-
- expect(out).not_to include("weakling (")
-
- # TODO: check gems order inside the group
- end
- end
-
- describe "with --local option" do
- it "uses local cache to return a list of outdated gems" do
- update_repo2 do
- build_gem "activesupport", "2.3.4"
- end
-
- bundle! "config clean false"
-
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "activesupport", "2.3.4"
- G
-
- bundle "outdated --local"
-
- expect(out).to include("activesupport (newest 2.3.5, installed 2.3.4, requested = 2.3.4)")
- end
-
- it "doesn't hit repo2" do
- FileUtils.rm_rf(gem_repo2)
-
- bundle "outdated --local"
- expect(out).not_to match(/Fetching (gem|version|dependency) metadata from/)
- end
- end
-
- shared_examples_for "a minimal output is desired" do
- context "and gems are outdated" do
- before do
- update_repo2 do
- build_gem "activesupport", "3.0"
- build_gem "weakling", "0.2"
- end
- end
-
- it "outputs a sorted list of outdated gems with a more minimal format" do
- minimal_output = "activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5)\n" \
- "weakling (newest 0.2, installed 0.0.3, requested ~> 0.0.1)"
- subject
- expect(out).to eq(minimal_output)
- end
- end
-
- context "and no gems are outdated" do
- it "has empty output" do
- subject
- expect(out).to eq("")
- end
- end
- end
-
- describe "with --parseable option" do
- subject { bundle "outdated --parseable" }
-
- it_behaves_like "a minimal output is desired"
- end
-
- describe "with aliased --porcelain option" do
- subject { bundle "outdated --porcelain" }
-
- it_behaves_like "a minimal output is desired"
- end
-
- describe "with specified gems" do
- it "returns list of outdated gems" do
- update_repo2 do
- build_gem "activesupport", "3.0"
- update_git "foo", :path => lib_path("foo")
- end
-
- bundle "outdated foo"
- expect(out).not_to include("activesupport (newest")
- expect(out).to include("foo (newest 1.0")
- end
- end
-
- describe "pre-release gems" do
- context "without the --pre option" do
- it "ignores pre-release versions" do
- update_repo2 do
- build_gem "activesupport", "3.0.0.beta"
- end
-
- bundle "outdated"
- expect(out).not_to include("activesupport (3.0.0.beta > 2.3.5)")
- end
- end
-
- context "with the --pre option" do
- it "includes pre-release versions" do
- update_repo2 do
- build_gem "activesupport", "3.0.0.beta"
- end
-
- bundle "outdated --pre"
- expect(out).to include("activesupport (newest 3.0.0.beta, installed 2.3.5, requested = 2.3.5)")
- end
- end
-
- context "when current gem is a pre-release" do
- it "includes the gem" do
- update_repo2 do
- build_gem "activesupport", "3.0.0.beta.1"
- build_gem "activesupport", "3.0.0.beta.2"
- end
-
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "activesupport", "3.0.0.beta.1"
- G
-
- bundle "outdated"
- expect(out).to include("(newest 3.0.0.beta.2, installed 3.0.0.beta.1, requested = 3.0.0.beta.1)")
- end
- end
- end
-
- describe "with --strict option" do
- it "only reports gems that have a newer version that matches the specified dependency version requirements" do
- update_repo2 do
- build_gem "activesupport", "3.0"
- build_gem "weakling", "0.0.5"
- end
-
- bundle "outdated --strict"
-
- expect(out).to_not include("activesupport (newest")
- expect(out).to include("(newest 0.0.5, installed 0.0.3, requested ~> 0.0.1)")
- end
-
- it "only reports gem dependencies when they can actually be updated" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "rack_middleware", "1.0"
- G
-
- bundle "outdated --strict"
-
- expect(out).to_not include("rack (1.2")
- end
-
- describe "and filter options" do
- it "only reports gems that match requirement and patch filter level" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "activesupport", "~> 2.3"
- gem "weakling", ">= 0.0.1"
- G
-
- update_repo2 do
- build_gem "activesupport", %w[2.4.0 3.0.0]
- build_gem "weakling", "0.0.5"
- end
-
- bundle "outdated --strict --filter-patch"
-
- expect(out).to_not include("activesupport (newest")
- expect(out).to include("(newest 0.0.5, installed 0.0.3")
- end
-
- it "only reports gems that match requirement and minor filter level" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "activesupport", "~> 2.3"
- gem "weakling", ">= 0.0.1"
- G
-
- update_repo2 do
- build_gem "activesupport", %w[2.3.9]
- build_gem "weakling", "0.1.5"
- end
-
- bundle "outdated --strict --filter-minor"
-
- expect(out).to_not include("activesupport (newest")
- expect(out).to include("(newest 0.1.5, installed 0.0.3")
- end
-
- it "only reports gems that match requirement and major filter level" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "activesupport", "~> 2.3"
- gem "weakling", ">= 0.0.1"
- G
-
- update_repo2 do
- build_gem "activesupport", %w[2.4.0 2.5.0]
- build_gem "weakling", "1.1.5"
- end
-
- bundle "outdated --strict --filter-major"
-
- expect(out).to_not include("activesupport (newest")
- expect(out).to include("(newest 1.1.5, installed 0.0.3")
- end
- end
- end
-
- describe "with invalid gem name" do
- it "returns could not find gem name" do
- bundle "outdated invalid_gem_name"
- expect(out).to include("Could not find gem 'invalid_gem_name'.")
- end
-
- it "returns non-zero exit code" do
- bundle "outdated invalid_gem_name"
- expect(exitstatus).to_not be_zero if exitstatus
- end
- end
-
- it "performs an automatic bundle install" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- gem "rack", "0.9.1"
- gem "foo"
- G
-
- bundle "config auto_install 1"
- bundle :outdated
- expect(out).to include("Installing foo 1.0")
- end
-
- context "after bundle install --deployment", :bundler => "< 2" do
- before do
- install_gemfile <<-G, forgotten_command_line_options(:deployment => true)
- source "file://#{gem_repo2}"
-
- gem "rack"
- gem "foo"
- G
- end
-
- it "outputs a helpful message about being in deployment mode" do
- update_repo2 { build_gem "activesupport", "3.0" }
-
- bundle "outdated"
- expect(last_command).to be_failure
- expect(out).to include("You are trying to check outdated gems in deployment mode.")
- expect(out).to include("Run `bundle outdated` elsewhere.")
- expect(out).to include("If this is a development machine, remove the ")
- expect(out).to include("Gemfile freeze\nby running `bundle install --no-deployment`.")
- end
- end
-
- context "after bundle config deployment true" do
- before do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
-
- gem "rack"
- gem "foo"
- G
- bundle! "config deployment true"
- end
-
- it "outputs a helpful message about being in deployment mode" do
- update_repo2 { build_gem "activesupport", "3.0" }
-
- bundle "outdated"
- expect(last_command).to be_failure
- expect(out).to include("You are trying to check outdated gems in deployment mode.")
- expect(out).to include("Run `bundle outdated` elsewhere.")
- expect(out).to include("If this is a development machine, remove the ")
- expect(out).to include("Gemfile freeze\nby running `bundle config --delete deployment`.")
- end
- end
-
- context "update available for a gem on a different platform" do
- before do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "laduradura", '= 5.15.2'
- G
- end
-
- it "reports that no updates are available" do
- bundle "outdated"
- expect(out).to include("Bundle up to date!")
- end
- end
-
- context "update available for a gem on the same platform while multiple platforms used for gem" do
- it "reports that updates are available if the Ruby platform is used" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "laduradura", '= 5.15.2', :platforms => [:ruby, :jruby]
- G
-
- bundle "outdated"
- expect(out).to include("Bundle up to date!")
- end
-
- it "reports that updates are available if the JRuby platform is used" do
- simulate_ruby_engine "jruby", "1.6.7" do
- simulate_platform "jruby" do
- install_gemfile <<-G
- source "file://#{gem_repo2}"
- gem "laduradura", '= 5.15.2', :platforms => [:ruby, :jruby]
- G
-
- bundle "outdated"
- expect(out).to include("Outdated gems included in the bundle:")
- expect(out).to include("laduradura (newest 5.15.3, installed 5.15.2, requested = 5.15.2)")
- end
- end
- end
- end
-
- shared_examples_for "version update is detected" do
- it "reports that a gem has a newer version" do
- subject
- expect(out).to include("Outdated gems included in the bundle:")
- expect(out).to include("activesupport (newest")
- expect(out).to_not include("ERROR REPORT TEMPLATE")
- end
- end
-
- shared_examples_for "major version updates are detected" do
- before do
- update_repo2 do
- build_gem "activesupport", "3.3.5"
- build_gem "weakling", "0.8.0"
- end
- end
-
- it_behaves_like "version update is detected"
- end
-
- context "when on a new machine" do
- before do
- simulate_new_machine
-
- update_git "foo", :path => lib_path("foo")
- update_repo2 do
- build_gem "activesupport", "3.3.5"
- build_gem "weakling", "0.8.0"
- end
- end
-
- subject { bundle "outdated" }
- it_behaves_like "version update is detected"
- end
-
- shared_examples_for "minor version updates are detected" do
- before do
- update_repo2 do
- build_gem "activesupport", "2.7.5"
- build_gem "weakling", "2.0.1"
- end
- end
-
- it_behaves_like "version update is detected"
- end
-
- shared_examples_for "patch version updates are detected" do
- before do
- update_repo2 do
- build_gem "activesupport", "2.3.7"
- build_gem "weakling", "0.3.1"
- end
- end
-
- it_behaves_like "version update is detected"
- end
-
- shared_examples_for "no version updates are detected" do
- it "does not detect any version updates" do
- subject
- expect(out).to include("updates to display.")
- expect(out).to_not include("ERROR REPORT TEMPLATE")
- expect(out).to_not include("activesupport (newest")
- expect(out).to_not include("weakling (newest")
- end
- end
-
- shared_examples_for "major version is ignored" do
- before do
- update_repo2 do
- build_gem "activesupport", "3.3.5"
- build_gem "weakling", "1.0.1"
- end
- end
-
- it_behaves_like "no version updates are detected"
- end
-
- shared_examples_for "minor version is ignored" do
- before do
- update_repo2 do
- build_gem "activesupport", "2.4.5"
- build_gem "weakling", "0.3.1"
- end
- end
-
- it_behaves_like "no version updates are detected"
- end
-
- shared_examples_for "patch version is ignored" do
- before do
- update_repo2 do
- build_gem "activesupport", "2.3.6"
- build_gem "weakling", "0.0.4"
- end
- end
-
- it_behaves_like "no version updates are detected"
- end
-
- describe "with --filter-major option" do
- subject { bundle "outdated --filter-major" }
-
- it_behaves_like "major version updates are detected"
- it_behaves_like "minor version is ignored"
- it_behaves_like "patch version is ignored"
- end
-
- describe "with --filter-minor option" do
- subject { bundle "outdated --filter-minor" }
-
- it_behaves_like "minor version updates are detected"
- it_behaves_like "major version is ignored"
- it_behaves_like "patch version is ignored"
- end
-
- describe "with --filter-patch option" do
- subject { bundle "outdated --filter-patch" }
-
- it_behaves_like "patch version updates are detected"
- it_behaves_like "major version is ignored"
- it_behaves_like "minor version is ignored"
- end
-
- describe "with --filter-minor --filter-patch options" do
- subject { bundle "outdated --filter-minor --filter-patch" }
-
- it_behaves_like "minor version updates are detected"
- it_behaves_like "patch version updates are detected"
- it_behaves_like "major version is ignored"
- end
-
- describe "with --filter-major --filter-minor options" do
- subject { bundle "outdated --filter-major --filter-minor" }
-
- it_behaves_like "major version updates are detected"
- it_behaves_like "minor version updates are detected"
- it_behaves_like "patch version is ignored"
- end
-
- describe "with --filter-major --filter-patch options" do
- subject { bundle "outdated --filter-major --filter-patch" }
-
- it_behaves_like "major version updates are detected"
- it_behaves_like "patch version updates are detected"
- it_behaves_like "minor version is ignored"
- end
-
- describe "with --filter-major --filter-minor --filter-patch options" do
- subject { bundle "outdated --filter-major --filter-minor --filter-patch" }
-
- it_behaves_like "major version updates are detected"
- it_behaves_like "minor version updates are detected"
- it_behaves_like "patch version updates are detected"
- end
-
- context "conservative updates" do
- context "without update-strict" do
- before do
- build_repo4 do
- build_gem "patch", %w[1.0.0 1.0.1]
- build_gem "minor", %w[1.0.0 1.0.1 1.1.0]
- build_gem "major", %w[1.0.0 1.0.1 1.1.0 2.0.0]
- end
-
- # establish a lockfile set to 1.0.0
- install_gemfile <<-G
- source "file://#{gem_repo4}"
- gem 'patch', '1.0.0'
- gem 'minor', '1.0.0'
- gem 'major', '1.0.0'
- G
-
- # remove 1.4.3 requirement and bar altogether
- # to setup update specs below
- gemfile <<-G
- source "file://#{gem_repo4}"
- gem 'patch'
- gem 'minor'
- gem 'major'
- G
- end
-
- it "shows nothing when patching and filtering to minor" do
- bundle "outdated --patch --filter-minor"
-
- expect(out).to include("No minor updates to display.")
- expect(out).not_to include("patch (newest")
- expect(out).not_to include("minor (newest")
- expect(out).not_to include("major (newest")
- end
-
- it "shows all gems when patching and filtering to patch" do
- bundle "outdated --patch --filter-patch"
-
- expect(out).to include("patch (newest 1.0.1")
- expect(out).to include("minor (newest 1.0.1")
- expect(out).to include("major (newest 1.0.1")
- end
-
- it "shows minor and major when updating to minor and filtering to patch and minor" do
- bundle "outdated --minor --filter-minor"
-
- expect(out).not_to include("patch (newest")
- expect(out).to include("minor (newest 1.1.0")
- expect(out).to include("major (newest 1.1.0")
- end
-
- it "shows minor when updating to major and filtering to minor with parseable" do
- bundle "outdated --major --filter-minor --parseable"
-
- expect(out).not_to include("patch (newest")
- expect(out).to include("minor (newest")
- expect(out).not_to include("major (newest")
- end
- end
-
- context "with update-strict" do
- before do
- build_repo4 do
- build_gem "foo", %w[1.4.3 1.4.4] do |s|
- s.add_dependency "bar", "~> 2.0"
- end
- build_gem "foo", %w[1.4.5 1.5.0] do |s|
- s.add_dependency "bar", "~> 2.1"
- end
- build_gem "foo", %w[1.5.1] do |s|
- s.add_dependency "bar", "~> 3.0"
- end
- build_gem "bar", %w[2.0.3 2.0.4 2.0.5 2.1.0 2.1.1 3.0.0]
- build_gem "qux", %w[1.0.0 1.1.0 2.0.0]
- end
-
- # establish a lockfile set to 1.4.3
- install_gemfile <<-G
- source "file://#{gem_repo4}"
- gem 'foo', '1.4.3'
- gem 'bar', '2.0.3'
- gem 'qux', '1.0.0'
- G
-
- # remove 1.4.3 requirement and bar altogether
- # to setup update specs below
- gemfile <<-G
- source "file://#{gem_repo4}"
- gem 'foo'
- gem 'qux'
- G
- end
-
- it "shows gems with update-strict updating to patch and filtering to patch" do
- bundle "outdated --patch --update-strict --filter-patch"
-
- expect(out).to include("foo (newest 1.4.4")
- expect(out).to include("bar (newest 2.0.5")
- expect(out).not_to include("qux (newest")
- end
- end
- end
-end