mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
283 lines
8.5 KiB
Ruby
283 lines
8.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "bundler/cli"
|
|
require "json"
|
|
|
|
RSpec.describe "bundle executable" do
|
|
it "returns non-zero exit status when passed unrecognized options" do
|
|
bundle "--invalid_argument", raise_on_error: false
|
|
expect(exitstatus).to_not be_zero
|
|
end
|
|
|
|
it "returns non-zero exit status when passed unrecognized task" do
|
|
bundle "unrecognized-task", raise_on_error: false
|
|
expect(exitstatus).to_not be_zero
|
|
end
|
|
|
|
it "looks for a binary and executes it if it's named bundler-<task>" do
|
|
skip "Could not find command testtasks, probably because not a windows friendly executable" if Gem.win_platform?
|
|
|
|
File.open(tmp("bundler-testtasks"), "w", 0o755) do |f|
|
|
ruby = ENV["RUBY"] || "/usr/bin/env ruby"
|
|
f.puts "#!#{ruby}\nputs 'Hello, world'\n"
|
|
end
|
|
|
|
with_path_added(tmp) do
|
|
bundle "testtasks"
|
|
end
|
|
|
|
expect(out).to eq("Hello, world")
|
|
end
|
|
|
|
describe "aliases" do
|
|
it "aliases e to exec" do
|
|
bundle "e --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-exec")
|
|
end
|
|
|
|
it "aliases ex to exec" do
|
|
bundle "ex --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-exec")
|
|
end
|
|
|
|
it "aliases exe to exec" do
|
|
bundle "exe --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-exec")
|
|
end
|
|
|
|
it "aliases c to check" do
|
|
bundle "c --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-check")
|
|
end
|
|
|
|
it "aliases i to install" do
|
|
bundle "i --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-install")
|
|
end
|
|
|
|
it "aliases ls to list" do
|
|
bundle "ls --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-list")
|
|
end
|
|
|
|
it "aliases package to cache" do
|
|
bundle "package --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-cache")
|
|
end
|
|
|
|
it "aliases pack to cache" do
|
|
bundle "pack --help"
|
|
|
|
expect(out_with_macos_man_workaround).to include("bundle-cache")
|
|
end
|
|
|
|
private
|
|
|
|
# Some `man` (e.g., on macOS) always highlights the output even to
|
|
# non-tty.
|
|
def out_with_macos_man_workaround
|
|
out.gsub(/.[\b]/, "")
|
|
end
|
|
end
|
|
|
|
context "with no arguments" do
|
|
it "prints a concise help message", bundler: "3" do
|
|
bundle ""
|
|
expect(err).to be_empty
|
|
expect(out).to include("Bundler version #{Bundler::VERSION}").
|
|
and include("\n\nBundler commands:\n\n").
|
|
and include("\n\n Primary commands:\n").
|
|
and include("\n\n Utilities:\n").
|
|
and include("\n\nOptions:\n")
|
|
end
|
|
end
|
|
|
|
context "when ENV['BUNDLE_GEMFILE'] is set to an empty string" do
|
|
it "ignores it" do
|
|
gemfile bundled_app_gemfile, <<-G
|
|
source "#{file_uri_for(gem_repo1)}"
|
|
gem 'rack'
|
|
G
|
|
|
|
bundle :install, env: { "BUNDLE_GEMFILE" => "" }
|
|
|
|
expect(the_bundle).to include_gems "rack 1.0.0"
|
|
end
|
|
end
|
|
|
|
context "with --verbose" do
|
|
it "prints the running command" do
|
|
gemfile "source \"#{file_uri_for(gem_repo1)}\""
|
|
bundle "info bundler", verbose: true
|
|
expect(out).to start_with("Running `bundle info bundler --verbose` with bundler #{Bundler::VERSION}")
|
|
end
|
|
|
|
it "doesn't print defaults" do
|
|
install_gemfile "source \"#{file_uri_for(gem_repo1)}\"", verbose: true
|
|
expect(out).to start_with("Running `bundle install --verbose` with bundler #{Bundler::VERSION}")
|
|
end
|
|
|
|
it "doesn't print defaults" do
|
|
install_gemfile "source \"#{file_uri_for(gem_repo1)}\"", verbose: true
|
|
expect(out).to start_with("Running `bundle install --verbose` with bundler #{Bundler::VERSION}")
|
|
end
|
|
end
|
|
|
|
describe "bundle outdated" do
|
|
let(:run_command) do
|
|
bundle "install"
|
|
|
|
bundle "outdated #{flags}", raise_on_error: false
|
|
end
|
|
|
|
before do
|
|
gemfile <<-G
|
|
source "#{file_uri_for(gem_repo1)}"
|
|
gem "rack", '0.9.1'
|
|
G
|
|
end
|
|
|
|
context "with --groups flag" do
|
|
let(:flags) { "--groups" }
|
|
|
|
it "prints a message when there are outdated gems" do
|
|
run_command
|
|
|
|
expect(out).to include("Gem Current Latest Requested Groups")
|
|
expect(out).to include("rack 0.9.1 1.0.0 = 0.9.1 default")
|
|
end
|
|
end
|
|
|
|
context "with --json" do
|
|
let(:flags) { "--json" }
|
|
|
|
it "prints json output data when there are outdated gems" do
|
|
run_command
|
|
out_data = JSON.parse(out)
|
|
expect(out_data.keys).to contain_exactly("outdated_count", "outdated_gems")
|
|
expect(out_data["outdated_count"]).to eq(1)
|
|
expect(out_data["outdated_gems"].length).to eq(1)
|
|
|
|
gem_data = out_data["outdated_gems"].first
|
|
expect(gem_data).to include({
|
|
"current_spec" => hash_including("name" => "rack", "version" => "0.9.1"),
|
|
"active_spec" => hash_including("name" => "rack", "version" => "1.0.0"),
|
|
"dependency" => "rack (= 0.9.1)",
|
|
"groups" => ["default"],
|
|
})
|
|
end
|
|
end
|
|
|
|
context "with --parseable" do
|
|
let(:flags) { "--parseable" }
|
|
|
|
it "prints a message when there are outdated gems" do
|
|
run_command
|
|
|
|
expect(out).to include("rack (newest 1.0.0, installed 0.9.1, requested = 0.9.1)")
|
|
end
|
|
end
|
|
|
|
context "with --groups and --parseable" do
|
|
let(:flags) { "--groups --parseable" }
|
|
|
|
it "prints a simplified message when there are outdated gems" do
|
|
run_command
|
|
|
|
expect(out).to include("rack (newest 1.0.0, installed 0.9.1, requested = 0.9.1)")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "printing the outdated warning" do
|
|
shared_examples_for "no warning" do
|
|
it "prints no warning" do
|
|
bundle "fail", env: { "BUNDLER_VERSION" => bundler_version }, raise_on_error: false
|
|
expect(last_command.stdboth).to eq("Could not find command \"fail\".")
|
|
end
|
|
end
|
|
|
|
let(:bundler_version) { "2.0" }
|
|
let(:latest_version) { nil }
|
|
before do
|
|
bundle "config set --global disable_version_check false"
|
|
|
|
pristine_system_gems "bundler-#{bundler_version}"
|
|
if latest_version
|
|
info_path = home(".bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/info/bundler")
|
|
info_path.parent.mkpath
|
|
info_path.open("w") {|f| f.write "#{latest_version}\n" }
|
|
end
|
|
end
|
|
|
|
context "when there is no latest version" do
|
|
include_examples "no warning"
|
|
end
|
|
|
|
context "when the latest version is equal to the current version" do
|
|
let(:latest_version) { bundler_version }
|
|
include_examples "no warning"
|
|
end
|
|
|
|
context "when the latest version is less than the current version" do
|
|
let(:latest_version) { "0.9" }
|
|
include_examples "no warning"
|
|
end
|
|
|
|
context "when the latest version is greater than the current version" do
|
|
let(:latest_version) { "222.0" }
|
|
it "prints the version warning" do
|
|
bundle "fail", env: { "BUNDLER_VERSION" => bundler_version }, raise_on_error: false
|
|
expect(err).to start_with(<<-EOS.strip)
|
|
The latest bundler is #{latest_version}, but you are currently running #{bundler_version}.
|
|
To update to the most recent version, run `bundle update --bundler`
|
|
EOS
|
|
end
|
|
|
|
context "and disable_version_check is set" do
|
|
before { bundle "config set disable_version_check true", env: { "BUNDLER_VERSION" => bundler_version } }
|
|
include_examples "no warning"
|
|
end
|
|
|
|
context "running a parseable command" do
|
|
it "prints no warning" do
|
|
bundle "config get --parseable foo", env: { "BUNDLER_VERSION" => bundler_version }
|
|
expect(last_command.stdboth).to eq ""
|
|
|
|
bundle "platform --ruby", env: { "BUNDLER_VERSION" => bundler_version }, raise_on_error: false
|
|
expect(last_command.stdboth).to eq "Could not locate Gemfile"
|
|
end
|
|
end
|
|
|
|
context "and is a pre-release" do
|
|
let(:latest_version) { "222.0.0.pre.4" }
|
|
it "prints the version warning" do
|
|
bundle "fail", env: { "BUNDLER_VERSION" => bundler_version }, raise_on_error: false
|
|
expect(err).to start_with(<<-EOS.strip)
|
|
The latest bundler is #{latest_version}, but you are currently running #{bundler_version}.
|
|
To update to the most recent version, run `bundle update --bundler`
|
|
EOS
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
RSpec.describe "bundler executable" do
|
|
it "shows the bundler version just as the `bundle` executable does", bundler: "< 3" do
|
|
bundler "--version"
|
|
expect(out).to eq("Bundler version #{Bundler::VERSION}")
|
|
end
|
|
|
|
it "shows the bundler version just as the `bundle` executable does", bundler: "3" do
|
|
bundler "--version"
|
|
expect(out).to eq(Bundler::VERSION)
|
|
end
|
|
end
|