berkshelf 6.3.4 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +10 -0
  4. data/.travis.yml +6 -8
  5. data/CHANGELOG.md +7 -19
  6. data/Gemfile +10 -0
  7. data/Gemfile.lock +68 -103
  8. data/Thorfile +2 -2
  9. data/berkshelf.gemspec +6 -8
  10. data/features/commands/info.feature +50 -8
  11. data/features/commands/shelf/show.feature +10 -40
  12. data/features/commands/upload.feature +73 -0
  13. data/features/commands/vendor.feature +43 -0
  14. data/features/json_formatter.feature +1 -1
  15. data/features/step_definitions/chef_server_steps.rb +2 -2
  16. data/features/step_definitions/filesystem_steps.rb +16 -0
  17. data/features/support/env.rb +11 -10
  18. data/lib/berkshelf.rb +15 -20
  19. data/lib/berkshelf/berksfile.rb +57 -47
  20. data/lib/berkshelf/cached_cookbook.rb +120 -19
  21. data/lib/berkshelf/chef_config_compat.rb +50 -0
  22. data/lib/berkshelf/chef_repo_universe.rb +2 -2
  23. data/lib/berkshelf/cli.rb +3 -42
  24. data/lib/berkshelf/community_rest.rb +40 -61
  25. data/lib/berkshelf/config.rb +92 -118
  26. data/lib/berkshelf/cookbook_store.rb +3 -2
  27. data/lib/berkshelf/core_ext/file.rb +1 -1
  28. data/lib/berkshelf/dependency.rb +1 -10
  29. data/lib/berkshelf/downloader.rb +19 -7
  30. data/lib/berkshelf/errors.rb +3 -0
  31. data/lib/berkshelf/location.rb +1 -1
  32. data/lib/berkshelf/locations/base.rb +1 -1
  33. data/lib/berkshelf/lockfile.rb +17 -13
  34. data/lib/berkshelf/logger.rb +62 -1
  35. data/lib/berkshelf/packager.rb +1 -1
  36. data/lib/berkshelf/resolver.rb +1 -1
  37. data/lib/berkshelf/ridley_compat.rb +22 -3
  38. data/lib/berkshelf/uploader.rb +76 -48
  39. data/lib/berkshelf/version.rb +1 -1
  40. data/spec/fixtures/cookbook-path-uploader/apt-2.3.6/metadata.rb +2 -0
  41. data/spec/fixtures/cookbook-path-uploader/build-essential-1.4.2/metadata.rb +2 -0
  42. data/spec/fixtures/cookbook-path-uploader/jenkins-2.0.3/metadata.rb +5 -0
  43. data/spec/fixtures/cookbook-path-uploader/jenkins-config-0.1.0/metadata.rb +4 -0
  44. data/spec/fixtures/cookbook-path-uploader/runit-1.5.8/metadata.rb +5 -0
  45. data/spec/fixtures/cookbook-path-uploader/yum-3.0.6/metadata.rb +2 -0
  46. data/spec/fixtures/cookbook-path-uploader/yum-epel-0.2.0/metadata.rb +3 -0
  47. data/spec/spec_helper.rb +2 -2
  48. data/spec/support/chef_api.rb +4 -4
  49. data/spec/support/chef_server.rb +1 -1
  50. data/spec/support/matchers/file_system_matchers.rb +1 -3
  51. data/spec/support/path_helpers.rb +1 -1
  52. data/spec/unit/berkshelf/berksfile_spec.rb +3 -24
  53. data/spec/unit/berkshelf/cached_cookbook_spec.rb +13 -15
  54. data/spec/unit/berkshelf/community_rest_spec.rb +3 -12
  55. data/spec/unit/berkshelf/config_spec.rb +4 -4
  56. data/spec/unit/berkshelf/downloader_spec.rb +6 -11
  57. data/spec/unit/berkshelf/lockfile_spec.rb +10 -7
  58. data/spec/unit/berkshelf/source_spec.rb +1 -1
  59. data/spec/unit/berkshelf/ssl_policies_spec.rb +2 -5
  60. data/spec/unit/berkshelf/uploader_spec.rb +60 -10
  61. data/spec/unit/berkshelf/visualizer_spec.rb +2 -2
  62. metadata +49 -102
  63. data/features/commands/cookbook.feature +0 -35
  64. data/features/commands/init.feature +0 -27
  65. data/features/config.feature +0 -111
  66. data/lib/berkshelf/base_generator.rb +0 -42
  67. data/lib/berkshelf/cookbook_generator.rb +0 -133
  68. data/lib/berkshelf/init_generator.rb +0 -195
  69. data/lib/berkshelf/streaming_file_adapter.rb +0 -22
  70. data/spec/unit/berkshelf/cookbook_generator_spec.rb +0 -108
  71. data/spec/unit/berkshelf/init_generator_spec.rb +0 -265
