instiki/vendor/plugins/bundler/gems/bundler-1.0.15/spec/cache/gems_spec.rb
Jacques Distler 9e909d5be3 Update Rails, rails_xss and Bundler
Update Bundler to 1.0.15.
Update Rails to 2.3.12.
Update rails_xss plugin.

The latter two were the
source of a considerable
amount of grief, as rails_xss
is now MUCH stricter about what
string methods can be used.

Also made it possible to use
rake 0.9.x with Instiki. But
you probably REALLY want to use

 ruby bundle exec rake ...

instead of just saying

 rake ....
2011-06-15 00:43:38 -05:00

231 lines
5.6 KiB
Ruby

require "spec_helper"
describe "bundle cache" do
describe "when there are only gemsources" do
before :each do
gemfile <<-G
gem 'rack'
G
system_gems "rack-1.0.0"
bundle :cache
end
it "copies the .gem file to vendor/cache" do
bundled_app("vendor/cache/rack-1.0.0.gem").should exist
end
it "uses the cache as a source when installing gems" do
build_gem "omg", :path => bundled_app('vendor/cache')
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "omg"
G
should_be_installed "omg 1.0.0"
end
it "uses the cache as a source when installing gems with --local" do
system_gems []
bundle "install --local"
should_be_installed("rack 1.0.0")
end
it "does not reinstall gems from the cache if they exist on the system" do
build_gem "rack", "1.0.0", :path => bundled_app('vendor/cache') do |s|
s.write "lib/rack.rb", "RACK = 'FAIL'"
end
install_gemfile <<-G
gem "rack"
G
should_be_installed("rack 1.0.0")
end
it "does not reinstall gems from the cache if they exist in the bundle" do
system_gems "rack-1.0.0"
gemfile <<-G
gem "rack"
G
build_gem "rack", "1.0.0", :path => bundled_app('vendor/cache') do |s|
s.write "lib/rack.rb", "RACK = 'FAIL'"
end
bundle "install --local"
should_be_installed("rack 1.0.0")
end
it "creates a lockfile" do
cache_gems "rack-1.0.0"
gemfile <<-G
gem "rack"
G
bundle "cache"
bundled_app("Gemfile.lock").should exist
end
end
describe "when there are also git sources" do
before do
build_git "foo"
system_gems "rack-1.0.0"
install_gemfile <<-G
source "file://#{gem_repo1}"
git "#{lib_path("foo-1.0")}" do
gem 'foo'
end
gem 'rack'
G
end
it "still works" do
bundle :cache
system_gems []
bundle "install --local"
should_be_installed("rack 1.0.0", "foo 1.0")
end
it "should not explode if the lockfile is not present" do
FileUtils.rm(bundled_app("Gemfile.lock"))
bundle :cache
bundled_app("Gemfile.lock").should exist
end
end
describe "when previously cached" do
before :each do
build_repo2
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "rack"
gem "actionpack"
G
bundle :cache
cached_gem("rack-1.0.0").should exist
cached_gem("actionpack-2.3.2").should exist
cached_gem("activesupport-2.3.2").should exist
end
it "re-caches during install" do
cached_gem("rack-1.0.0").rmtree
bundle :install
out.should include("Updating .gem files in vendor/cache")
cached_gem("rack-1.0.0").should exist
end
it "adds and removes when gems are updated" do
update_repo2
bundle 'update'
cached_gem("rack-1.2").should exist
cached_gem("rack-1.0.0").should_not exist
end
it "adds new gems and dependencies" do
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "rails"
G
cached_gem("rails-2.3.2").should exist
cached_gem("activerecord-2.3.2").should exist
end
it "removes .gems for removed gems and dependencies" do
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "rack"
G
cached_gem("rack-1.0.0").should exist
cached_gem("actionpack-2.3.2").should_not exist
cached_gem("activesupport-2.3.2").should_not exist
end
it "removes .gems when gem changes to git source" do
build_git "rack"
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "rack", :git => "#{lib_path("rack-1.0")}"
gem "actionpack"
G
cached_gem("rack-1.0.0").should_not exist
cached_gem("actionpack-2.3.2").should exist
cached_gem("activesupport-2.3.2").should exist
end
it "doesn't remove gems that are for another platform" do
simulate_platform "java" do
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "platform_specific"
G
bundle :cache
cached_gem("platform_specific-1.0-java").should exist
end
simulate_new_machine
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "platform_specific"
G
cached_gem("platform_specific-1.0-#{Gem::Platform.local}").should exist
cached_gem("platform_specific-1.0-java").should exist
end
it "doesn't remove gems with mismatched :rubygems_version or :date" do
cached_gem("rack-1.0.0").rmtree
build_gem "rack", "1.0.0",
:path => bundled_app('vendor/cache'),
:rubygems_version => "1.3.2"
simulate_new_machine
bundle :install
cached_gem("rack-1.0.0").should exist
end
it "handles directories and non .gem files in the cache" do
bundled_app("vendor/cache/foo").mkdir
File.open(bundled_app("vendor/cache/bar"), 'w'){|f| f.write("not a gem") }
bundle :cache
end
it "does not say that it is removing gems when it isn't actually doing so" do
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
G
bundle "cache"
bundle "install"
out.should_not =~ /removing/i
end
it "should install gems with the name bundler in them (that aren't bundler)" do
build_gem "foo-bundler", "1.0",
:path => bundled_app('vendor/cache')
install_gemfile <<-G
gem "foo-bundler"
G
should_be_installed "foo-bundler 1.0"
end
end
end