aboutsummaryrefslogtreecommitdiffstats
path: root/spec/bundler/cache/path_spec.rb
blob: bbce448759b4a0dafdf7357b5d05bea07e2007f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# frozen_string_literal: true
require "spec_helper"

%w(cache package).each do |cmd|
  RSpec.describe "bundle #{cmd} with path" do
    it "is no-op when the path is within the bundle" do
      build_lib "foo", :path => bundled_app("lib/foo")

      install_gemfile <<-G
        gem "foo", :path => '#{bundled_app("lib/foo")}'
      G

      bundle "#{cmd} --all"
      expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
      expect(the_bundle).to include_gems "foo 1.0"
    end

    it "copies when the path is outside the bundle " do
      build_lib "foo"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
      G

      bundle "#{cmd} --all"
      expect(bundled_app("vendor/cache/foo-1.0")).to exist
      expect(bundled_app("vendor/cache/foo-1.0/.bundlecache")).to be_file

      FileUtils.rm_rf lib_path("foo-1.0")
      expect(the_bundle).to include_gems "foo 1.0"
    end

    it "copies when the path is outside the bundle and the paths intersect" do
      libname = File.basename(Dir.pwd) + "_gem"
      libpath = File.join(File.dirname(Dir.pwd), libname)

      build_lib libname, :path => libpath

      install_gemfile <<-G
        gem "#{libname}", :path => '#{libpath}'
      G

      bundle "#{cmd} --all"
      expect(bundled_app("vendor/cache/#{libname}")).to exist
      expect(bundled_app("vendor/cache/#{libname}/.bundlecache")).to be_file

      FileUtils.rm_rf libpath
      expect(the_bundle).to include_gems "#{libname} 1.0"
    end

    it "updates the path on each cache" do
      build_lib "foo"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
      G

      bundle "#{cmd} --all"

      build_lib "foo" do |s|
        s.write "lib/foo.rb", "puts :CACHE"
      end

      bundle "#{cmd} --all"

      expect(bundled_app("vendor/cache/foo-1.0")).to exist
      FileUtils.rm_rf lib_path("foo-1.0")

      run "require 'foo'"
      expect(out).to eq("CACHE")
    end

    it "removes stale entries cache" do
      build_lib "foo"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
      G

      bundle "#{cmd} --all"

      install_gemfile <<-G
        gem "bar", :path => '#{lib_path("bar-1.0")}'
      G

      bundle "#{cmd} --all"
      expect(bundled_app("vendor/cache/bar-1.0")).not_to exist
    end

    it "raises a warning without --all" do
      build_lib "foo"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
      G

      bundle cmd
      expect(out).to match(/please pass the \-\-all flag/)
      expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
    end

    it "stores the given flag" do
      build_lib "foo"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
      G

      bundle "#{cmd} --all"
      build_lib "bar"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
        gem "bar", :path => '#{lib_path("bar-1.0")}'
      G

      bundle cmd
      expect(bundled_app("vendor/cache/bar-1.0")).to exist
    end

    it "can rewind chosen configuration" do
      build_lib "foo"

      install_gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
      G

      bundle "#{cmd} --all"
      build_lib "baz"

      gemfile <<-G
        gem "foo", :path => '#{lib_path("foo-1.0")}'
        gem "baz", :path => '#{lib_path("baz-1.0")}'
      G

      bundle "#{cmd} --no-all"
      expect(bundled_app("vendor/cache/baz-1.0")).not_to exist
    end
  end
end