@@ -1,3 +1,3 @@
1
1
  module Berkshelf
2
- VERSION = "6.3.4"
2
+ VERSION = "7.0.0"
3
3
  end
@@ -0,0 +1,2 @@
1
+ name "apt"
2
+ version "2.3.6"
@@ -0,0 +1,2 @@
1
+ name "build-essential"
2
+ version "1.4.2"
@@ -0,0 +1,5 @@
1
+ name "jenkins"
2
+ version "2.0.3"
3
+ depends "apt", "~> 2.0"
4
+ depends "runit", "~> 1.5"
5
+ depends "yum", "~> 3.0"
@@ -0,0 +1,4 @@
1
+ name "jenkins-config"
2
+ version "0.1.0"
3
+ depends "jenkins", "~> 2.0"
4
+ depends "yum", "~> 3.0"
@@ -0,0 +1,5 @@
1
+ name "runit"
2
+ version "1.5.8"
3
+ depends "build-essential"
4
+ depends "yum", "~> 3.0"
5
+ depends "yum-epel"
@@ -0,0 +1,2 @@
1
+ name "yum"
2
+ version "3.0.6"
@@ -0,0 +1,3 @@
1
+ name "yum-epel"
2
+ version "0.2.0"
3
+ depends "yum", "~> 3.0"
@@ -8,7 +8,6 @@ require "rspec"
8
8
  require "cleanroom/rspec"
9
9
  require "webmock/rspec"
10
10
  require "rspec/its"
11
- require "berkshelf"
12
11
 
13
12
  Dir["spec/support/**/*.rb"].each { |f| require File.expand_path(f) }
14
13
 
@@ -64,6 +63,8 @@ def capture(stream)
64
63
  result
65
64
  end
66
65
 
66
+ require "berkshelf"
67
+
67
68
  module Berkshelf
68
69
  class GitLocation
69
70
  include Berkshelf::RSpec::Git
@@ -71,7 +72,6 @@ module Berkshelf
71
72
  alias :real_clone :clone
72
73
  def clone
73
74
  fake_remote = generate_fake_git_remote(uri, tags: @branch ? [@branch] : [])
74
- tmp_clone = File.join(self.class.tmpdir, uri.gsub(/[\/:]/, "-"))
75
75
  @uri = "file://#{fake_remote}"
76
76
  real_clone
77
77
  end
@@ -83,14 +83,14 @@ module Berkshelf
83
83
  end.join("\n")
84
84
 
85
85
  if options[:dependencies]
86
- options[:dependencies].each do |name, constraint|
87
- metadata << "depends '#{name}', '#{constraint}'\n"
86
+ options[:dependencies].each do |dep_name, constraint|
87
+ metadata << "depends '#{dep_name}', '#{constraint}'\n"
88
88
  end
89
89
  end
90
90
 
91
91
  if options[:recommendations]
92
- options[:recommendations].each do |name, constraint|
93
- metadata << "recommends '#{name}', '#{constraint}'\n"
92
+ options[:recommendations].each do |rec_name, constraint|
93
+ metadata << "recommends '#{rec_name}', '#{constraint}'\n"
94
94
  end
