diff options
Diffstat (limited to 'spec/bundler/commands/install_spec.rb')
-rw-r--r-- | spec/bundler/commands/install_spec.rb | 537 |
1 files changed, 0 insertions, 537 deletions
diff --git a/spec/bundler/commands/install_spec.rb b/spec/bundler/commands/install_spec.rb deleted file mode 100644 index 4cb8584633..0000000000 --- a/spec/bundler/commands/install_spec.rb +++ /dev/null @@ -1,537 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe "bundle install with gem sources" do - describe "the simple case" do - it "prints output and returns if no dependencies are specified" do - gemfile <<-G - source "file://#{gem_repo1}" - G - - bundle :install - expect(out).to match(/no dependencies/) - end - - it "does not make a lockfile if the install fails" do - install_gemfile <<-G - raise StandardError, "FAIL" - G - - expect(last_command.bundler_err).to include('StandardError, "FAIL"') - expect(bundled_app("Gemfile.lock")).not_to exist - end - - it "creates a Gemfile.lock" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - G - - expect(bundled_app("Gemfile.lock")).to exist - end - - it "does not create ./.bundle by default", :bundler => "< 2" do - gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - G - - bundle! :install # can't use install_gemfile since it sets retry - expect(bundled_app(".bundle")).not_to exist - end - - it "does not create ./.bundle by default when installing to system gems" do - gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - G - - bundle! :install, :env => { "BUNDLE_PATH__SYSTEM" => true } # can't use install_gemfile since it sets retry - expect(bundled_app(".bundle")).not_to exist - end - - it "creates lock files based on the Gemfile name" do - gemfile bundled_app("OmgFile"), <<-G - source "file://#{gem_repo1}" - gem "rack", "1.0" - G - - bundle "install --gemfile OmgFile" - - expect(bundled_app("OmgFile.lock")).to exist - end - - it "doesn't delete the lockfile if one already exists" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem 'rack' - G - - lockfile = File.read(bundled_app("Gemfile.lock")) - - install_gemfile <<-G - raise StandardError, "FAIL" - G - - expect(File.read(bundled_app("Gemfile.lock"))).to eq(lockfile) - end - - it "does not touch the lockfile if nothing changed" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - G - - expect { run "1" }.not_to change { File.mtime(bundled_app("Gemfile.lock")) } - end - - it "fetches gems" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem 'rack' - G - - expect(default_bundle_path("gems/rack-1.0.0")).to exist - expect(the_bundle).to include_gems("rack 1.0.0") - end - - it "fetches gems when multiple versions are specified" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem 'rack', "> 0.9", "< 1.0" - G - - expect(default_bundle_path("gems/rack-0.9.1")).to exist - expect(the_bundle).to include_gems("rack 0.9.1") - end - - it "fetches gems when multiple versions are specified take 2" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem 'rack', "< 1.0", "> 0.9" - G - - expect(default_bundle_path("gems/rack-0.9.1")).to exist - expect(the_bundle).to include_gems("rack 0.9.1") - end - - it "raises an appropriate error when gems are specified using symbols" do - install_gemfile(<<-G) - source "file://#{gem_repo1}" - gem :rack - G - expect(exitstatus).to eq(4) if exitstatus - end - - it "pulls in dependencies" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "rails" - G - - expect(the_bundle).to include_gems "actionpack 2.3.2", "rails 2.3.2" - end - - it "does the right version" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "rack", "0.9.1" - G - - expect(the_bundle).to include_gems "rack 0.9.1" - end - - it "does not install the development dependency" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "with_development_dependency" - G - - expect(the_bundle).to include_gems("with_development_dependency 1.0.0"). - and not_include_gems("activesupport 2.3.5") - end - - it "resolves correctly" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "activemerchant" - gem "rails" - G - - expect(the_bundle).to include_gems "activemerchant 1.0", "activesupport 2.3.2", "actionpack 2.3.2" - end - - it "activates gem correctly according to the resolved gems" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "activesupport", "2.3.5" - G - - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "activemerchant" - gem "rails" - G - - expect(the_bundle).to include_gems "activemerchant 1.0", "activesupport 2.3.2", "actionpack 2.3.2" - end - - it "does not reinstall any gem that is already available locally" do - system_gems "activesupport-2.3.2", :path => :bundle_path - - build_repo2 do - build_gem "activesupport", "2.3.2" do |s| - s.write "lib/activesupport.rb", "ACTIVESUPPORT = 'fail'" - end - end - - install_gemfile <<-G - source "file://#{gem_repo2}" - gem "activerecord", "2.3.2" - G - - expect(the_bundle).to include_gems "activesupport 2.3.2" - end - - it "works when the gemfile specifies gems that only exist in the system" do - build_gem "foo", :to_bundle => true - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - gem "foo" - G - - expect(the_bundle).to include_gems "rack 1.0.0", "foo 1.0.0" - end - - it "prioritizes local gems over remote gems" do - build_gem "rack", "1.0.0", :to_bundle => true do |s| - s.add_dependency "activesupport", "2.3.5" - end - - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - G - - expect(the_bundle).to include_gems "rack 1.0.0", "activesupport 2.3.5" - end - - describe "with a gem that installs multiple platforms" do - it "installs gems for the local platform as first choice" do - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "platform_specific" - G - - run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" - expect(out).to eq("1.0.0 #{Bundler.local_platform}") - end - - it "falls back on plain ruby" do - simulate_platform "foo-bar-baz" - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "platform_specific" - G - - run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" - expect(out).to eq("1.0.0 RUBY") - end - - it "installs gems for java" do - simulate_platform "java" - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "platform_specific" - G - - run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" - expect(out).to eq("1.0.0 JAVA") - end - - it "installs gems for windows" do - simulate_platform mswin - - install_gemfile <<-G - source "file://#{gem_repo1}" - gem "platform_specific" - G - - run "require 'platform_specific' ; puts PLATFORM_SPECIFIC" - expect(out).to eq("1.0.0 MSWIN") - end - end - - describe "doing bundle install foo" do - before do - gemfile <<-G - source "file://#{gem_repo1}" - gem "rack" - G - end - - it "works" do - bundle "install", forgotten_command_line_options(:path => "vendor") - expect(the_bundle).to include_gems "rack 1.0" - end - - it "allows running bundle install --system without deleting foo", :bundler => "< 2" do - bundle "install", forgotten_command_line_options(:path => "vendor") - bundle "install", forgotten_command_line_options(:system => true) - FileUtils.rm_rf(bundled_app("vendor")) - expect(the_bundle).to include_gems "rack 1.0" - end - - it "allows running bundle install --system after deleting foo", :bundler => "< 2" do - bundle "install", forgotten_command_line_options(:path => "vendor") - FileUtils.rm_rf(bundled_app("vendor")) - bundle "install", forgotten_command_line_options(:system => true) - expect(the_bundle).to include_gems "rack 1.0" - end - end - - it "finds gems in multiple sources", :bundler => "< 2" do - build_repo2 - update_repo2 - - install_gemfile <<-G - source "file://#{gem_repo1}" - source "file://#{gem_repo2}" - - gem "activesupport", "1.2.3" - gem "rack", "1.2" - G - - expect(the_bundle).to include_gems "rack 1.2", "activesupport 1.2.3" - end - - it "gives a useful error if no sources are set" do - install_gemfile <<-G - gem "rack" - G - - bundle :install - expect(out).to include("Your Gemfile has no gem server sources") - end - - it "creates a Gemfile.lock on a blank Gemfile" do - install_gemfile <<-G - G - - expect(File.exist?(bundled_app("Gemfile.lock"))).to eq(true) - end - - it "gracefully handles error when rubygems server is unavailable" do - install_gemfile <<-G, :artifice => nil - source "file://#{gem_repo1}" - source "http://localhost:9384" do - gem 'foo' - end - G - - bundle :install, :artifice => nil - expect(out).to include("Could not fetch specs from http://localhost:9384/") - expect(out).not_to include("file://") - end - - it "fails gracefully when downloading an invalid specification from the full index", :rubygems => "2.5" do - build_repo2 do - build_gem "ajp-rails", "0.0.0", :gemspec => false, :skip_validation => true do |s| - bad_deps = [["ruby-ajp", ">= 0.2.0"], ["rails", ">= 0.14"]] - s. - instance_variable_get(:@spec). - instance_variable_set(:@dependencies, bad_deps) - - raise "failed to set bad deps" unless s.dependencies == bad_deps - end - build_gem "ruby-ajp", "1.0.0" - end - - install_gemfile <<-G, :full_index => true - source "file://#{gem_repo2}" - - gem "ajp-rails", "0.0.0" - G - - expect(last_command.stdboth).not_to match(/Error Report/i) - expect(last_command.bundler_err).to include("An error occurred while installing ajp-rails (0.0.0), and Bundler cannot continue."). - and include("Make sure that `gem install ajp-rails -v '0.0.0'` succeeds before bundling.") - end - - it "doesn't blow up when the local .bundle/config is empty" do - FileUtils.mkdir_p(bundled_app(".bundle")) - FileUtils.touch(bundled_app(".bundle/config")) - - install_gemfile(<<-G) - source "file://#{gem_repo1}" - - gem 'foo' - G - expect(exitstatus).to eq(0) if exitstatus - end - - it "doesn't blow up when the global .bundle/config is empty" do - FileUtils.mkdir_p("#{Bundler.rubygems.user_home}/.bundle") - FileUtils.touch("#{Bundler.rubygems.user_home}/.bundle/config") - - install_gemfile(<<-G) - source "file://#{gem_repo1}" - - gem 'foo' - G - expect(exitstatus).to eq(0) if exitstatus - end - end - - describe "Ruby version in Gemfile.lock" do - include Bundler::GemHelpers - - context "and using an unsupported Ruby version" do - it "prints an error" do - install_gemfile <<-G - ::RUBY_VERSION = '2.0.1' - ruby '~> 2.2' - G - expect(out).to include("Your Ruby version is 2.0.1, but your Gemfile specified ~> 2.2") - end - end - - context "and using a supported Ruby version" do - before do - install_gemfile <<-G - ::RUBY_VERSION = '2.1.3' - ::RUBY_PATCHLEVEL = 100 - ruby '~> 2.1.0' - G - end - - it "writes current Ruby version to Gemfile.lock" do - lockfile_should_be <<-L - GEM - specs: - - PLATFORMS - #{lockfile_platforms} - - DEPENDENCIES - - RUBY VERSION - ruby 2.1.3p100 - - BUNDLED WITH - #{Bundler::VERSION} - L - end - - it "updates Gemfile.lock with updated incompatible ruby version" do - install_gemfile <<-G - ::RUBY_VERSION = '2.2.3' - ::RUBY_PATCHLEVEL = 100 - ruby '~> 2.2.0' - G - - lockfile_should_be <<-L - GEM - specs: - - PLATFORMS - #{lockfile_platforms} - - DEPENDENCIES - - RUBY VERSION - ruby 2.2.3p100 - - BUNDLED WITH - #{Bundler::VERSION} - L - end - end - end - - describe "when Bundler root contains regex chars" do - before do - root_dir = tmp("foo[]bar") - - FileUtils.mkdir_p(root_dir) - in_app_root_custom(root_dir) - end - - it "doesn't blow up" do - build_lib "foo" - gemfile = <<-G - gem 'foo', :path => "#{lib_path("foo-1.0")}" - G - File.open("Gemfile", "w") do |file| - file.puts gemfile - end - - bundle :install - - expect(exitstatus).to eq(0) if exitstatus - end - end - - describe "when requesting a quiet install via --quiet" do - it "should be quiet" do - gemfile <<-G - gem 'rack' - G - - bundle :install, :quiet => true - expect(out).to include("Could not find gem 'rack'") - expect(out).to_not include("Your Gemfile has no gem server sources") - end - end - - describe "when bundle path does not have write access" do - before do - FileUtils.mkdir_p(bundled_app("vendor")) - gemfile <<-G - source "file://#{gem_repo1}" - gem 'rack' - G - end - - it "should display a proper message to explain the problem" do - FileUtils.chmod(0o500, bundled_app("vendor")) - - bundle :install, forgotten_command_line_options(:path => "vendor") - expect(out).to include(bundled_app("vendor").to_s) - expect(out).to include("grant write permissions") - end - end - - context "after installing with --standalone" do - before do - install_gemfile! <<-G - source "file://#{gem_repo1}" - gem "rack" - G - forgotten_command_line_options(:path => "bundle") - bundle! "install", :standalone => true - end - - it "includes the standalone path" do - bundle! "binstubs rack", :standalone => true - standalone_line = File.read(bundled_app("bin/rackup")).each_line.find {|line| line.include? "$:.unshift" }.strip - expect(standalone_line).to eq %($:.unshift File.expand_path "../../bundle", path.realpath) - end - end - - describe "when bundle install is executed with unencoded authentication" do - before do - gemfile <<-G - source 'https://rubygems.org/' - gem "." - G - end - - it "should display a helpful messag explaining how to fix it" do - bundle :install, :env => { "BUNDLE_RUBYGEMS__ORG" => "user:pass{word" } - expect(exitstatus).to eq(17) if exitstatus - expect(out).to eq("Please CGI escape your usernames and passwords before " \ - "setting them for authentication.") - end - end -end |