238 lines
7.3 KiB
Ruby
238 lines
7.3 KiB
Ruby
|
require "spec_helper"
|
||
|
|
||
|
describe "install with --deployment or --frozen" do
|
||
|
before do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
G
|
||
|
end
|
||
|
|
||
|
it "fails without a lockfile and says that --deployment requires a lock" do
|
||
|
bundle "install --deployment"
|
||
|
expect(out).to include("The --deployment flag requires a Gemfile.lock")
|
||
|
end
|
||
|
|
||
|
it "fails without a lockfile and says that --frozen requires a lock" do
|
||
|
bundle "install --frozen"
|
||
|
expect(out).to include("The --frozen flag requires a Gemfile.lock")
|
||
|
end
|
||
|
|
||
|
it "works after you try to deploy without a lock" do
|
||
|
bundle "install --deployment"
|
||
|
bundle :install, :exitstatus => true
|
||
|
expect(exitstatus).to eq(0)
|
||
|
should_be_installed "rack 1.0"
|
||
|
end
|
||
|
|
||
|
it "still works if you are not in the app directory and specify --gemfile" do
|
||
|
bundle "install"
|
||
|
Dir.chdir tmp
|
||
|
simulate_new_machine
|
||
|
bundle "install --gemfile #{tmp}/bundled_app/Gemfile --deployment"
|
||
|
Dir.chdir bundled_app
|
||
|
should_be_installed "rack 1.0"
|
||
|
end
|
||
|
|
||
|
it "works if you exclude a group with a git gem" do
|
||
|
build_git "foo"
|
||
|
gemfile <<-G
|
||
|
group :test do
|
||
|
gem "foo", :git => "#{lib_path('foo-1.0')}"
|
||
|
end
|
||
|
G
|
||
|
bundle :install
|
||
|
bundle "install --deployment --without test", :exitstatus => true
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
it "works when you bundle exec bundle" do
|
||
|
bundle :install
|
||
|
bundle "install --deployment"
|
||
|
bundle "exec bundle check", :exitstatus => true
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
it "works when using path gems from the same path and the version is specified" do
|
||
|
build_lib "foo", :path => lib_path("nested/foo")
|
||
|
build_lib "bar", :path => lib_path("nested/bar")
|
||
|
gemfile <<-G
|
||
|
gem "foo", "1.0", :path => "#{lib_path("nested")}"
|
||
|
gem "bar", :path => "#{lib_path("nested")}"
|
||
|
G
|
||
|
|
||
|
bundle :install
|
||
|
bundle "install --deployment", :exitstatus => true
|
||
|
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
it "works when there are credentials in the source URL" do
|
||
|
install_gemfile(<<-G, :artifice => "endpoint_strict_basic_authentication", :quiet => true)
|
||
|
source "http://user:pass@localgemserver.test/"
|
||
|
|
||
|
gem "rack-obama", ">= 1.0"
|
||
|
G
|
||
|
|
||
|
bundle "install --deployment", :exitstatus => true, :artifice => "endpoint_strict_basic_authentication"
|
||
|
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
describe "with an existing lockfile" do
|
||
|
before do
|
||
|
bundle "install"
|
||
|
end
|
||
|
|
||
|
it "works with the --deployment flag if you didn't change anything" do
|
||
|
bundle "install --deployment", :exitstatus => true
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
it "works with the --frozen flag if you didn't change anything" do
|
||
|
bundle "install --frozen", :exitstatus => true
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
it "explodes with the --deployment flag if you make a change and don't check in the lockfile" do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
gem "rack-obama"
|
||
|
G
|
||
|
|
||
|
bundle "install --deployment"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have added to the Gemfile")
|
||
|
expect(out).to include("* rack-obama")
|
||
|
expect(out).not_to include("You have deleted from the Gemfile")
|
||
|
expect(out).not_to include("You have changed in the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "can have --frozen set via an environment variable" do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
gem "rack-obama"
|
||
|
G
|
||
|
|
||
|
ENV['BUNDLE_FROZEN'] = '1'
|
||
|
bundle "install"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have added to the Gemfile")
|
||
|
expect(out).to include("* rack-obama")
|
||
|
expect(out).not_to include("You have deleted from the Gemfile")
|
||
|
expect(out).not_to include("You have changed in the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "can have --frozen set to false via an environment variable" do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
gem "rack-obama"
|
||
|
G
|
||
|
|
||
|
ENV['BUNDLE_FROZEN'] = "false"
|
||
|
bundle "install"
|
||
|
expect(out).not_to include("deployment mode")
|
||
|
expect(out).not_to include("You have added to the Gemfile")
|
||
|
expect(out).not_to include("* rack-obama")
|
||
|
end
|
||
|
|
||
|
it "explodes with the --frozen flag if you make a change and don't check in the lockfile" do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
gem "rack-obama"
|
||
|
G
|
||
|
|
||
|
bundle "install --frozen"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have added to the Gemfile")
|
||
|
expect(out).to include("* rack-obama")
|
||
|
expect(out).not_to include("You have deleted from the Gemfile")
|
||
|
expect(out).not_to include("You have changed in the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "explodes if you remove a gem and don't check in the lockfile" do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "activesupport"
|
||
|
G
|
||
|
|
||
|
bundle "install --deployment"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have added to the Gemfile:\n* activesupport\n\n")
|
||
|
expect(out).to include("You have deleted from the Gemfile:\n* rack")
|
||
|
expect(out).not_to include("You have changed in the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "explodes if you add a source" do
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack", :git => "git://hubz.com"
|
||
|
G
|
||
|
|
||
|
bundle "install --deployment"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have added to the Gemfile:\n* source: git://hubz.com (at master)")
|
||
|
expect(out).not_to include("You have changed in the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "explodes if you unpin a source" do
|
||
|
build_git "rack"
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack", :git => "#{lib_path("rack-1.0")}"
|
||
|
G
|
||
|
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
G
|
||
|
|
||
|
bundle "install --deployment"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have deleted from the Gemfile:\n* source: #{lib_path("rack-1.0")} (at master)")
|
||
|
expect(out).not_to include("You have added to the Gemfile")
|
||
|
expect(out).not_to include("You have changed in the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "explodes if you unpin a source, leaving it pinned somewhere else" do
|
||
|
build_lib "foo", :path => lib_path("rack/foo")
|
||
|
build_git "rack", :path => lib_path("rack")
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack", :git => "#{lib_path("rack")}"
|
||
|
gem "foo", :git => "#{lib_path("rack")}"
|
||
|
G
|
||
|
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack"
|
||
|
gem "foo", :git => "#{lib_path("rack")}"
|
||
|
G
|
||
|
|
||
|
bundle "install --deployment"
|
||
|
expect(out).to include("deployment mode")
|
||
|
expect(out).to include("You have changed in the Gemfile:\n* rack from `no specified source` to `#{lib_path("rack")} (at master)`")
|
||
|
expect(out).not_to include("You have added to the Gemfile")
|
||
|
expect(out).not_to include("You have deleted from the Gemfile")
|
||
|
end
|
||
|
|
||
|
it "remembers that the bundle is frozen at runtime" do
|
||
|
bundle "install --deployment"
|
||
|
|
||
|
gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack", "1.0.0"
|
||
|
gem "rack-obama"
|
||
|
G
|
||
|
|
||
|
should_be_installed "rack 1.0.0"
|
||
|
end
|
||
|
end
|
||
|
end
|