95
95
  end
96
96
 
@@ -23,7 +23,7 @@ module Berkshelf::RSpec
23
23
  def start(options = {})
24
24
  return @server if @server
25
25
 
26
- options = options.reverse_merge(port: PORT)
26
+ options = { port: PORT }.merge(options)
27
27
  options[:generate_real_keys] = false
28
28
 
29
29
  @server = ChefZero::Server.new(options)
@@ -59,9 +59,7 @@ module Berkshelf
59
59
  end
60
60
 
61
61
  def file(name, &block)
62
- silence_warnings do
63
- @tree[name] = FileMatcher.new(location(name), &block)
64
- end
62
+ @tree[name] = FileMatcher.new(location(name), &block)
65
63
  end
66
64
 
67
65
  def no_file(name)
@@ -40,7 +40,7 @@ module Berkshelf
40
40
  #
41
41
  # @return [Bershelf::Chef::Config]
42
42
  def chef_config
43
- Ridley::Chef::Config.from_file(chef_config_path)
43
+ Berkshelf::ChefConfigCompat.from_file(chef_config_path)
44
44
  end
45
45
 
46
46
  def clean_tmp_path
@@ -192,26 +192,6 @@ describe Berkshelf::Berksfile do
192
192
  end
193
193
  end
194
194
 
195
- describe "#site" do
196
- it "raises a Berkshelf::Deprecated error" do
197
- expect { subject.site }.to raise_error(Berkshelf::DeprecatedError)
198
- end
199
-
200
- it "is a DSL method" do
201
- expect(subject).to have_exposed_method(:site)
202
- end
203
- end
204
-
205
- describe "#chef_api" do
206
- it "raises a Berkshelf::Deprecated error" do
207
- expect { subject.chef_api }.to raise_error(Berkshelf::DeprecatedError)
208
- end
209
-
210
- it "is a DSL method" do
211
- expect(subject).to have_exposed_method(:chef_api)
212
- end
213
- end
214
-
215
195
  describe "#extension" do
216
196
  it "is a DSL method" do
217
197
  expect(subject).to have_exposed_method(:extension)
@@ -385,12 +365,12 @@ describe Berkshelf::Berksfile do
385
365
  end
386
366
 
387
367
  describe "#vendor" do
388
- let(:cached_cookbook) { double(Berkshelf::CachedCookbook, cookbook_name: "my_cookbook", path: "/my_cookbook/path", compiled_metadata?: true) }
389
- let(:installer) { double(Berkshelf::Installer, run: [cached_cookbook]) }
368
+ let(:cached_cookbook) { instance_double(Berkshelf::CachedCookbook, cookbook_name: "my_cookbook", path: "/my_cookbook/path", compile_metadata: true, reload: nil) }
369
+ let(:installer) { instance_double(Berkshelf::Installer, run: [cached_cookbook]) }
390
370
  let(:raw_metadata_files) { [File.join(cached_cookbook.cookbook_name, "metadata.rb")] }
391
371
 
392
372
  let(:destination) { "/a/destination/path" }
393
- let(:options) { { :exclude => raw_metadata_files + Berkshelf::Berksfile::EXCLUDED_VCS_FILES_WHEN_VENDORING, delete: nil } }
373
+ let(:options) { { :exclude => Berkshelf::Berksfile::EXCLUDED_VCS_FILES_WHEN_VENDORING, delete: nil } }
394
374
 
395
375
  before do
396
376
  allow(Berkshelf::Installer).to receive(:new).and_return(installer)
@@ -404,7 +384,6 @@ describe Berkshelf::Berksfile do
404
384
 
405
385
  it "excludes the top-level metadata.rb file" do
406
386
  expect(options[:exclude].any? { |exclude| File.fnmatch?(exclude, "my_cookbook/recipes/metadata.rb", File::FNM_DOTMATCH) }).to be(false)
