berkshelf 6.3.4 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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