mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 05:55:46 +02:00

This error message is also printed when using `bundler/setup` in frozen
model, so we're not necessarily installing any gems when it happens.
This new message play nicer with all situations.
6874bbacce
117 lines
3.5 KiB
Ruby
117 lines
3.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe "bundle inject", :bundler => "< 3" do
|
|
before :each do
|
|
gemfile <<-G
|
|
source "#{file_uri_for(gem_repo1)}"
|
|
gem "rack"
|
|
G
|
|
end
|
|
|
|
context "without a lockfile" do
|
|
it "locks with the injected gems" do
|
|
expect(bundled_app_lock).not_to exist
|
|
bundle "inject 'rack-obama' '> 0'"
|
|
expect(bundled_app_lock.read).to match(/rack-obama/)
|
|
end
|
|
end
|
|
|
|
context "with a lockfile" do
|
|
before do
|
|
bundle "install"
|
|
end
|
|
|
|
it "adds the injected gems to the Gemfile" do
|
|
expect(bundled_app_gemfile.read).not_to match(/rack-obama/)
|
|
bundle "inject 'rack-obama' '> 0'"
|
|
expect(bundled_app_gemfile.read).to match(/rack-obama/)
|
|
end
|
|
|
|
it "locks with the injected gems" do
|
|
expect(bundled_app_lock.read).not_to match(/rack-obama/)
|
|
bundle "inject 'rack-obama' '> 0'"
|
|
expect(bundled_app_lock.read).to match(/rack-obama/)
|
|
end
|
|
end
|
|
|
|
context "with injected gems already in the Gemfile" do
|
|
it "doesn't add existing gems" do
|
|
bundle "inject 'rack' '> 0'", :raise_on_error => false
|
|
expect(err).to match(/cannot specify the same gem twice/i)
|
|
end
|
|
end
|
|
|
|
context "incorrect arguments" do
|
|
it "fails when more than 2 arguments are passed" do
|
|
bundle "inject gem_name 1 v", :raise_on_error => false
|
|
expect(err).to eq(<<-E.strip)
|
|
ERROR: "bundle inject" was called with arguments ["gem_name", "1", "v"]
|
|
Usage: "bundle inject GEM VERSION"
|
|
E
|
|
end
|
|
end
|
|
|
|
context "with source option" do
|
|
it "add gem with source option in gemfile" do
|
|
bundle "inject 'foo' '>0' --source #{file_uri_for(gem_repo1)}"
|
|
gemfile = bundled_app_gemfile.read
|
|
str = "gem \"foo\", \"> 0\", :source => \"#{file_uri_for(gem_repo1)}\""
|
|
expect(gemfile).to include str
|
|
end
|
|
end
|
|
|
|
context "with group option" do
|
|
it "add gem with group option in gemfile" do
|
|
bundle "inject 'rack-obama' '>0' --group=development"
|
|
gemfile = bundled_app_gemfile.read
|
|
str = "gem \"rack-obama\", \"> 0\", :group => :development"
|
|
expect(gemfile).to include str
|
|
end
|
|
|
|
it "add gem with multiple groups in gemfile" do
|
|
bundle "inject 'rack-obama' '>0' --group=development,test"
|
|
gemfile = bundled_app_gemfile.read
|
|
str = "gem \"rack-obama\", \"> 0\", :groups => [:development, :test]"
|
|
expect(gemfile).to include str
|
|
end
|
|
end
|
|
|
|
context "when frozen" do
|
|
before do
|
|
bundle "install"
|
|
if Bundler.feature_flag.bundler_3_mode?
|
|
bundle "config set --local deployment true"
|
|
else
|
|
bundle "config set --local frozen true"
|
|
end
|
|
end
|
|
|
|
it "injects anyway" do
|
|
bundle "inject 'rack-obama' '> 0'"
|
|
expect(bundled_app_gemfile.read).to match(/rack-obama/)
|
|
end
|
|
|
|
it "locks with the injected gems" do
|
|
expect(bundled_app_lock.read).not_to match(/rack-obama/)
|
|
bundle "inject 'rack-obama' '> 0'"
|
|
expect(bundled_app_lock.read).to match(/rack-obama/)
|
|
end
|
|
|
|
it "restores frozen afterwards" do
|
|
bundle "inject 'rack-obama' '> 0'"
|
|
config = Psych.load(bundled_app(".bundle/config").read)
|
|
expect(config["BUNDLE_DEPLOYMENT"] || config["BUNDLE_FROZEN"]).to eq("true")
|
|
end
|
|
|
|
it "doesn't allow Gemfile changes" do
|
|
gemfile <<-G
|
|
source "#{file_uri_for(gem_repo1)}"
|
|
gem "rack-obama"
|
|
G
|
|
bundle "inject 'rack' '> 0'", :raise_on_error => false
|
|
expect(err).to match(/the lockfile can't be updated because frozen mode is set/)
|
|
|
|
expect(bundled_app_lock.read).not_to match(/rack-obama/)
|
|
end
|
|
end
|
|
end
|