# frozen_string_literal: true

RSpec.describe "bundle update" do
  context "with --gemfile" do
    it "finds the gemfile" do
      gemfile bundled_app("NotGemfile"), <<-G
        source "file://#{gem_repo1}"
        gem 'rack'
      G

      bundle! :install, :gemfile => bundled_app("NotGemfile")
      bundle! :update, :gemfile => bundled_app("NotGemfile"), :all => bundle_update_requires_all?

      # Specify BUNDLE_GEMFILE for `the_bundle`
      # to retrieve the proper Gemfile
      ENV["BUNDLE_GEMFILE"] = "NotGemfile"
      expect(the_bundle).to include_gems "rack 1.0.0"
    end
  end

  context "with gemfile set via config" do
    before do
      gemfile bundled_app("NotGemfile"), <<-G
        source "file://#{gem_repo1}"
        gem 'rack'
      G

      bundle "config set --local gemfile #{bundled_app("NotGemfile")}"
      bundle! :install
    end

    it "uses the gemfile to update" do
      bundle! "update", :all => bundle_update_requires_all?
      bundle "list"

      expect(out).to include("rack (1.0.0)")
    end

    it "uses the gemfile while in a subdirectory" do
      bundled_app("subdir").mkpath
      Dir.chdir(bundled_app("subdir")) do
        bundle! "update", :all => bundle_update_requires_all?
        bundle "list"

        expect(out).to include("rack (1.0.0)")
      end
    end
  end

  context "with prefer_gems_rb set" do
    before { bundle! "config prefer_gems_rb true" }

    it "prefers gems.rb to Gemfile" do
      create_file("gems.rb", "gem 'bundler'")
      create_file("Gemfile", "raise 'wrong Gemfile!'")

      bundle! :install
      bundle! :update, :all => bundle_update_requires_all?

      expect(bundled_app("gems.rb")).to be_file
      expect(bundled_app("Gemfile.lock")).not_to be_file

      expect(the_bundle).to include_gem "bundler #{Bundler::VERSION}"
    end
  end
end
