berkshelf 1.4.0.rc1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/.gitignore +1 -0
  2. data/.ruby-version +1 -1
  3. data/berkshelf.gemspec +2 -1
  4. data/features/contingent_command.feature +18 -0
  5. data/features/cookbook_command.feature +13 -11
  6. data/features/info_command.feature +39 -0
  7. data/features/step_definitions/filesystem_steps.rb +32 -0
  8. data/features/step_definitions/gem_steps.rb +3 -2
  9. data/features/support/env.rb +2 -0
  10. data/generator_files/Berksfile.erb +5 -0
  11. data/generator_files/Vagrantfile.erb +10 -0
  12. data/generator_files/default_test.rb.erb +11 -0
  13. data/generator_files/helpers.rb.erb +7 -0
  14. data/lib/berkshelf.rb +4 -3
  15. data/lib/berkshelf/berksfile.rb +5 -15
  16. data/lib/berkshelf/cached_cookbook.rb +18 -0
  17. data/lib/berkshelf/chef/config.rb +21 -26
  18. data/lib/berkshelf/cli.rb +40 -5
  19. data/lib/berkshelf/community_rest.rb +17 -1
  20. data/lib/berkshelf/cookbook_generator.rb +4 -0
  21. data/lib/berkshelf/cookbook_source.rb +21 -18
  22. data/lib/berkshelf/init_generator.rb +13 -3
  23. data/lib/berkshelf/locations/github_location.rb +1 -1
  24. data/lib/berkshelf/locations/path_location.rb +1 -1
  25. data/lib/berkshelf/resolver.rb +10 -6
  26. data/lib/berkshelf/test.rb +37 -0
  27. data/lib/berkshelf/version.rb +1 -1
  28. data/spec/spec_helper.rb +5 -1
  29. data/spec/unit/berkshelf/community_rest_spec.rb +1 -0
  30. data/spec/unit/berkshelf/cookbook_source_spec.rb +201 -181
  31. data/spec/unit/berkshelf/init_generator_spec.rb +40 -1
  32. data/spec/unit/berkshelf/locations/path_location_spec.rb +10 -0
  33. data/spec/unit/berkshelf/resolver_spec.rb +6 -7
  34. data/spec/unit/berkshelf/ui_spec.rb +2 -1
  35. data/spec/unit/chef/config_spec.rb +79 -4
  36. metadata +34 -8
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Berkshelf::InitGenerator do
3
+ describe Berkshelf::InitGenerator, vcr: { record: :new_episodes, serialize_with: :json } do
4
4
  subject { described_class }
5
5
 
6
6
  let(:target) { tmp_path.join("some_cookbook") }
7
+ let(:resolver) { double('resolver') }
7
8
 
8
9
  context "with default options" do
9
10
  before(:each) do
@@ -157,4 +158,42 @@ describe Berkshelf::InitGenerator do
157
158
  }
158
159
  end
159
160
  end
161
+
162
+ context "with the chef_minitest option true" do
163
+ before(:each) do
164
+ Berkshelf::Resolver.stub(:resolve) { resolver }
165
+ pending "Runs fine with no mock for the HTTP call on the first pass, subsequent passes throw errors"
166
+ capture(:stdout) {
167
+ subject.new([target], chef_minitest: true).invoke_all
168
+ }
169
+ end
170
+
171
+ specify do
172
+ target.should have_structure {
173
+ file "Berksfile" do
174
+ contains "cookbook \"minitest-handler\""
175
+ end
176
+ file "Vagrantfile" do
177
+ contains "\"recipe[minitest-handler::default]\""
178
+ end
179
+ directory "files" do
180
+ directory "default" do
181
+ directory "tests" do
182
+ directory "minitest" do
183
+ file "default_test.rb" do
184
+ contains "describe 'some_cookbook::default' do"
185
+ contains "include Helpers::Some_cookbook"
186
+ end
187
+ directory "support" do
188
+ file "helpers.rb" do
189
+ contains "module Some_cookbook"
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
196
+ }
197
+ end
198
+ end
160
199
  end
@@ -4,6 +4,16 @@ describe Berkshelf::PathLocation do
4
4
  let(:complacent_constraint) { double('comp-vconstraint', satisfies?: true) }
5
5
  let(:path) { fixtures_path.join("cookbooks", "example_cookbook").to_s }
6
6
 
7
+ describe "ClassMethods" do
8
+ describe "::new" do
9
+ it "assigns the value of :path to @path" do
10
+ obj = described_class.new("nginx", complacent_constraint, path: path)
11
+
12
+ obj.path.should eql(path)
13
+ end
14
+ end
15
+ end
16
+
7
17
  subject { described_class.new("nginx", complacent_constraint, path: path) }
8
18
 
9
19
  describe "#download" do
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Berkshelf::Resolver, :chef_server, vcr: { record: :new_episodes, serialize_with: :yaml } do
4
+ let(:downloader ) { Berkshelf::Downloader.new(Berkshelf.cookbook_store) }
5
+ let(:berksfile) { double(downloader: downloader) }
4
6
  let(:source) do
