aboutsummaryrefslogtreecommitdiffstats
path: root/spec/install/gemfile/groups_spec.rb
diff options
context:
space:
mode:
authorAndre Arko <andre@arko.net>2015-12-13 20:59:25 +0800
committerAndre Arko <andre@arko.net>2015-12-13 21:06:10 +0800
commit9cfdc8668c4a4a3364079a5f7917a46b575f279a (patch)
tree518a9dc5001456d048946e45984a50f92cb2548e /spec/install/gemfile/groups_spec.rb
parent4c8a0f479ee9da79019907de43f7414bf820b250 (diff)
downloadbundler-9cfdc8668c4a4a3364079a5f7917a46b575f279a.tar.gz
move gemfile feature tests into install/gemfile/
Diffstat (limited to 'spec/install/gemfile/groups_spec.rb')
-rw-r--r--spec/install/gemfile/groups_spec.rb370
1 files changed, 370 insertions, 0 deletions
diff --git a/spec/install/gemfile/groups_spec.rb b/spec/install/gemfile/groups_spec.rb
new file mode 100644
index 00000000..d64e0318
--- /dev/null
+++ b/spec/install/gemfile/groups_spec.rb
@@ -0,0 +1,370 @@
+require "spec_helper"
+
+describe "bundle install with groups" do
+ describe "installing with no options" do
+ before :each do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ group :emo do
+ gem "activesupport", "2.3.5"
+ end
+ gem "thin", :groups => [:emo]
+ G
+ end
+
+ it "installs gems in the default group" do
+ should_be_installed "rack 1.0.0"
+ end
+
+ it "installs gems in a group block into that group" do
+ should_be_installed "activesupport 2.3.5"
+
+ load_error_run <<-R, "activesupport", :default
+ require 'activesupport'
+ puts ACTIVESUPPORT
+ R
+
+ expect(err).to eq("ZOMG LOAD ERROR")
+ end
+
+ it "installs gems with inline :groups into those groups" do
+ should_be_installed "thin 1.0"
+
+ load_error_run <<-R, "thin", :default
+ require 'thin'
+ puts THIN
+ R
+
+ expect(err).to eq("ZOMG LOAD ERROR")
+ end
+
+ it "sets up everything if Bundler.setup is used with no groups" do
+ output = run("require 'rack'; puts RACK")
+ expect(output).to eq("1.0.0")
+
+ output = run("require 'activesupport'; puts ACTIVESUPPORT")
+ expect(output).to eq("2.3.5")
+
+ output = run("require 'thin'; puts THIN")
+ expect(output).to eq("1.0")
+ end
+
+ it "removes old groups when new groups are set up" do
+ load_error_run <<-RUBY, "thin", :emo
+ Bundler.setup(:default)
+ require 'thin'
+ puts THIN
+ RUBY
+
+ expect(err).to eq("ZOMG LOAD ERROR")
+ end
+
+ it "sets up old groups when they have previously been removed" do
+ output = run <<-RUBY, :emo
+ Bundler.setup(:default)
+ Bundler.setup(:default, :emo)
+ require 'thin'; puts THIN
+ RUBY
+ expect(output).to eq("1.0")
+ end
+ end
+
+ describe "installing --without" do
+ describe "with gems assigned to a single group" do
+ before :each do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ group :emo do
+ gem "activesupport", "2.3.5"
+ end
+ group :debugging, :optional => true do
+ gem "thin"
+ end
+ G
+ end
+
+ it "installs gems in the default group" do
+ bundle :install, :without => "emo"
+ should_be_installed "rack 1.0.0", :groups => [:default]
+ end
+
+ it "does not install gems from the excluded group" do
+ bundle :install, :without => "emo"
+ should_not_be_installed "activesupport 2.3.5", :groups => [:default]
+ end
+
+ it "does not install gems from the previously excluded group" do
+ bundle :install, :without => "emo"
+ should_not_be_installed "activesupport 2.3.5"
+ bundle :install
+ should_not_be_installed "activesupport 2.3.5"
+ end
+
+ it "does not say it installed gems from the excluded group" do
+ bundle :install, :without => "emo"
+ expect(out).not_to include("activesupport")
+ end
+
+ it "allows Bundler.setup for specific groups" do
+ bundle :install, :without => "emo"
+ run("require 'rack'; puts RACK", :default)
+ expect(out).to eq("1.0.0")
+ end
+
+ it "does not effect the resolve" do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "activesupport"
+ group :emo do
+ gem "rails", "2.3.2"
+ end
+ G
+
+ bundle :install, :without => "emo"
+ should_be_installed "activesupport 2.3.2", :groups => [:default]
+ end
+
+ it "still works on a different machine and excludes gems" do
+ bundle :install, :without => "emo"
+
+ simulate_new_machine
+ bundle :install, :without => "emo"
+
+ should_be_installed "rack 1.0.0", :groups => [:default]
+ should_not_be_installed "activesupport 2.3.5", :groups => [:default]
+ end
+
+ it "still works when BUNDLE_WITHOUT is set" do
+ ENV["BUNDLE_WITHOUT"] = "emo"
+
+ bundle :install
+ expect(out).not_to include("activesupport")
+
+ should_be_installed "rack 1.0.0", :groups => [:default]
+ should_not_be_installed "activesupport 2.3.5", :groups => [:default]
+
+ ENV["BUNDLE_WITHOUT"] = nil
+ end
+
+ it "clears without when passed an empty list" do
+ bundle :install, :without => "emo"
+
+ bundle 'install --without ""'
+ should_be_installed "activesupport 2.3.5"
+ end
+
+ it "doesn't clear without when nothing is passed" do
+ bundle :install, :without => "emo"
+
+ bundle :install
+ should_not_be_installed "activesupport 2.3.5"
+ end
+
+ it "does not install gems from the optional group" do
+ bundle :install
+ should_not_be_installed "thin 1.0"
+ end
+
+ it "does install gems from the optional group when requested" do
+ bundle :install, :with => "debugging"
+ should_be_installed "thin 1.0"
+ end
+
+ it "does install gems from the previously requested group" do
+ bundle :install, :with => "debugging"
+ should_be_installed "thin 1.0"
+ bundle :install
+ should_be_installed "thin 1.0"
+ end
+
+ it "does install gems from the optional groups requested with BUNDLE_WITH" do
+ ENV["BUNDLE_WITH"] = "debugging"
+ bundle :install
+ should_be_installed "thin 1.0"
+ ENV["BUNDLE_WITH"] = nil
+ end
+
+ it "clears with when passed an empty list" do
+ bundle :install, :with => "debugging"
+ bundle 'install --with ""'
+ should_not_be_installed "thin 1.0"
+ end
+
+ it "does remove groups from without when passed at with" do
+ bundle :install, :without => "emo"
+ bundle :install, :with => "emo"
+ should_be_installed "activesupport 2.3.5"
+ end
+
+ it "does remove groups from with when passed at without" do
+ bundle :install, :with => "debugging"
+ bundle :install, :without => "debugging"
+ should_not_be_installed "thin 1.0"
+ end
+
+ it "errors out when passing a group to with and without" do
+ bundle :install, :with => "emo debugging", :without => "emo"
+ expect(out).to include("The offending groups are: emo")
+ end
+
+ it "can add and remove a group at the same time" do
+ bundle :install, :with => "debugging", :without => "emo"
+ should_be_installed "thin 1.0"
+ should_not_be_installed "activesupport 2.3.5"
+ end
+
+ it "does have no effect when listing a not optional group in with" do
+ bundle :install, :with => "emo"
+ should_be_installed "activesupport 2.3.5"
+ end
+
+ it "does have no effect when listing an optional group in without" do
+ bundle :install, :without => "debugging"
+ should_not_be_installed "thin 1.0"
+ end
+ end
+
+ describe "with gems assigned to multiple groups" do
+ before :each do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ group :emo, :lolercoaster do
+ gem "activesupport", "2.3.5"
+ end
+ G
+ end
+
+ it "installs gems in the default group" do
+ bundle :install, :without => "emo lolercoaster"
+ should_be_installed "rack 1.0.0"
+ end
+
+ it "installs the gem if any of its groups are installed" do
+ bundle "install --without emo"
+ should_be_installed "rack 1.0.0", "activesupport 2.3.5"
+ end
+
+ describe "with a gem defined multiple times in different groups" do
+ before :each do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+
+ group :emo do
+ gem "activesupport", "2.3.5"
+ end
+
+ group :lolercoaster do
+ gem "activesupport", "2.3.5"
+ end
+ G
+ end
+
+ it "installs the gem w/ option --without emo" do
+ bundle "install --without emo"
+ should_be_installed "activesupport 2.3.5"
+ end
+
+ it "installs the gem w/ option --without lolercoaster" do
+ bundle "install --without lolercoaster"
+ should_be_installed "activesupport 2.3.5"
+ end
+
+ it "does not install the gem w/ option --without emo lolercoaster" do
+ bundle "install --without emo lolercoaster"
+ should_not_be_installed "activesupport 2.3.5"
+ end
+
+ it "does not install the gem w/ option --without 'emo lolercoaster'" do
+ bundle "install --without 'emo lolercoaster'"
+ should_not_be_installed "activesupport 2.3.5"
+ end
+ end
+ end
+
+ describe "nesting groups" do
+ before :each do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ group :emo do
+ group :lolercoaster do
+ gem "activesupport", "2.3.5"
+ end
+ end
+ G
+ end
+
+ it "installs gems in the default group" do
+ bundle :install, :without => "emo lolercoaster"
+ should_be_installed "rack 1.0.0"
+ end
+
+ it "installs the gem if any of its groups are installed" do
+ bundle "install --without emo"
+ should_be_installed "rack 1.0.0", "activesupport 2.3.5"
+ end
+ end
+ end
+
+ describe "when loading only the default group" do
+ it "should not load all groups" do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ gem "activesupport", :groups => :development
+ G
+
+ ruby <<-R
+ require "bundler"
+ Bundler.setup :default
+ Bundler.require :default
+ puts RACK
+ begin
+ require "activesupport"
+ rescue LoadError
+ puts "no activesupport"
+ end
+ R
+
+ expect(out).to include("1.0")
+ expect(out).to include("no activesupport")
+ end
+ end
+
+ describe "when locked and installed with --without" do
+ before(:each) do
+ build_repo2
+ system_gems "rack-0.9.1" do
+ install_gemfile <<-G, :without => :rack
+ source "file://#{gem_repo2}"
+ gem "rack"
+
+ group :rack do
+ gem "rack_middleware"
+ end
+ G
+ end
+ end
+
+ it "uses the correct versions even if --without was used on the original" do
+ should_be_installed "rack 0.9.1"
+ should_not_be_installed "rack_middleware 1.0"
+ simulate_new_machine
+
+ bundle :install
+
+ should_be_installed "rack 0.9.1"
+ should_be_installed "rack_middleware 1.0"
+ end
+
+ it "does not hit the remote a second time" do
+ FileUtils.rm_rf gem_repo2
+ bundle "install --without rack"
+ expect(err).to be_empty
+ end
+ end
+end