407
- expect(options[:exclude].any? { |exclude| File.fnmatch?(exclude, "my_cookbook/metadata.rb", File::FNM_DOTMATCH) }).to be(true)
408
387
  end
409
388
  end
410
389
 
@@ -76,17 +76,13 @@ describe Berkshelf::CachedCookbook do
76
76
  expect(subject.dependencies).to include(dependencies)
77
77
  end
78
78
 
79
- it "contains recommendations from the cookbook metadata" do
80
- expect(subject.dependencies).to include(recommendations)
81
- end
82
-
83
79
  it "returns a hash" do
84
80
  expect(subject.dependencies).to be_a(Hash)
85
81
  end
86
82
  end
87
83
 
88
84
  describe "#pretty_hash" do
89
- shared_examples "a pretty_hash cookbook attribute" do |attribute, key|
85
+ shared_examples "a pretty_hash string cookbook attribute" do |attribute, key|
90
86
  it "is not present when the `#{attribute}` attribute is nil" do
91
87
  allow(subject).to receive(attribute.to_sym).and_return(nil)
92
88
  expect(subject.pretty_hash).to_not have_key((key || attribute).to_sym)
@@ -96,9 +92,11 @@ describe Berkshelf::CachedCookbook do
96
92
  allow(subject).to receive(attribute.to_sym).and_return("")
97
93
  expect(subject.pretty_hash).to_not have_key((key || attribute).to_sym)
98
94
  end
95
+ end
99
96
 
100
- it "is not present when the `#{attribute}` attribute is an empty array" do
101
- allow(subject).to receive(attribute.to_sym).and_return([])
97
+ shared_examples "a pretty_hash hash cookbook attribute" do |attribute, key|
98
+ it "is not present when the `#{attribute}` attribute is nil" do
99
+ allow(subject).to receive(attribute.to_sym).and_return(nil)
102
100
  expect(subject.pretty_hash).to_not have_key((key || attribute).to_sym)
103
101
  end
104
102
 
@@ -113,13 +111,13 @@ describe Berkshelf::CachedCookbook do
113
111
  end
114
112
  end
115
113
 
116
- it_behaves_like "a pretty_hash cookbook attribute", "cookbook_name", "name"
117
- it_behaves_like "a pretty_hash cookbook attribute", "version"
118
- it_behaves_like "a pretty_hash cookbook attribute", "description"
119
- it_behaves_like "a pretty_hash cookbook attribute", "maintainer", "author"
120
- it_behaves_like "a pretty_hash cookbook attribute", "maintainer_email", "email"
121
- it_behaves_like "a pretty_hash cookbook attribute", "license"
122
- it_behaves_like "a pretty_hash cookbook attribute", "platforms"
123
- it_behaves_like "a pretty_hash cookbook attribute", "dependencies"
114
+ it_behaves_like "a pretty_hash string cookbook attribute", "cookbook_name", "name"
115
+ it_behaves_like "a pretty_hash string cookbook attribute", "version"
116
+ it_behaves_like "a pretty_hash string cookbook attribute", "description"
117
+ it_behaves_like "a pretty_hash string cookbook attribute", "maintainer", "author"
118
+ it_behaves_like "a pretty_hash string cookbook attribute", "maintainer_email", "email"
119
+ it_behaves_like "a pretty_hash string cookbook attribute", "license"
120
+ it_behaves_like "a pretty_hash hash cookbook attribute", "platforms"
121
+ it_behaves_like "a pretty_hash hash cookbook attribute", "dependencies"
124
122
  end
125
123
  end
@@ -29,7 +29,7 @@ describe Berkshelf::CommunityREST do
29
29
  expect(Berkshelf::CommunityREST.uri_escape_version(nil)).to be_a(String)
30
30
  end
31
31
 
32
- it 'converts a version to it\'s underscored version' do
32
+ it "converts a version to it's underscored version" do
33
33
  expect(Berkshelf::CommunityREST.uri_escape_version("1.1.2")).to eq("1_1_2")