5
7
  double('source',
6
8
  name: 'mysql',
@@ -20,30 +22,27 @@ describe Berkshelf::Resolver, :chef_server, vcr: { record: :new_episodes, serial
20
22
  subject { described_class }
21
23
 
22
24
  describe "::initialize" do
23
- let(:downloader) { Berkshelf::Downloader.new(Berkshelf.cookbook_store) }
24
-
25
25
  it "adds the specified sources to the sources hash" do
26
- resolver = subject.new(downloader, sources: [source], skip_dependencies: true)
26
+ resolver = subject.new(berksfile, sources: [source], skip_dependencies: true)
27
27
 
28
28
  resolver.should have_source(source.name)
29
29
  end
30
30
 
31
31
  it "should not add dependencies if requested" do
32
- resolver = subject.new(downloader, sources: [source], skip_dependencies: true)
32
+ resolver = subject.new(berksfile, sources: [source], skip_dependencies: true)
33
33
 
34
34
  resolver.should_not have_source("nginx")
35
35
  end
36
36
 
37
37
  it "adds the dependencies of the source as sources" do
38
- resolver = subject.new(downloader, sources: [source])
38
+ resolver = subject.new(berksfile, sources: [source])
39
39
 
40
40
  resolver.should have_source("nginx")
41
41
  end
42
42
  end
43
43
  end
44
44
 
45
- let(:downloader) { Berkshelf::Downloader.new(Berkshelf.cookbook_store) }
46
- subject { described_class.new(downloader) }
45
+ subject { described_class.new(berksfile) }
47
46
 
48
47
  describe "#add_source" do
49
48
  let(:package_version) { double('package-version', dependencies: Array.new) }
@@ -92,7 +92,8 @@ describe Thor::Shell::Color do
92
92
  end
93
93
 
94
94
  it 'calls #say with yellow coloring' do
95
- stdout.should_receive(:puts).with("\e[33mwarning\e[0m")
95
+ stdout.stub :tty?
96
+ stdout.should_receive(:puts).with("warning")
96
97
  stdout.should_receive(:flush).with(no_args())
97
98
  subject.warn 'warning'
98
99
  end
@@ -1,9 +1,84 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Berkshelf::Chef::Config do
4
- describe "::path" do
5
- subject { described_class.path }
4
+ subject { described_class }
6
5
 
7
- it { should be_a String }
6
+ describe '::path' do
7
+ let(:path) { '/fake/path/for/.chef' }
8
+ let(:config) { File.join(path, 'knife.rb') }
9
+
10
+ before do
11
+ ENV.stub(:[]).and_return(nil)
12
+
13
+ File.stub(:exists?).with(any_args()).and_return(false)
14
+ File.stub(:exists?).with(config).and_return(true)
15
+
16
+ subject.instance_variable_set(:@path, nil)
17
+ end
18
+
19
+ it 'uses $BERKSHELF_CHEF_CONFIG' do
20
+ ENV.stub(:[]).with('BERKSHELF_CHEF_CONFIG').and_return(config)
21
+ expect(subject.path).to eq(config)
22
+ end
23
+
24
+ it 'uses $KNIFE_HOME' do
25
+ ENV.stub(:[]).with('KNIFE_HOME').and_return(path)
26
+ expect(subject.path).to eq(config)
27
+ end
28
+
29
+ it 'uses ::working_dir' do
30
+ Berkshelf::Chef::Config.stub(:working_dir).and_return(path)
31
+ expect(subject.path).to eq(config)
32
+ end
33
+
34
+ context 'an ascending search' do
35
+ context 'with multiple .chef directories' do
36
+ let(:path) { '/fake/.chef/path/with/multiple/.chef/directories' }
37
+
38
+ before do
39
+ Berkshelf::Chef::Config.stub(:working_dir).and_return(path)
40
+ File.stub(:exists?).and_return(false)
41
+ File.stub(:exists?).with('/fake/.chef/knife.rb').and_return(true)
42
+ File.stub(:exists?).with('/fake/.chef/path/with/multiple/.chef/knife.rb').and_return(true)
43
+ end
44
+
45
+ it 'chooses the closest path' do
46
+ expect(subject.path).to eq('/fake/.chef/path/with/multiple/.chef/knife.rb')
47
+ end
48
+ end
49
+
50
+ context 'with the current directory as .chef' do
51
+ let(:path) { '/fake/.chef' }
52
+
53
+ before do
54
+ Berkshelf::Chef::Config.stub(:working_dir).and_return(path)
55
+ File.stub(:exists?).and_return(false)
56
+ File.stub(:exists?).with('/fake/.chef/knife.rb').and_return(true)
57
+ end
58
+
59
+ it 'uses the current directory' do
60
+ expect(subject.path).to eq('/fake/.chef/knife.rb')
61
+ end
62
+ end
63
+
64
+ context 'with .chef at the top-level' do
65
+ let(:path) { '/.chef/some/random/sub/directories' }
66
+
67
+ before do
68
+ Berkshelf::Chef::Config.stub(:working_dir).and_return(path)
69
+ File.stub(:exists?).and_return(false)
70
+ File.stub(:exists?).with('/.chef/knife.rb').and_return(true)
71
+ end
72
+
73
+ it 'uses the top-level directory' do
74
+ expect(subject.path).to eq('/.chef/knife.rb')
75
+ end
76
+ end
77
+ end
78
+
79
+ it 'uses $HOME' do
80
+ ENV.stub(:[]).with('HOME').and_return(File.join(path, '..'))
81
+ expect(subject.path).to eq(config)
82
+ end
8
83
  end
9
- end
84
+ end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkshelf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0.rc1
5
- prerelease: 6
4
+ version: 1.4.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jamie Winsor
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-03-22 00:00:00.000000000 Z
15
+ date: 2013-04-13 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: celluloid
@@ -229,7 +229,7 @@ dependencies:
229
229
  requirements:
230
230
  - - ~>
231
231
  - !ruby/object:Gem::Version
232
- version: 0.16.0
232
+ version: 0.18.0
233
233
  type: :runtime
234
234
  prerelease: false
235
235
  version_requirements: !ruby/object:Gem::Requirement
@@ -237,7 +237,7 @@ dependencies:
237
237
  requirements:
238
238
  - - ~>
239
239
  - !ruby/object:Gem::Version
240
- version: 0.16.0
240
+ version: 0.18.0
241
241
  - !ruby/object:Gem::Dependency
242
242
  name: retryable
243
243
  requirement: !ruby/object:Gem::Requirement
@@ -254,6 +254,22 @@ dependencies:
254
254
  - - ! '>='
255
255
  - !ruby/object:Gem::Version
256
256
  version: '0'
257
+ - !ruby/object:Gem::Dependency
258
+ name: addressable
259
+ requirement: !ruby/object:Gem::Requirement
260
+ none: false
261
+ requirements:
262
+ - - ! '>='
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ type: :runtime
266
+ prerelease: false
267
+ version_requirements: !ruby/object:Gem::Requirement
268
+ none: false
269
+ requirements:
270
+ - - ! '>='
271
+ - !ruby/object:Gem::Version
272
+ version: '0'
257
273
  - !ruby/object:Gem::Dependency
258
274
  name: aruba
259
275
  requirement: !ruby/object:Gem::Requirement
@@ -441,10 +457,12 @@ files:
441
457
  - bin/berks
442
458
  - features/config.feature
443
459
  - features/configure_command.feature
460
+ - features/contingent_command.feature
444
461
  - features/cookbook_command.feature
445
462
  - features/default_locations.feature
446
463
  - features/groups_install.feature
447
464
  - features/help.feature
465
+ - features/info_command.feature
448
466
  - features/init_command.feature
449
467
  - features/install_command.feature
450
468
  - features/json_formatter.feature
@@ -472,7 +490,9 @@ files:
472
490
  - generator_files/Vagrantfile.erb
473
491
  - generator_files/chefignore
474
492
  - generator_files/default_recipe.erb
493
+ - generator_files/default_test.rb.erb
475
494
  - generator_files/gitignore.erb
495
+ - generator_files/helpers.rb.erb
476
496
  - generator_files/licenses/apachev2.erb
477
497
  - generator_files/licenses/gplv2.erb
478
498
  - generator_files/licenses/gplv3.erb
@@ -518,6 +538,7 @@ files:
518
538
  - lib/berkshelf/mixin/logging.rb
519
539
  - lib/berkshelf/mixin/path_helpers.rb
520
540
  - lib/berkshelf/resolver.rb
541
+ - lib/berkshelf/test.rb
521
542
  - lib/berkshelf/thor.rb
522
543
  - lib/berkshelf/ui.rb
523
544
  - lib/berkshelf/version.rb
@@ -612,22 +633,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
612
633
  required_rubygems_version: !ruby/object:Gem::Requirement
613
634
  none: false
614
635
  requirements:
615
- - - ! '>'
636
+ - - ! '>='
616
637
  - !ruby/object:Gem::Version
617
- version: 1.3.1
638
+ version: '0'
639
+ segments:
640
+ - 0
641
+ hash: -3407693517536282074
618
642
  requirements: []
619
643
  rubyforge_project:
620
- rubygems_version: 1.8.24
644
+ rubygems_version: 1.8.23
621
645
  signing_key:
622
646
  specification_version: 3
623
647
  summary: Manages a Cookbook's, or an Application's, Cookbook dependencies
624
648
  test_files:
625
649
  - features/config.feature
626
650
  - features/configure_command.feature
651
+ - features/contingent_command.feature
627
652
  - features/cookbook_command.feature
628
653
  - features/default_locations.feature
629
654
  - features/groups_install.feature
630
655
  - features/help.feature
656
+ - features/info_command.feature
631
657
  - features/init_command.feature
632
658
  - features/install_command.feature
633
659
  - features/json_formatter.feature