aboutsummaryrefslogtreecommitdiffstats
path: root/spec/bundler/cache/path_spec.rb
blob: 12be2dbcf89af477a597e274fe9dd96b7868c16d (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
# frozen_string_literal: true

%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, forgotten_command_line_options([:all, :cache_all] => true)
      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, forgotten_command_line_options([:all, :cache_all] => true)
      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, forgotten_command_line_options([:all, :cache_all] => true)
      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, forgotten_command_line_options([:all, :cache_all] => true)

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

      bundle cmd, forgotten_command_line_options([:all, :cache_all] => true)

      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, forgotten_command_line_options([:all, :cache_all] => true)

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

      bundle cmd, forgotten_command_line_options([:all, :cache_all] => true)
      expect(bundled_app("vendor/cache/bar-1.0")).not_to exist
    end

    it "raises a warning without --all", :bundler => "< 3" 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, forgotten_command_line_options([:all, :cache_all] => true)
      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, forgotten_command_line_options([:all, :cache_all] => true)
      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