34
34
  end
35
35
 
@@ -64,14 +64,6 @@ describe Berkshelf::CommunityREST do
64
64
  let(:api_uri) { Berkshelf::CommunityREST::V1_API }
65
65
  subject { Berkshelf::CommunityREST.new(api_uri) }
66
66
 
67
- describe "#initialize" do
68
- context "Faraday handlers" do
69
- it "includes follow_redirects to prevent 301 from community, stopping some cookbooks installing" do
70
- expect(subject.builder.handlers).to include(Ridley::Middleware::FollowRedirects)
71
- end
72
- end
73
- end
74
-
75
67
  describe "#download" do
76
68
  let(:archive) { double("archive", path: "/foo/bar", unlink: true) }
77
69
 
@@ -93,7 +85,6 @@ describe Berkshelf::CommunityREST do
93
85
  .and_return("/foo/nginx")
94
86
  .once
95
87
  expect(archive).to receive(:unlink).once
96
- expect(Dir).to receive(:chdir).with("/foo/nginx")
97
88
 
98
89
  subject.download("bacon", "1.0.0")
99
90
  end
@@ -109,8 +100,8 @@ describe Berkshelf::CommunityREST do
109
100
 
110
101
  result = subject.find("bacon", "1.0.0")
111
102
 
112
- expect(result.cookbook).to eq("/path/to/cookbook")
113
- expect(result.version).to eq("1.0.0")
103
+ expect(result["cookbook"]).to eq("/path/to/cookbook")
104
+ expect(result["version"]).to eq("1.0.0")
114
105
  end
115
106
 
116
107
  it "raises a CookbookNotFound error on a 404 response for a non-existent cookbook" do
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  describe Berkshelf::Config do
4
4
  describe "::file" do
5
5
  context "when the file does not exist" do
6
- before { allow(File).to receive(:exists?).and_return(false) }
6
+ before { allow(File).to receive(:exist?).and_return(false) }
7
7
 
8
8
  it "is nil" do
9
9
  expect(Berkshelf::Config.file).to be_nil
@@ -25,7 +25,7 @@ describe Berkshelf::Config do
25
25
  context "a Chef config to read defaults from" do
26
26
  let(:chef_config) do
27
27
  double(
28
- Ridley::Chef::Config,
28
+ Berkshelf::ChefConfigCompat,
29
29
  chef_server_url: "https://chef.example.com",
30
30
  validation_client_name: "validator",
31
31
  validation_key: "validator.pem",
@@ -75,7 +75,7 @@ describe Berkshelf::Config do
75
75
  end
76
76
 
77
77
  before do
78
- allow(File).to receive(:exists?).and_return(false)
78
+ allow(File).to receive(:exist?).and_return(false)
79
79
  end
80
80
 
81
81
  after do
@@ -85,7 +85,7 @@ describe Berkshelf::Config do
85
85
  context "when ENV['BERKSHELF_CONFIG'] is used" do
86
86
  before do
87
87
  allow(ENV).to receive(:[]).with("BERKSHELF_CONFIG").and_return("/tmp/config.json")
88
- allow(File).to receive(:exists?).with("/tmp/config.json").and_return(true)
88
+ allow(File).to receive(:exist?).with("/tmp/config.json").and_return(true)
89
89
  end
90
90
 
91
91
  it "points to a location within it" do
@@ -86,12 +86,10 @@ module Berkshelf
86
86
  describe "chef_server location type" do
87
87
  let(:chef_server_url) { "http://configured-chef-server/" }
88
88
  let(:ridley_client) do
89
- double(Ridley::Client,
90
- cookbook: double("cookbook", download: "fake")
91
- )
89
+ instance_double(Berkshelf::RidleyCompat)
92
90
  end
93
91
  let(:chef_config) do
94
- double(Ridley::Chef::Config,
92
+ double(Berkshelf::ChefConfigCompat,
95
93
  node_name: "fake-client",
96
94
  client_key: "client-key",
97
95
  chef_server_url: chef_server_url,
@@ -101,10 +99,7 @@ module Berkshelf
101
99
  cookbook_copyright: "user",
102
100
  cookbook_email: "user@example.com",
103
101
  cookbook_license: "apachev2",
104
- trusted_certs_dir: self_signed_crt_path,
105
- knife: {
106
- chef_guard: false,
107
- }
102
+ trusted_certs_dir: self_signed_crt_path
108
103
  )
109
104
  end
110
105
 
@@ -133,7 +128,7 @@ module Berkshelf
133
128
  cert_store: cert_store,
134
129
  },
135
130
  }
