# frozen_string_literal: true require "spec_helper" describe "bundle lock" do def strip_lockfile(lockfile) strip_whitespace(lockfile).sub(/\n\Z/, "") end def read_lockfile(file = "Gemfile.lock") strip_lockfile bundled_app(file).read end before :each do gemfile <<-G source "file://#{gem_repo1}" gem "rails" gem "with_license" gem "foo" G @lockfile = strip_lockfile <<-L GEM remote: file:#{gem_repo1}/ specs: actionmailer (2.3.2) activesupport (= 2.3.2) actionpack (2.3.2) activesupport (= 2.3.2) activerecord (2.3.2) activesupport (= 2.3.2) activeresource (2.3.2) activesupport (= 2.3.2) activesupport (2.3.2) foo (1.0) rails (2.3.2) actionmailer (= 2.3.2) actionpack (= 2.3.2) activerecord (= 2.3.2) activeresource (= 2.3.2) rake (= 10.0.2) rake (10.0.2) with_license (1.0) PLATFORMS #{local} DEPENDENCIES foo rails with_license BUNDLED WITH #{Bundler::VERSION} L end it "prints a lockfile when there is no existing lockfile with --print" do bundle "lock --print" expect(out).to include(@lockfile) end it "prints a lockfile when there is an existing lockfile with --print" do lockfile @lockfile bundle "lock --print" expect(out).to eq(@lockfile) end it "writes a lockfile when there is no existing lockfile" do bundle "lock" expect(read_lockfile).to eq(@lockfile) end it "writes a lockfile when there is an outdated lockfile using --update" do lockfile @lockfile.gsub("2.3.2", "2.3.1") bundle "lock --update" expect(read_lockfile).to eq(@lockfile) end it "does not fetch remote specs when using the --local option" do bundle "lock --update --local" expect(out).to include("available on this machine.") end it "writes to a custom location using --lockfile" do bundle "lock --lockfile=lock" expect(out).to match(/Writing lockfile to.+lock/) expect(read_lockfile "lock").to eq(@lockfile) expect { read_lockfile }.to raise_error(Errno::ENOENT) end it "update specific gems using --update" do lockfile @lockfile.gsub("2.3.2", "2.3.1").gsub("10.0.2", "10.0.1") bundle "lock --update rails rake" expect(read_lockfile).to eq(@lockfile) end it "supports adding new platforms" do bundle! "lock --add-platform java x86-mingw32" lockfile = Bundler::LockfileParser.new(read_lockfile) expect(lockfile.platforms).to eq([java, local, mingw]) end it "warns when adding an unknown platform" do bundle "lock --add-platform foobarbaz" expect(out).to include("The platform `foobarbaz` is unknown to RubyGems and adding it will likely lead to resolution errors") end it "allows removing platforms" do bundle! "lock --add-platform java x86-mingw32" lockfile = Bundler::LockfileParser.new(read_lockfile) expect(lockfile.platforms).to eq([java, local, mingw]) bundle! "lock --remove-platform java" lockfile = Bundler::LockfileParser.new(read_lockfile) expect(lockfile.platforms).to eq([local, mingw]) end it "errors when removing all platforms" do bundle "lock --remove-platform #{local}" expect(out).to include("Removing all platforms from the bundle is not allowed") end end