ridley 4.2.0 → 4.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile +1 -1
- data/README.md +4 -4
- data/lib/ridley/connection.rb +1 -2
- data/lib/ridley/errors.rb +1 -0
- data/lib/ridley/mixin/params_validate.rb +4 -0
- data/lib/ridley/version.rb +1 -1
- data/ridley.gemspec +2 -2
- data/spec/acceptance/client_resource_spec.rb +12 -12
- data/spec/acceptance/cookbook_resource_spec.rb +15 -15
- data/spec/acceptance/data_bag_item_resource_spec.rb +14 -14
- data/spec/acceptance/data_bag_resource_spec.rb +4 -4
- data/spec/acceptance/environment_resource_spec.rb +14 -14
- data/spec/acceptance/node_resource_spec.rb +15 -15
- data/spec/acceptance/role_resource_spec.rb +14 -14
- data/spec/acceptance/sandbox_resource_spec.rb +3 -3
- data/spec/acceptance/search_resource_spec.rb +6 -6
- data/spec/acceptance/user_resource_spec.rb +21 -21
- data/spec/support/each_matcher.rb +2 -2
- data/spec/support/filepath_matchers.rb +2 -2
- data/spec/support/shared_examples/ridley_resource.rb +39 -39
- data/spec/unit/ridley/chef/cookbook/metadata_spec.rb +8 -8
- data/spec/unit/ridley/chef/cookbook/syntax_check_spec.rb +15 -15
- data/spec/unit/ridley/chef/cookbook_spec.rb +124 -118
- data/spec/unit/ridley/chef/digester_spec.rb +2 -2
- data/spec/unit/ridley/chef_object_spec.rb +35 -35
- data/spec/unit/ridley/chef_objects/client_object_spec.rb +2 -2
- data/spec/unit/ridley/chef_objects/cookbook_object_spec.rb +12 -12
- data/spec/unit/ridley/chef_objects/data_bag_item_object_spec.rb +7 -7
- data/spec/unit/ridley/chef_objects/data_bag_object_spec.rb +4 -1
- data/spec/unit/ridley/chef_objects/environment_object_spec.rb +10 -10
- data/spec/unit/ridley/chef_objects/node_object_spec.rb +28 -28
- data/spec/unit/ridley/chef_objects/role_object_spec.rb +10 -10
- data/spec/unit/ridley/chef_objects/sandbox_object_spec.rb +6 -6
- data/spec/unit/ridley/client_spec.rb +59 -21
- data/spec/unit/ridley/connection_spec.rb +7 -7
- data/spec/unit/ridley/errors_spec.rb +3 -3
- data/spec/unit/ridley/middleware/chef_auth_spec.rb +2 -2
- data/spec/unit/ridley/middleware/chef_response_spec.rb +29 -29
- data/spec/unit/ridley/middleware/parse_json_spec.rb +14 -14
- data/spec/unit/ridley/mixins/from_file_spec.rb +3 -3
- data/spec/unit/ridley/resource_spec.rb +5 -5
- data/spec/unit/ridley/resources/cookbook_resource_spec.rb +10 -10
- data/spec/unit/ridley/resources/data_bag_item_resource_spec.rb +1 -1
- data/spec/unit/ridley/resources/data_bag_resource_spec.rb +6 -3
- data/spec/unit/ridley/resources/environment_resource_spec.rb +4 -4
- data/spec/unit/ridley/resources/role_resource_spec.rb +1 -1
- data/spec/unit/ridley/resources/sandbox_resource_spec.rb +7 -7
- data/spec/unit/ridley/resources/search_resource_spec.rb +22 -22
- data/spec/unit/ridley/sandbox_uploader_spec.rb +3 -3
- data/spec/unit/ridley_spec.rb +6 -6
- metadata +15 -18
- data/lib/ridley/middleware/gzip.rb +0 -18
- data/spec/unit/ridley/middleware/gzip_spec.rb +0 -59
@@ -17,36 +17,36 @@ describe Ridley::Chef::Cookbook::Metadata do
|
|
17
17
|
:choice => [ "test1", "test2" ],
|
18
18
|
:default => "test1"
|
19
19
|
}
|
20
|
-
|
20
|
+
expect {
|
21
21
|
subject.attribute("test_cookbook/test", options)
|
22
|
-
}.
|
22
|
+
}.not_to raise_error
|
23
23
|
|
24
24
|
options = {
|
25
25
|
:type => "boolean",
|
26
26
|
:choice => [ true, false ],
|
27
27
|
:default => true
|
28
28
|
}
|
29
|
-
|
29
|
+
expect {
|
30
30
|
subject.attribute("test_cookbook/test", options)
|
31
|
-
}.
|
31
|
+
}.not_to raise_error
|
32
32
|
|
33
33
|
options = {
|
34
34
|
:type => "numeric",
|
35
35
|
:choice => [ 1337, 420 ],
|
36
36
|
:default => 1337
|
37
37
|
}
|
38
|
-
|
38
|
+
expect {
|
39
39
|
subject.attribute("test_cookbook/test", options)
|
40
|
-
}.
|
40
|
+
}.not_to raise_error
|
41
41
|
|
42
42
|
options = {
|
43
43
|
:type => "numeric",
|
44
44
|
:choice => [ true, "false" ],
|
45
45
|
:default => false
|
46
46
|
}
|
47
|
-
|
47
|
+
expect {
|
48
48
|
subject.attribute("test_cookbook/test", options)
|
49
|
-
}.
|
49
|
+
}.to raise_error
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -12,7 +12,7 @@ describe Ridley::Chef::Cookbook::SyntaxCheck do
|
|
12
12
|
subject { syntax_check }
|
13
13
|
|
14
14
|
before(:each) do
|
15
|
-
subject.
|
15
|
+
allow(subject).to receive(:chefignore) { chefignore }
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "#ruby_files" do
|
@@ -55,7 +55,7 @@ describe Ridley::Chef::Cookbook::SyntaxCheck do
|
|
55
55
|
it "checks if a file has already been validated" do
|
56
56
|
valid_template_file = cookbook_dir.join("templates/default/temp.txt.erb").to_s
|
57
57
|
subject.validated(valid_template_file)
|
58
|
-
expect(subject.validated?(valid_template_file)).to
|
58
|
+
expect(subject.validated?(valid_template_file)).to be_truthy
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -63,7 +63,7 @@ describe Ridley::Chef::Cookbook::SyntaxCheck do
|
|
63
63
|
let(:validated_files) { double('validated_files') }
|
64
64
|
|
65
65
|
before(:each) do
|
66
|
-
subject.
|
66
|
+
allow(subject).to receive(:validated_files) { validated_files }
|
67
67
|
end
|
68
68
|
|
69
69
|
it "records a file as validated" do
|
@@ -77,35 +77,35 @@ describe Ridley::Chef::Cookbook::SyntaxCheck do
|
|
77
77
|
|
78
78
|
describe "#validate_ruby_files" do
|
79
79
|
it "asks #untested_ruby_files for a list of files and calls #validate_ruby_file on each" do
|
80
|
-
subject.
|
81
|
-
expect(subject.validate_ruby_files).to
|
80
|
+
allow(subject).to receive(:validate_ruby_file).with(anything()).exactly(9).times { true }
|
81
|
+
expect(subject.validate_ruby_files).to be_truthy
|
82
82
|
end
|
83
83
|
|
84
84
|
it "marks the successfully validated ruby files" do
|
85
|
-
subject.
|
86
|
-
expect(subject.validate_ruby_files).to
|
85
|
+
allow(subject).to receive(:validated).with(anything()).exactly(9).times
|
86
|
+
expect(subject.validate_ruby_files).to be_truthy
|
87
87
|
end
|
88
88
|
|
89
89
|
it "returns false if any ruby file fails to validate" do
|
90
|
-
subject.
|
91
|
-
expect(subject.validate_ruby_files).to
|
90
|
+
allow(subject).to receive(:validate_ruby_file).with(/\.rb$/) { false }
|
91
|
+
expect(subject.validate_ruby_files).to be_falsey
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
describe "#validate_templates" do
|
96
96
|
it "asks #untested_template_files for a list of erb files and calls #validate_template on each" do
|
97
|
-
subject.
|
98
|
-
expect(subject.validate_templates).to
|
97
|
+
allow(subject).to receive(:validate_template).with(anything()).exactly(9).times { true }
|
98
|
+
expect(subject.validate_templates).to be_truthy
|
99
99
|
end
|
100
100
|
|
101
101
|
it "marks the successfully validated erb files" do
|
102
|
-
subject.
|
103
|
-
expect(subject.validate_templates).to
|
102
|
+
allow(subject).to receive(:validated).with(anything()).exactly(9).times
|
103
|
+
expect(subject.validate_templates).to be_truthy
|
104
104
|
end
|
105
105
|
|
106
106
|
it "returns false if any erb file fails to validate" do
|
107
|
-
subject.
|
108
|
-
expect(subject.validate_templates).to
|
107
|
+
allow(subject).to receive(:validate_template).with(/\.erb$/) { false }
|
108
|
+
expect(subject.validate_templates).to be_falsey
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
@@ -8,18 +8,18 @@ describe Ridley::Chef::Cookbook do
|
|
8
8
|
let(:cookbook_path) { fixtures_path.join("example_cookbook") }
|
9
9
|
|
10
10
|
it "returns an instance of Ridley::Chef::Cookbook" do
|
11
|
-
subject.from_path(cookbook_path).
|
11
|
+
expect(subject.from_path(cookbook_path)).to be_a(described_class)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "has a cookbook_name attribute set to the value of the 'name' attribute in the metadata" do
|
15
|
-
subject.from_path(cookbook_path).cookbook_name.
|
15
|
+
expect(subject.from_path(cookbook_path).cookbook_name).to eql("example_cookbook")
|
16
16
|
end
|
17
17
|
|
18
18
|
context "given a path that does not contain a metadata file" do
|
19
19
|
it "raises an IOError" do
|
20
|
-
|
20
|
+
expect {
|
21
21
|
subject.from_path(Dir.mktmpdir)
|
22
|
-
}.
|
22
|
+
}.to raise_error(IOError)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -51,7 +51,7 @@ describe Ridley::Chef::Cookbook do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "sets the name of the cookbook from the metadata.rb" do
|
54
|
-
subject.from_path(cookbook_path).cookbook_name.
|
54
|
+
expect(subject.from_path(cookbook_path).cookbook_name).to eql("rspec_test")
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -73,7 +73,7 @@ describe Ridley::Chef::Cookbook do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it "prefers the metadata.json" do
|
76
|
-
subject.from_path(cookbook_path).cookbook_name.
|
76
|
+
expect(subject.from_path(cookbook_path).cookbook_name).to eql("json_metadata")
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -81,7 +81,7 @@ describe Ridley::Chef::Cookbook do
|
|
81
81
|
describe "::checksum" do
|
82
82
|
it "delegates to Ridley::Chef::Digester.md5_checksum_for_file" do
|
83
83
|
path = fixtures_path.join("example_cookbook", "metadata.rb")
|
84
|
-
Ridley::Chef::Digester.
|
84
|
+
expect(Ridley::Chef::Digester).to receive(:md5_checksum_for_file).with(path)
|
85
85
|
|
86
86
|
subject.checksum(path)
|
87
87
|
end
|
@@ -96,11 +96,11 @@ describe Ridley::Chef::Cookbook do
|
|
96
96
|
|
97
97
|
describe "#checksums" do
|
98
98
|
it "returns a Hash" do
|
99
|
-
subject.checksums.
|
99
|
+
expect(subject.checksums).to be_a(Hash)
|
100
100
|
end
|
101
101
|
|
102
102
|
it "has a key value for every cookbook file" do
|
103
|
-
subject.checksums.
|
103
|
+
expect(subject.checksums.size).to eq(subject.send(:files).length)
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
@@ -118,10 +118,10 @@ describe Ridley::Chef::Cookbook do
|
|
118
118
|
end
|
119
119
|
|
120
120
|
it "compiles the raw metadata.rb into a metadata.json file in the path of the cookbook" do
|
121
|
-
expect(subject.compiled_metadata?).to
|
121
|
+
expect(subject.compiled_metadata?).to be_falsey
|
122
122
|
subject.compile_metadata
|
123
123
|
subject.reload
|
124
|
-
expect(subject.compiled_metadata?).to
|
124
|
+
expect(subject.compiled_metadata?).to be_truthy
|
125
125
|
expect(subject.cookbook_name).to eql("rspec_test")
|
126
126
|
expect(subject.version).to eql("1.2.3")
|
127
127
|
end
|
@@ -132,7 +132,7 @@ describe Ridley::Chef::Cookbook do
|
|
132
132
|
|
133
133
|
it "writes the compiled metadata to a metadata.json file at the given out path" do
|
134
134
|
subject.compile_metadata(out_path)
|
135
|
-
expect(File.exist?(File.join(out_path, "metadata.json"))).to
|
135
|
+
expect(File.exist?(File.join(out_path, "metadata.json"))).to be_truthy
|
136
136
|
end
|
137
137
|
end
|
138
138
|
end
|
@@ -152,7 +152,10 @@ describe Ridley::Chef::Cookbook do
|
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
|
-
|
155
|
+
describe '#compiled_metadata?' do
|
156
|
+
subject { super().compiled_metadata? }
|
157
|
+
it { is_expected.to be_truthy }
|
158
|
+
end
|
156
159
|
end
|
157
160
|
|
158
161
|
context "when a metadata.json file is not present" do
|
@@ -164,7 +167,10 @@ describe Ridley::Chef::Cookbook do
|
|
164
167
|
end
|
165
168
|
end
|
166
169
|
|
167
|
-
|
170
|
+
describe '#compiled_metadata?' do
|
171
|
+
subject { super().compiled_metadata? }
|
172
|
+
it { is_expected.to be_falsey }
|
173
|
+
end
|
168
174
|
end
|
169
175
|
end
|
170
176
|
|
@@ -181,7 +187,7 @@ describe Ridley::Chef::Cookbook do
|
|
181
187
|
:providers,
|
182
188
|
:root_files
|
183
189
|
].each do |category|
|
184
|
-
subject.manifest.
|
190
|
+
expect(subject.manifest).to have_key(category)
|
185
191
|
end
|
186
192
|
end
|
187
193
|
end
|
@@ -190,31 +196,31 @@ describe Ridley::Chef::Cookbook do
|
|
190
196
|
let(:syntax_checker) { double('syntax_checker') }
|
191
197
|
|
192
198
|
before(:each) do
|
193
|
-
subject.
|
199
|
+
allow(subject).to receive(:syntax_checker) { syntax_checker }
|
194
200
|
end
|
195
201
|
|
196
202
|
it "asks the syntax_checker to validate the ruby and template files of the cookbook" do
|
197
|
-
syntax_checker.
|
198
|
-
syntax_checker.
|
203
|
+
expect(syntax_checker).to receive(:validate_ruby_files).and_return(true)
|
204
|
+
expect(syntax_checker).to receive(:validate_templates).and_return(true)
|
199
205
|
|
200
206
|
subject.validate
|
201
207
|
end
|
202
208
|
|
203
209
|
it "raises CookbookSyntaxError if the cookbook contains invalid ruby files" do
|
204
|
-
syntax_checker.
|
210
|
+
expect(syntax_checker).to receive(:validate_ruby_files).and_return(false)
|
205
211
|
|
206
|
-
|
212
|
+
expect {
|
207
213
|
subject.validate
|
208
|
-
}.
|
214
|
+
}.to raise_error(Ridley::Errors::CookbookSyntaxError)
|
209
215
|
end
|
210
216
|
|
211
217
|
it "raises CookbookSyntaxError if the cookbook contains invalid template files" do
|
212
|
-
syntax_checker.
|
213
|
-
syntax_checker.
|
218
|
+
expect(syntax_checker).to receive(:validate_ruby_files).and_return(true)
|
219
|
+
expect(syntax_checker).to receive(:validate_templates).and_return(false)
|
214
220
|
|
215
|
-
|
221
|
+
expect {
|
216
222
|
subject.validate
|
217
|
-
}.
|
223
|
+
}.to raise_error(Ridley::Errors::CookbookSyntaxError)
|
218
224
|
end
|
219
225
|
end
|
220
226
|
|
@@ -223,23 +229,23 @@ describe Ridley::Chef::Cookbook do
|
|
223
229
|
before(:each) { @metadata = subject.file_metadata(:file, file) }
|
224
230
|
|
225
231
|
it "has a :path key whose value is a relative path from the CachedCookbook's path" do
|
226
|
-
@metadata.
|
227
|
-
@metadata[:path].
|
228
|
-
@metadata[:path].
|
232
|
+
expect(@metadata).to have_key(:path)
|
233
|
+
expect(@metadata[:path]).to be_relative_path
|
234
|
+
expect(@metadata[:path]).to eql("files/default/file.h")
|
229
235
|
end
|
230
236
|
|
231
237
|
it "has a :name key whose value is the basename of the target file" do
|
232
|
-
@metadata.
|
233
|
-
@metadata[:name].
|
238
|
+
expect(@metadata).to have_key(:name)
|
239
|
+
expect(@metadata[:name]).to eql("file.h")
|
234
240
|
end
|
235
241
|
|
236
242
|
it "has a :checksum key whose value is the checksum of the target file" do
|
237
|
-
@metadata.
|
238
|
-
@metadata[:checksum].
|
243
|
+
expect(@metadata).to have_key(:checksum)
|
244
|
+
expect(@metadata[:checksum]).to eql("7b1ebd2ff580ca9dc46fb27ec1653bf2")
|
239
245
|
end
|
240
246
|
|
241
247
|
it "has a :specificity key" do
|
242
|
-
@metadata.
|
248
|
+
expect(@metadata).to have_key(:specificity)
|
243
249
|
end
|
244
250
|
|
245
251
|
context "given a file or template in a 'default' directory" do
|
@@ -247,7 +253,7 @@ describe Ridley::Chef::Cookbook do
|
|
247
253
|
before(:each) { @metadata = subject.file_metadata(:files, file) }
|
248
254
|
|
249
255
|
it "has a specificity of 'default'" do
|
250
|
-
@metadata[:specificity].
|
256
|
+
expect(@metadata[:specificity]).to eql("default")
|
251
257
|
end
|
252
258
|
end
|
253
259
|
|
@@ -256,7 +262,7 @@ describe Ridley::Chef::Cookbook do
|
|
256
262
|
before(:each) { @metadata = subject.file_metadata(:files, file) }
|
257
263
|
|
258
264
|
it "has a specificity of 'ubuntu'" do
|
259
|
-
@metadata[:specificity].
|
265
|
+
expect(@metadata[:specificity]).to eql("ubuntu")
|
260
266
|
end
|
261
267
|
end
|
262
268
|
end
|
@@ -271,7 +277,7 @@ describe Ridley::Chef::Cookbook do
|
|
271
277
|
let(:category) { :recipes }
|
272
278
|
|
273
279
|
it "has a specificity of 'default'" do
|
274
|
-
@specificity.
|
280
|
+
expect(@specificity).to eql("default")
|
275
281
|
end
|
276
282
|
end
|
277
283
|
|
@@ -279,7 +285,7 @@ describe Ridley::Chef::Cookbook do
|
|
279
285
|
let(:relpath) { 'default/config.erb' }
|
280
286
|
|
281
287
|
it "has a specificity of 'default'" do
|
282
|
-
@specificity.
|
288
|
+
expect(@specificity).to eql("default")
|
283
289
|
end
|
284
290
|
end
|
285
291
|
|
@@ -287,7 +293,7 @@ describe Ridley::Chef::Cookbook do
|
|
287
293
|
let(:relpath) { 'centos/config.erb' }
|
288
294
|
|
289
295
|
it "has a specificity of 'centos'" do
|
290
|
-
@specificity.
|
296
|
+
expect(@specificity).to eql("centos")
|
291
297
|
end
|
292
298
|
end
|
293
299
|
|
@@ -295,7 +301,7 @@ describe Ridley::Chef::Cookbook do
|
|
295
301
|
let(:relpath) { 'config.erb' }
|
296
302
|
|
297
303
|
it "has a specificity of 'root_default'" do
|
298
|
-
@specificity.
|
304
|
+
expect(@specificity).to eql("root_default")
|
299
305
|
end
|
300
306
|
end
|
301
307
|
end
|
@@ -304,255 +310,255 @@ describe Ridley::Chef::Cookbook do
|
|
304
310
|
subject { cookbook.to_hash }
|
305
311
|
|
306
312
|
it "has a :frozen? flag" do
|
307
|
-
subject.
|
313
|
+
expect(subject).to have_key(:frozen?)
|
308
314
|
end
|
309
315
|
|
310
316
|
it "has a :recipes key with a value of an Array Hashes" do
|
311
|
-
subject.
|
312
|
-
subject[:recipes].
|
317
|
+
expect(subject).to have_key(:recipes)
|
318
|
+
expect(subject[:recipes]).to be_a(Array)
|
313
319
|
subject[:recipes].each do |item|
|
314
|
-
item.
|
320
|
+
expect(item).to be_a(Hash)
|
315
321
|
end
|
316
322
|
end
|
317
323
|
|
318
324
|
it "has a :name key value pair in a Hash of the :recipes Array of Hashes" do
|
319
|
-
subject[:recipes].first.
|
325
|
+
expect(subject[:recipes].first).to have_key(:name)
|
320
326
|
end
|
321
327
|
|
322
328
|
it "has a :path key value pair in a Hash of the :recipes Array of Hashes" do
|
323
|
-
subject[:recipes].first.
|
329
|
+
expect(subject[:recipes].first).to have_key(:path)
|
324
330
|
end
|
325
331
|
|
326
332
|
it "has a :checksum key value pair in a Hash of the :recipes Array of Hashes" do
|
327
|
-
subject[:recipes].first.
|
333
|
+
expect(subject[:recipes].first).to have_key(:checksum)
|
328
334
|
end
|
329
335
|
|
330
336
|
it "has a :specificity key value pair in a Hash of the :recipes Array of Hashes" do
|
331
|
-
subject[:recipes].first.
|
337
|
+
expect(subject[:recipes].first).to have_key(:specificity)
|
332
338
|
end
|
333
339
|
|
334
340
|
it "has a :definitions key with a value of an Array Hashes" do
|
335
|
-
subject.
|
336
|
-
subject[:definitions].
|
341
|
+
expect(subject).to have_key(:definitions)
|
342
|
+
expect(subject[:definitions]).to be_a(Array)
|
337
343
|
subject[:definitions].each do |item|
|
338
|
-
item.
|
344
|
+
expect(item).to be_a(Hash)
|
339
345
|
end
|
340
346
|
end
|
341
347
|
|
342
348
|
it "has a :name key value pair in a Hash of the :definitions Array of Hashes" do
|
343
|
-
subject[:definitions].first.
|
349
|
+
expect(subject[:definitions].first).to have_key(:name)
|
344
350
|
end
|
345
351
|
|
346
352
|
it "has a :path key value pair in a Hash of the :definitions Array of Hashes" do
|
347
|
-
subject[:definitions].first.
|
353
|
+
expect(subject[:definitions].first).to have_key(:path)
|
348
354
|
end
|
349
355
|
|
350
356
|
it "has a :checksum key value pair in a Hash of the :definitions Array of Hashes" do
|
351
|
-
subject[:definitions].first.
|
357
|
+
expect(subject[:definitions].first).to have_key(:checksum)
|
352
358
|
end
|
353
359
|
|
354
360
|
it "has a :specificity key value pair in a Hash of the :definitions Array of Hashes" do
|
355
|
-
subject[:definitions].first.
|
361
|
+
expect(subject[:definitions].first).to have_key(:specificity)
|
356
362
|
end
|
357
363
|
|
358
364
|
it "has a :libraries key with a value of an Array Hashes" do
|
359
|
-
subject.
|
360
|
-
subject[:libraries].
|
365
|
+
expect(subject).to have_key(:libraries)
|
366
|
+
expect(subject[:libraries]).to be_a(Array)
|
361
367
|
subject[:libraries].each do |item|
|
362
|
-
item.
|
368
|
+
expect(item).to be_a(Hash)
|
363
369
|
end
|
364
370
|
end
|
365
371
|
|
366
372
|
it "has a :name key value pair in a Hash of the :libraries Array of Hashes" do
|
367
|
-
subject[:libraries].first.
|
373
|
+
expect(subject[:libraries].first).to have_key(:name)
|
368
374
|
end
|
369
375
|
|
370
376
|
it "has a :path key value pair in a Hash of the :libraries Array of Hashes" do
|
371
|
-
subject[:libraries].first.
|
377
|
+
expect(subject[:libraries].first).to have_key(:path)
|
372
378
|
end
|
373
379
|
|
374
380
|
it "has a :checksum key value pair in a Hash of the :libraries Array of Hashes" do
|
375
|
-
subject[:libraries].first.
|
381
|
+
expect(subject[:libraries].first).to have_key(:checksum)
|
376
382
|
end
|
377
383
|
|
378
384
|
it "has a :specificity key value pair in a Hash of the :libraries Array of Hashes" do
|
379
|
-
subject[:libraries].first.
|
385
|
+
expect(subject[:libraries].first).to have_key(:specificity)
|
380
386
|
end
|
381
387
|
|
382
388
|
it "has a :attributes key with a value of an Array Hashes" do
|
383
|
-
subject.
|
384
|
-
subject[:attributes].
|
389
|
+
expect(subject).to have_key(:attributes)
|
390
|
+
expect(subject[:attributes]).to be_a(Array)
|
385
391
|
subject[:attributes].each do |item|
|
386
|
-
item.
|
392
|
+
expect(item).to be_a(Hash)
|
387
393
|
end
|
388
394
|
end
|
389
395
|
|
390
396
|
it "has a :name key value pair in a Hash of the :attributes Array of Hashes" do
|
391
|
-
subject[:attributes].first.
|
397
|
+
expect(subject[:attributes].first).to have_key(:name)
|
392
398
|
end
|
393
399
|
|
394
400
|
it "has a :path key value pair in a Hash of the :attributes Array of Hashes" do
|
395
|
-
subject[:attributes].first.
|
401
|
+
expect(subject[:attributes].first).to have_key(:path)
|
396
402
|
end
|
397
403
|
|
398
404
|
it "has a :checksum key value pair in a Hash of the :attributes Array of Hashes" do
|
399
|
-
subject[:attributes].first.
|
405
|
+
expect(subject[:attributes].first).to have_key(:checksum)
|
400
406
|
end
|
401
407
|
|
402
408
|
it "has a :specificity key value pair in a Hash of the :attributes Array of Hashes" do
|
403
|
-
subject[:attributes].first.
|
409
|
+
expect(subject[:attributes].first).to have_key(:specificity)
|
404
410
|
end
|
405
411
|
|
406
412
|
it "has a :files key with a value of an Array Hashes" do
|
407
|
-
subject.
|
408
|
-
subject[:files].
|
413
|
+
expect(subject).to have_key(:files)
|
414
|
+
expect(subject[:files]).to be_a(Array)
|
409
415
|
subject[:files].each do |item|
|
410
|
-
item.
|
416
|
+
expect(item).to be_a(Hash)
|
411
417
|
end
|
412
418
|
end
|
413
419
|
|
414
420
|
it "has a :name key value pair in a Hash of the :files Array of Hashes" do
|
415
|
-
subject[:files].first.
|
421
|
+
expect(subject[:files].first).to have_key(:name)
|
416
422
|
end
|
417
423
|
|
418
424
|
it "has a :path key value pair in a Hash of the :files Array of Hashes" do
|
419
|
-
subject[:files].first.
|
425
|
+
expect(subject[:files].first).to have_key(:path)
|
420
426
|
end
|
421
427
|
|
422
428
|
it "has a :checksum key value pair in a Hash of the :files Array of Hashes" do
|
423
|
-
subject[:files].first.
|
429
|
+
expect(subject[:files].first).to have_key(:checksum)
|
424
430
|
end
|
425
431
|
|
426
432
|
it "has a :specificity key value pair in a Hash of the :files Array of Hashes" do
|
427
|
-
subject[:files].first.
|
433
|
+
expect(subject[:files].first).to have_key(:specificity)
|
428
434
|
end
|
429
435
|
|
430
436
|
it "has a :templates key with a value of an Array Hashes" do
|
431
|
-
subject.
|
432
|
-
subject[:templates].
|
437
|
+
expect(subject).to have_key(:templates)
|
438
|
+
expect(subject[:templates]).to be_a(Array)
|
433
439
|
subject[:templates].each do |item|
|
434
|
-
item.
|
440
|
+
expect(item).to be_a(Hash)
|
435
441
|
end
|
436
442
|
end
|
437
443
|
|
438
444
|
it "has a :name key value pair in a Hash of the :templates Array of Hashes" do
|
439
|
-
subject[:templates].first.
|
445
|
+
expect(subject[:templates].first).to have_key(:name)
|
440
446
|
end
|
441
447
|
|
442
448
|
it "has a :path key value pair in a Hash of the :templates Array of Hashes" do
|
443
|
-
subject[:templates].first.
|
449
|
+
expect(subject[:templates].first).to have_key(:path)
|
444
450
|
end
|
445
451
|
|
446
452
|
it "has a :checksum key value pair in a Hash of the :templates Array of Hashes" do
|
447
|
-
subject[:templates].first.
|
453
|
+
expect(subject[:templates].first).to have_key(:checksum)
|
448
454
|
end
|
449
455
|
|
450
456
|
it "has a :specificity key value pair in a Hash of the :templates Array of Hashes" do
|
451
|
-
subject[:templates].first.
|
457
|
+
expect(subject[:templates].first).to have_key(:specificity)
|
452
458
|
end
|
453
459
|
|
454
460
|
it "has a :resources key with a value of an Array Hashes" do
|
455
|
-
subject.
|
456
|
-
subject[:resources].
|
461
|
+
expect(subject).to have_key(:resources)
|
462
|
+
expect(subject[:resources]).to be_a(Array)
|
457
463
|
subject[:resources].each do |item|
|
458
|
-
item.
|
464
|
+
expect(item).to be_a(Hash)
|
459
465
|
end
|
460
466
|
end
|
461
467
|
|
462
468
|
it "has a :name key value pair in a Hash of the :resources Array of Hashes" do
|
463
|
-
subject[:resources].first.
|
469
|
+
expect(subject[:resources].first).to have_key(:name)
|
464
470
|
end
|
465
471
|
|
466
472
|
it "has a :path key value pair in a Hash of the :resources Array of Hashes" do
|
467
|
-
subject[:resources].first.
|
473
|
+
expect(subject[:resources].first).to have_key(:path)
|
468
474
|
end
|
469
475
|
|
470
476
|
it "has a :checksum key value pair in a Hash of the :resources Array of Hashes" do
|
471
|
-
subject[:resources].first.
|
477
|
+
expect(subject[:resources].first).to have_key(:checksum)
|
472
478
|
end
|
473
479
|
|
474
480
|
it "has a :specificity key value pair in a Hash of the :resources Array of Hashes" do
|
475
|
-
subject[:resources].first.
|
481
|
+
expect(subject[:resources].first).to have_key(:specificity)
|
476
482
|
end
|
477
483
|
|
478
484
|
it "has a :providers key with a value of an Array Hashes" do
|
479
|
-
subject.
|
480
|
-
subject[:providers].
|
485
|
+
expect(subject).to have_key(:providers)
|
486
|
+
expect(subject[:providers]).to be_a(Array)
|
481
487
|
subject[:providers].each do |item|
|
482
|
-
item.
|
488
|
+
expect(item).to be_a(Hash)
|
483
489
|
end
|
484
490
|
end
|
485
491
|
|
486
492
|
it "has a :name key value pair in a Hash of the :providers Array of Hashes" do
|
487
|
-
subject[:providers].first.
|
493
|
+
expect(subject[:providers].first).to have_key(:name)
|
488
494
|
end
|
489
495
|
|
490
496
|
it "has a :path key value pair in a Hash of the :providers Array of Hashes" do
|
491
|
-
subject[:providers].first.
|
497
|
+
expect(subject[:providers].first).to have_key(:path)
|
492
498
|
end
|
493
499
|
|
494
500
|
it "has a :checksum key value pair in a Hash of the :providers Array of Hashes" do
|
495
|
-
subject[:providers].first.
|
501
|
+
expect(subject[:providers].first).to have_key(:checksum)
|
496
502
|
end
|
497
503
|
|
498
504
|
it "has a :specificity key value pair in a Hash of the :providers Array of Hashes" do
|
499
|
-
subject[:providers].first.
|
505
|
+
expect(subject[:providers].first).to have_key(:specificity)
|
500
506
|
end
|
501
507
|
|
502
508
|
it "has a :root_files key with a value of an Array Hashes" do
|
503
|
-
subject.
|
504
|
-
subject[:root_files].
|
509
|
+
expect(subject).to have_key(:root_files)
|
510
|
+
expect(subject[:root_files]).to be_a(Array)
|
505
511
|
subject[:root_files].each do |item|
|
506
|
-
item.
|
512
|
+
expect(item).to be_a(Hash)
|
507
513
|
end
|
508
514
|
end
|
509
515
|
|
510
516
|
it "has a :name key value pair in a Hash of the :root_files Array of Hashes" do
|
511
|
-
subject[:root_files].first.
|
517
|
+
expect(subject[:root_files].first).to have_key(:name)
|
512
518
|
end
|
513
519
|
|
514
520
|
it "has a :path key value pair in a Hash of the :root_files Array of Hashes" do
|
515
|
-
subject[:root_files].first.
|
521
|
+
expect(subject[:root_files].first).to have_key(:path)
|
516
522
|
end
|
517
523
|
|
518
524
|
it "has a :checksum key value pair in a Hash of the :root_files Array of Hashes" do
|
519
|
-
subject[:root_files].first.
|
525
|
+
expect(subject[:root_files].first).to have_key(:checksum)
|
520
526
|
end
|
521
527
|
|
522
528
|
it "has a :specificity key value pair in a Hash of the :root_files Array of Hashes" do
|
523
|
-
subject[:root_files].first.
|
529
|
+
expect(subject[:root_files].first).to have_key(:specificity)
|
524
530
|
end
|
525
531
|
|
526
532
|
it "has a :cookbook_name key with a String value" do
|
527
|
-
subject.
|
528
|
-
subject[:cookbook_name].
|
533
|
+
expect(subject).to have_key(:cookbook_name)
|
534
|
+
expect(subject[:cookbook_name]).to be_a(String)
|
529
535
|
end
|
530
536
|
|
531
537
|
it "has a :metadata key with a Hashie::Mash value" do
|
532
|
-
subject.
|
533
|
-
subject[:metadata].
|
538
|
+
expect(subject).to have_key(:metadata)
|
539
|
+
expect(subject[:metadata]).to be_a(Hashie::Mash)
|
534
540
|
end
|
535
541
|
|
536
542
|
it "has a :version key with a String value" do
|
537
|
-
subject.
|
538
|
-
subject[:version].
|
543
|
+
expect(subject).to have_key(:version)
|
544
|
+
expect(subject[:version]).to be_a(String)
|
539
545
|
end
|
540
546
|
|
541
547
|
it "has a :name key with a String value" do
|
542
|
-
subject.
|
543
|
-
subject[:name].
|
548
|
+
expect(subject).to have_key(:name)
|
549
|
+
expect(subject[:name]).to be_a(String)
|
544
550
|
end
|
545
551
|
|
546
552
|
it "has a value containing the cookbook name and version separated by a dash for :name" do
|
547
553
|
name, version = subject[:name].split('-')
|
548
554
|
|
549
|
-
name.
|
550
|
-
version.
|
555
|
+
expect(name).to eql(cookbook.cookbook_name)
|
556
|
+
expect(version).to eql(cookbook.version)
|
551
557
|
end
|
552
558
|
|
553
559
|
it "has a :chef_type key with Cookbook::CHEF_TYPE as the value" do
|
554
|
-
subject.
|
555
|
-
subject[:chef_type].
|
560
|
+
expect(subject).to have_key(:chef_type)
|
561
|
+
expect(subject[:chef_type]).to eql(Ridley::Chef::Cookbook::CHEF_TYPE)
|
556
562
|
end
|
557
563
|
end
|
558
564
|
|
@@ -562,12 +568,12 @@ describe Ridley::Chef::Cookbook do
|
|
562
568
|
end
|
563
569
|
|
564
570
|
it "has a 'json_class' key with Cookbook::CHEF_JSON_CLASS as the value" do
|
565
|
-
@json.
|
566
|
-
parse_json(@json)['json_class'].
|
571
|
+
expect(@json).to have_json_path('json_class')
|
572
|
+
expect(parse_json(@json)['json_class']).to eql(Ridley::Chef::Cookbook::CHEF_JSON_CLASS)
|
567
573
|
end
|
568
574
|
|
569
575
|
it "has a 'frozen?' flag" do
|
570
|
-
@json.
|
576
|
+
expect(@json).to have_json_path('frozen?')
|
571
577
|
end
|
572
578
|
end
|
573
579
|
end
|