136
- expect(Ridley).to receive(:open).with(credentials) { ridley_client }
131
+ expect(Berkshelf::RidleyCompat).to receive(:new_client).with(credentials) { ridley_client }
137
132
  subject.try_download(source, name, version)
138
133
  end
139
134
 
@@ -151,7 +146,7 @@ module Berkshelf
151
146
  cert_store: cert_store,
152
147
  },
153
148
  }
154
- expect(Ridley).to receive(:open).with(credentials) { ridley_client }
149
+ expect(Berkshelf::RidleyCompat).to receive(:new_client).with(credentials) { ridley_client }
155
150
  subject.try_download(source, name, version)
156
151
  end
157
152
  end
@@ -170,7 +165,7 @@ module Berkshelf
170
165
  cert_store: cert_store,
171
166
  },
172
167
  }
173
- expect(Ridley).to receive(:open).with(credentials) { ridley_client }
168
+ expect(Berkshelf::RidleyCompat).to receive(:new_client).with(credentials) { ridley_client }
174
169
  subject.try_download(source, name, version)
175
170
  end
176
171
  end
@@ -58,7 +58,7 @@ describe Berkshelf::Lockfile do
58
58
  end
59
59
 
60
60
  it "returns false when the file does not exist" do
61
- allow(File).to receive(:exists?).and_return(false)
61
+ allow(File).to receive(:exist?).and_return(false)
62
62
  expect(subject.present?).to be(false)
63
63
  end
64
64
 
@@ -225,7 +225,7 @@ describe Berkshelf::Lockfile do
225
225
 
226
226
  context "when the Chef environment does not exist" do
227
227
  it "raises an exception" do
228
- allow(connection).to receive(:environment).and_return(double(find: nil))
228
+ allow(connection).to receive(:get).and_raise(Berkshelf::APIClient::ServiceNotFound)
229
229
  expect do
230
230
  subject.apply("production")
231
231
  end.to raise_error(Berkshelf::EnvironmentNotFound)
@@ -233,14 +233,17 @@ describe Berkshelf::Lockfile do
233
233
  end
234
234
 
235
235
  it "locks the environment cookbook versions on chef server" do
236
- environment = double("environment", :cookbook_versions= => nil, save: true)
237
- allow(connection).to receive(:environment).and_return(double(find: environment))
236
+ environment = instance_double(Chef::Environment)
237
+ env_hash = double(Hash)
238
+ expect(connection).to receive(:get).with("environments/production").and_return(env_hash)
239
+ expect(Chef::Environment).to receive(:from_hash).with(env_hash).and_return(environment)
238
240
 
239
- expect(environment).to receive(:cookbook_versions=).with(
241
+ expect(environment).to receive(:cookbook_versions).with(
240
242
  "apt" => "= 1.0.0",
241
243
  "jenkins" => "= 1.4.5"
242
244
  )
243
245
 
246
+ expect(environment).to receive(:save)
244
247
  subject.apply("production")
245
248
  end
246
249
  end
@@ -294,7 +297,7 @@ describe Berkshelf::Lockfile do
294
297
 
295
298
  describe "#update_environment_file" do
296
299
  it "raises an exception when environment file does not exist" do
297
- allow(File).to receive(:exists?).and_return(false)
300
+ allow(File).to receive(:exist?).and_return(false)
298
301
  expect do
299
302
  subject.update_environment_file("/broken/path", nil)
300
303
  end.to raise_error(Berkshelf::EnvironmentFileNotFound)
@@ -307,7 +310,7 @@ describe Berkshelf::Lockfile do
307
310
  "jenkins" => "1.4.5",
308
311
  }
309
312
 
310
- allow(File).to receive(:exists?).and_return(true)
313
+ allow(File).to receive(:exist?).and_return(true)
311
314
  allow(File).to receive(:read).and_return("{}")
312
315
  allow(File).to receive(:open).and_yield(file)
313
316
 
@@ -194,7 +194,7 @@ module Berkshelf
194
194
  end
195
195
 
196
196
  describe "#search" do
197
- let (:cookbooks) do
197
+ let(:cookbooks) do
198
198
  [
199
199
  APIClient::RemoteCookbook.new("cb1", "1.0.8"),
200
200
  APIClient::RemoteCookbook.new("cb1", "1.0.22"),
@@ -6,7 +6,7 @@ describe Berkshelf::SSLPolicy do
6
6
  let(:self_signed_crt_path_windows_forwardslashes) { "C:/users/vagrant/.chef/trusted_certs" }
7
7
 
8
8
  let(:chef_config) do
9
- double(Ridley::Chef::Config,
9
+ double(Berkshelf::ChefConfigCompat,
10
10
  node_name: "fake-client",
11
11
  client_key: "client-key",
12
12
  chef_server_url: "http://configured-chef-server/",
@@ -16,10 +16,7 @@ describe Berkshelf::SSLPolicy do
16
16
  cookbook_copyright: "user",
17
17
  cookbook_email: "user@example.com",
18
18
  cookbook_license: "apachev2",
19
- trusted_certs_dir: self_signed_crt_path,
20
- knife: {
21
- chef_guard: false,
22
- }
19
+ trusted_certs_dir: self_signed_crt_path
23
20
  )
24
21
  end
25
22
 
@@ -51,7 +51,7 @@ module Berkshelf
51
51
  let(:options) { Hash.new }
52
52
 
53
53
  let(:chef_config) do
54
- double(Ridley::Chef::Config,
54
+ double(Berkshelf::ChefConfigCompat,
55
55
  node_name: "fake-client",
56
56
  client_key: "client-key",
57
57
  chef_server_url: "http://configured-chef-server/",
@@ -61,10 +61,7 @@ module Berkshelf
61
61
  cookbook_copyright: "user",
62
62
  cookbook_email: "user@example.com",
63
63
  cookbook_license: "apachev2",
64
- trusted_certs_dir: self_signed_crt_path,
65
- knife: {
66
- chef_guard: false,
67
- }
64
+ trusted_certs_dir: self_signed_crt_path
68
65
  )
69
66
  end
70
67
 
@@ -125,7 +122,7 @@ module Berkshelf
125
122
  end
126
123
 
127
124
  it "uses the Berkshelf::Config options" do
128
- expect(Ridley).to receive(:open).with(
125
+ expect(Berkshelf::RidleyCompat).to receive(:new_client).with(
129
126
  server_url: chef_config.chef_server_url,
130
127
  client_name: chef_config.node_name,
131
128
  client_key: chef_config.client_key,
@@ -142,7 +139,7 @@ module Berkshelf
142
139
  subject { Uploader.new(berksfile, ssl_verify: false) }
143
140
 
144
141
  it "uses the passed option" do
145
- expect(Ridley).to receive(:open).with(
142
+ expect(Berkshelf::RidleyCompat).to receive(:new_client).with(
146
143
  server_url: chef_config.chef_server_url,
147
144
  client_name: chef_config.node_name,
148
145
  client_key: chef_config.client_key,
@@ -159,7 +156,7 @@ module Berkshelf
159
156
  subject { Uploader.new(berksfile, server_url: "http://custom") }
160
157
 
161
158
  it "uses the passed in :server_url" do
162
- expect(Ridley).to receive(:open)
159
+ expect(Berkshelf::RidleyCompat).to receive(:new_client)
163
160
  .with(include(server_url: "http://custom"))
164
161
  subject.run
165
162
  end
@@ -169,7 +166,7 @@ module Berkshelf
169
166
  subject { Uploader.new(berksfile, client_name: "custom") }
170
167
 
171
168
  it "uses the passed in :client_name" do
172
- expect(Ridley).to receive(:open)
169
+ expect(Berkshelf::RidleyCompat).to receive(:new_client)
173
170
  .with(include(client_name: "custom"))
174
171
  subject.run
175
172
  end
@@ -179,11 +176,64 @@ module Berkshelf
179
176
  subject { Uploader.new(berksfile, client_key: "custom") }
180
177
 
181
178
  it "uses the passed in :client_key" do
182
- expect(Ridley).to receive(:open)
179
+ expect(Berkshelf::RidleyCompat).to receive(:new_client)
183
180
  .with(include(client_key: "custom"))
184
181
  subject.run
185
182
  end
186
183
  end
187
184
  end
185
+
186
+ describe "#lookup_dependencies" do
187
+ before do
188
+ allow_any_instance_of(Berkshelf::Berksfile).to receive(:lockfile).and_return(lockfile)
189
+ end
190
+
191
+ let(:berksfile) { Berkshelf::Berksfile.from_file(fixtures_path.join("berksfiles/default")) }
192
+ let(:lockfile) { Berkshelf::Lockfile.from_file(fixtures_path.join("lockfiles/default.lock")) }
193
+
194
+ context "when given a cookbook that has no dependencies" do
195
+ subject { described_class.new(berksfile).send(:lookup_dependencies, "yum") }
196
+
197
+ it "returns empty array" do
198
+ expect(subject).to eq []
199
+ end
200
+ end
201
+
202
+ context "when given a cookbook that has dependencies" do
203
+ subject { described_class.new(berksfile).send(:lookup_dependencies, "yum-epel") }
204
+
205
+ it "returns array of cookbook's dependencies" do
206
+ expect(subject).to eq ["yum"]
207
+ end
208
+ end
209
+
210
+ context "when given a cookbook that has dependencies which have dependencies" do
211
+ subject { described_class.new(berksfile).send(:lookup_dependencies, "runit") }
212
+
213
+ it "returns array of cookbook's dependencies and their dependencies" do
214
+ expect(subject).to eq ["build-essential", "yum", "yum-epel"]
215
+ end
216
+ end
217
+ end
218
+
219
+ describe "#filtered_cookbooks" do
220
+ context "when iterating over a list of of cookbooks that have dependencies" do
221
+ before do
222
+ allow_any_instance_of(Berkshelf::Dependency).to receive(:berksfile).and_return(berksfile)
223
+ allow_any_instance_of(Berkshelf::Berksfile).to receive(:lockfile).and_return(lockfile)
224
+ allow(Berkshelf::CookbookStore).to receive(:instance).and_return(cookbook_store)
225
+ end
226
+
227
+ let(:berksfile) { Berkshelf::Berksfile.from_file(fixtures_path.join("berksfiles/default")) }
228
+ let(:lockfile) { Berkshelf::Lockfile.from_file(fixtures_path.join("lockfiles/default.lock")) }
229
+ let(:cookbook_store) { Berkshelf::CookbookStore.new(fixtures_path.join("cookbook-path-uploader")) }
230
+
231
+ subject { described_class.new(berksfile).send(:filtered_cookbooks) }
232
+
233
+ it "returns filtered list in correct order" do
234
+ expect(subject.map(&:name)).to eq ["yum", "yum-epel", "build-essential", "runit", "apt", "jenkins", "jenkins-config"]
235
+ end
236
+ end
237
+ end
188
238
  end
189
239
  end