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
@@ -7,10 +7,10 @@ describe Ridley::RoleObject do
|
|
7
7
|
it "sets an override node attribute at the nested path" do
|
8
8
|
subject.set_override_attribute('deep.nested.item', true)
|
9
9
|
|
10
|
-
subject.override_attributes.
|
11
|
-
subject.override_attributes["deep"].
|
12
|
-
subject.override_attributes["deep"]["nested"].
|
13
|
-
subject.override_attributes["deep"]["nested"]["item"].
|
10
|
+
expect(subject.override_attributes).to have_key("deep")
|
11
|
+
expect(subject.override_attributes["deep"]).to have_key("nested")
|
12
|
+
expect(subject.override_attributes["deep"]["nested"]).to have_key("item")
|
13
|
+
expect(subject.override_attributes["deep"]["nested"]["item"]).to be_truthy
|
14
14
|
end
|
15
15
|
|
16
16
|
context "when the override attribute is already set" do
|
@@ -24,7 +24,7 @@ describe Ridley::RoleObject do
|
|
24
24
|
}
|
25
25
|
subject.set_override_attribute('deep.nested.item', true)
|
26
26
|
|
27
|
-
subject.override_attributes["deep"]["nested"]["item"].
|
27
|
+
expect(subject.override_attributes["deep"]["nested"]["item"]).to be_truthy
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -33,10 +33,10 @@ describe Ridley::RoleObject do
|
|
33
33
|
it "sets an override node attribute at the nested path" do
|
34
34
|
subject.set_default_attribute('deep.nested.item', true)
|
35
35
|
|
36
|
-
subject.default_attributes.
|
37
|
-
subject.default_attributes["deep"].
|
38
|
-
subject.default_attributes["deep"]["nested"].
|
39
|
-
subject.default_attributes["deep"]["nested"]["item"].
|
36
|
+
expect(subject.default_attributes).to have_key("deep")
|
37
|
+
expect(subject.default_attributes["deep"]).to have_key("nested")
|
38
|
+
expect(subject.default_attributes["deep"]["nested"]).to have_key("item")
|
39
|
+
expect(subject.default_attributes["deep"]["nested"]["item"]).to be_truthy
|
40
40
|
end
|
41
41
|
|
42
42
|
context "when the override attribute is already set" do
|
@@ -50,7 +50,7 @@ describe Ridley::RoleObject do
|
|
50
50
|
}
|
51
51
|
subject.set_default_attribute('deep.nested.item', true)
|
52
52
|
|
53
|
-
subject.default_attributes["deep"]["nested"]["item"].
|
53
|
+
expect(subject.default_attributes["deep"]["nested"]["item"]).to be_truthy
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -24,15 +24,15 @@ describe Ridley::SandboxObject do
|
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
27
|
-
before { subject.
|
27
|
+
before { allow(subject).to receive_messages(resource: resource) }
|
28
28
|
|
29
29
|
describe "#checksums" do
|
30
|
-
|
30
|
+
skip
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#commit" do
|
34
34
|
let(:response) { { is_completed: nil} }
|
35
|
-
before { resource.
|
35
|
+
before { expect(resource).to receive(:commit).with(subject).and_return(response) }
|
36
36
|
|
37
37
|
context "when the commit is successful" do
|
38
38
|
before { response[:is_completed] = true }
|
@@ -40,7 +40,7 @@ describe Ridley::SandboxObject do
|
|
40
40
|
it "has an 'is_completed' value of true" do
|
41
41
|
subject.commit
|
42
42
|
|
43
|
-
subject.is_completed.
|
43
|
+
expect(subject.is_completed).to be_truthy
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -50,7 +50,7 @@ describe Ridley::SandboxObject do
|
|
50
50
|
it "has an 'is_completed' value of false" do
|
51
51
|
subject.commit
|
52
52
|
|
53
|
-
subject.is_completed.
|
53
|
+
expect(subject.is_completed).to be_falsey
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -58,7 +58,7 @@ describe Ridley::SandboxObject do
|
|
58
58
|
describe "#upload" do
|
59
59
|
it "delegates to resource#upload" do
|
60
60
|
checksums = double('checksums')
|
61
|
-
resource.
|
61
|
+
expect(resource).to receive(:upload).with(subject, checksums)
|
62
62
|
|
63
63
|
subject.upload(checksums)
|
64
64
|
end
|
@@ -32,9 +32,20 @@ describe Ridley::Client do
|
|
32
32
|
subject { described_class.new(options) }
|
33
33
|
|
34
34
|
describe "parsing the 'server_url' option" do
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
describe '#host' do
|
36
|
+
subject { super().host }
|
37
|
+
it { is_expected.to eql("api.opscode.com") }
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#scheme' do
|
41
|
+
subject { super().scheme }
|
42
|
+
it { is_expected.to eql("https") }
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#path_prefix' do
|
46
|
+
subject { super().path_prefix }
|
47
|
+
it { is_expected.to eql("/") }
|
48
|
+
end
|
38
49
|
end
|
39
50
|
|
40
51
|
describe "with a server_url containing an organization" do
|
@@ -43,16 +54,16 @@ describe Ridley::Client do
|
|
43
54
|
end
|
44
55
|
|
45
56
|
it "gets the host data from the server_url" do
|
46
|
-
subject.host.
|
47
|
-
subject.scheme.
|
57
|
+
expect(subject.host).to eql("api.opscode.com")
|
58
|
+
expect(subject.scheme).to eql("https")
|
48
59
|
end
|
49
60
|
|
50
61
|
it "takes the organization out of the server_url and assigns it to the organization reader" do
|
51
|
-
subject.organization.
|
62
|
+
expect(subject.organization).to eql(organization)
|
52
63
|
end
|
53
64
|
|
54
65
|
it "sets the 'path_prefix' of the connection the organization sub URI" do
|
55
|
-
subject.path_prefix.
|
66
|
+
expect(subject.path_prefix).to eql("/organizations/#{organization}")
|
56
67
|
end
|
57
68
|
end
|
58
69
|
|
@@ -94,26 +105,26 @@ describe Ridley::Client do
|
|
94
105
|
it "expands the path of the client_key" do
|
95
106
|
config[:client_key] = "spec/fixtures/reset.pem"
|
96
107
|
|
97
|
-
described_class.new(config).client_key[0..4].
|
108
|
+
expect(described_class.new(config).client_key[0..4]).not_to eq("spec/")
|
98
109
|
end
|
99
110
|
|
100
111
|
it "accepts a client key as a string" do
|
101
112
|
key = File.read(fixtures_path.join("reset.pem").to_s)
|
102
113
|
config[:client_key] = key.dup
|
103
|
-
described_class.new(config).client_key.
|
114
|
+
expect(described_class.new(config).client_key).to eq(key)
|
104
115
|
end
|
105
116
|
|
106
117
|
it "assigns a 'chef_version' attribute from the given 'chef_version' option" do
|
107
|
-
described_class.new(config).chef_version.
|
118
|
+
expect(described_class.new(config).chef_version).to eql("10.24.0-01")
|
108
119
|
end
|
109
120
|
end
|
110
121
|
|
111
122
|
describe "::open" do
|
112
123
|
it "instantiates a new connection, yields to it, and terminates it" do
|
113
124
|
new_instance = double(alive?: true)
|
114
|
-
described_class.
|
115
|
-
new_instance.
|
116
|
-
new_instance.
|
125
|
+
expect(described_class).to receive(:new).and_return(new_instance)
|
126
|
+
expect(new_instance).to receive(:hello)
|
127
|
+
expect(new_instance).to receive(:terminate)
|
117
128
|
|
118
129
|
described_class.open do |f|
|
119
130
|
f.hello
|
@@ -126,18 +137,45 @@ describe Ridley::Client do
|
|
126
137
|
|
127
138
|
subject { instance }
|
128
139
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
140
|
+
describe '#client' do
|
141
|
+
subject { super().client }
|
142
|
+
it { is_expected.to be_a(Ridley::ClientResource) }
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#cookbook' do
|
146
|
+
subject { super().cookbook }
|
147
|
+
it { is_expected.to be_a(Ridley::CookbookResource) }
|
148
|
+
end
|
149
|
+
|
150
|
+
describe '#data_bag' do
|
151
|
+
subject { super().data_bag }
|
152
|
+
it { is_expected.to be_a(Ridley::DataBagResource) }
|
153
|
+
end
|
154
|
+
|
155
|
+
describe '#environment' do
|
156
|
+
subject { super().environment }
|
157
|
+
it { is_expected.to be_a(Ridley::EnvironmentResource) }
|
158
|
+
end
|
159
|
+
|
160
|
+
describe '#node' do
|
161
|
+
subject { super().node }
|
162
|
+
it { is_expected.to be_a(Ridley::NodeResource) }
|
163
|
+
end
|
164
|
+
|
165
|
+
describe '#role' do
|
166
|
+
subject { super().role }
|
167
|
+
it { is_expected.to be_a(Ridley::RoleResource) }
|
168
|
+
end
|
169
|
+
|
170
|
+
describe '#sandbox' do
|
171
|
+
subject { super().sandbox }
|
172
|
+
it { is_expected.to be_a(Ridley::SandboxResource) }
|
173
|
+
end
|
136
174
|
|
137
175
|
describe "#encrypted_data_bag_secret" do
|
138
176
|
subject { instance.encrypted_data_bag_secret }
|
139
177
|
|
140
|
-
it {
|
178
|
+
it { is_expected.to be_a(String) }
|
141
179
|
|
142
180
|
context "when a encrypted_data_bag_secret_path is not provided" do
|
143
181
|
before(:each) do
|
@@ -18,7 +18,7 @@ describe Ridley::Connection do
|
|
18
18
|
expect {
|
19
19
|
subject.get('organizations/vialstudios')
|
20
20
|
}.to raise_error
|
21
|
-
a_request(:get, "https://api.opscode.com/organizations/vialstudios").
|
21
|
+
expect(a_request(:get, "https://api.opscode.com/organizations/vialstudios")).to have_been_made.times(6)
|
22
22
|
end
|
23
23
|
|
24
24
|
context "given a configured count of two (2) retries" do
|
@@ -31,7 +31,7 @@ describe Ridley::Connection do
|
|
31
31
|
subject.get('organizations/vialstudios')
|
32
32
|
}.to raise_error
|
33
33
|
|
34
|
-
a_request(:get, "https://api.opscode.com/organizations/vialstudios").
|
34
|
+
expect(a_request(:get, "https://api.opscode.com/organizations/vialstudios")).to have_been_made.times(3)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -40,13 +40,13 @@ describe Ridley::Connection do
|
|
40
40
|
it "returns :foss if the organization is not set" do
|
41
41
|
subject.stub(:organization).and_return(nil)
|
42
42
|
|
43
|
-
subject.api_type.
|
43
|
+
expect(subject.api_type).to eql(:foss)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "returns :hosted if the organization is set" do
|
47
47
|
subject.stub(:organization).and_return("vialstudios")
|
48
48
|
|
49
|
-
subject.api_type.
|
49
|
+
expect(subject.api_type).to eql(:hosted)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -62,17 +62,17 @@ describe Ridley::Connection do
|
|
62
62
|
it "creates a destination file on disk" do
|
63
63
|
subject.stream(target, destination)
|
64
64
|
|
65
|
-
File.exist?(destination).
|
65
|
+
expect(File.exist?(destination)).to be_truthy
|
66
66
|
end
|
67
67
|
|
68
68
|
it "returns true when the file was copied" do
|
69
|
-
expect(subject.stream(target, destination)).to
|
69
|
+
expect(subject.stream(target, destination)).to be_truthy
|
70
70
|
end
|
71
71
|
|
72
72
|
it "contains the contents of the response body" do
|
73
73
|
subject.stream(target, destination)
|
74
74
|
|
75
|
-
File.read(destination).
|
75
|
+
expect(File.read(destination)).to include(contents)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -18,7 +18,7 @@ describe Ridley::Errors do
|
|
18
18
|
it "adds an item to the error map" do
|
19
19
|
subject.register_error(400)
|
20
20
|
|
21
|
-
subject.error_map.
|
21
|
+
expect(subject.error_map.size).to eq(1)
|
22
22
|
end
|
23
23
|
|
24
24
|
it "adds a key of the given status code with a value of the class inheriting from HTTPError" do
|
@@ -26,7 +26,7 @@ describe Ridley::Errors do
|
|
26
26
|
register_error(400)
|
27
27
|
end
|
28
28
|
|
29
|
-
subject.error_map[400].
|
29
|
+
expect(subject.error_map[400]).to eql(RidleyTestHTTPError)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -35,7 +35,7 @@ describe Ridley::Errors do
|
|
35
35
|
subject { Ridley::Errors::HTTPError.new(:body => "<html><body><h1>Redirected</h1></body></html>") }
|
36
36
|
|
37
37
|
it "has an HTML body" do
|
38
|
-
subject.message.
|
38
|
+
expect(subject.message).to eq("<html><body><h1>Redirected</h1></body></html>")
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -16,7 +16,7 @@ describe Ridley::Middleware::ChefAuth do
|
|
16
16
|
host: "https://api.opscode.com",
|
17
17
|
path: "/something.file"
|
18
18
|
}
|
19
|
-
subject.authentication_headers(client_name, client_key, options).
|
19
|
+
expect(subject.authentication_headers(client_name, client_key, options)).to be_a(Hash)
|
20
20
|
end
|
21
21
|
|
22
22
|
context "when the :client_key is an actual key" do
|
@@ -28,7 +28,7 @@ describe Ridley::Middleware::ChefAuth do
|
|
28
28
|
host: "https://api.opscode.com",
|
29
29
|
path: "/something.file"
|
30
30
|
}
|
31
|
-
subject.authentication_headers(client_name, client_key, options).
|
31
|
+
expect(subject.authentication_headers(client_name, client_key, options)).to be_a(Hash)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -11,33 +11,33 @@ describe Ridley::Middleware::ChefResponse do
|
|
11
11
|
|
12
12
|
it "returns true if response status between 200 and 210" do
|
13
13
|
(200..210).each do |code|
|
14
|
-
env.
|
14
|
+
expect(env).to receive(:[]).with(:status).and_return(code)
|
15
15
|
|
16
|
-
subject.success?(env).
|
16
|
+
expect(subject.success?(env)).to be_truthy
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
it "returns false if response status is in the 300 range" do
|
21
21
|
(300..399).each do |code|
|
22
|
-
env.
|
22
|
+
expect(env).to receive(:[]).with(:status).and_return(code)
|
23
23
|
|
24
|
-
subject.success?(env).
|
24
|
+
expect(subject.success?(env)).to be_falsey
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
it "returns false if response status is in the 400 range" do
|
29
29
|
(400..499).each do |code|
|
30
|
-
env.
|
30
|
+
expect(env).to receive(:[]).with(:status).and_return(code)
|
31
31
|
|
32
|
-
subject.success?(env).
|
32
|
+
expect(subject.success?(env)).to be_falsey
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
it "returns false if response status is in the 500 range" do
|
37
37
|
(500..599).each do |code|
|
38
|
-
env.
|
38
|
+
expect(env).to receive(:[]).with(:status).and_return(code)
|
39
39
|
|
40
|
-
subject.success?(env).
|
40
|
+
expect(subject.success?(env)).to be_falsey
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -117,15 +117,15 @@ describe Ridley::Middleware::ChefResponse do
|
|
117
117
|
end
|
118
118
|
|
119
119
|
it "raises a Ridley::Errors::HTTPBadRequest" do
|
120
|
-
|
120
|
+
expect {
|
121
121
|
subject.get('cookbooks')
|
122
|
-
}.
|
122
|
+
}.to raise_error(Ridley::Errors::HTTPBadRequest)
|
123
123
|
end
|
124
124
|
|
125
125
|
it "should have the body of the response as the error's message" do
|
126
|
-
|
126
|
+
expect {
|
127
127
|
subject.get('cookbooks')
|
128
|
-
}.
|
128
|
+
}.to raise_error("errors: '400 - Bad Request: Valid X-CHEF-VERSION header is required.'")
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -135,15 +135,15 @@ describe Ridley::Middleware::ChefResponse do
|
|
135
135
|
end
|
136
136
|
|
137
137
|
it "raises a Ridley::Errors::HTTPUnauthorized" do
|
138
|
-
|
138
|
+
expect {
|
139
139
|
subject.get('cookbooks')
|
140
|
-
}.
|
140
|
+
}.to raise_error(Ridley::Errors::HTTPUnauthorized)
|
141
141
|
end
|
142
142
|
|
143
143
|
it "should have the body of the response as the error's message" do
|
144
|
-
|
144
|
+
expect {
|
145
145
|
subject.get('cookbooks')
|
146
|
-
}.
|
146
|
+
}.to raise_error("errors: '401 - Unauthorized. You must properly authenticate your API requests!'")
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -153,15 +153,15 @@ describe Ridley::Middleware::ChefResponse do
|
|
153
153
|
end
|
154
154
|
|
155
155
|
it "raises a Ridley::Errors::HTTPForbidden" do
|
156
|
-
|
156
|
+
expect {
|
157
157
|
subject.get('cookbooks')
|
158
|
-
}.
|
158
|
+
}.to raise_error(Ridley::Errors::HTTPForbidden)
|
159
159
|
end
|
160
160
|
|
161
161
|
it "should have the body of the response as the error's message" do
|
162
|
-
|
162
|
+
expect {
|
163
163
|
subject.get('cookbooks')
|
164
|
-
}.
|
164
|
+
}.to raise_error("errors: '403 - Forbidden.'")
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
@@ -171,15 +171,15 @@ describe Ridley::Middleware::ChefResponse do
|
|
171
171
|
end
|
172
172
|
|
173
173
|
it "raises a Ridley::Errors::HTTPNotFound" do
|
174
|
-
|
174
|
+
expect {
|
175
175
|
subject.get('not_existant_route')
|
176
|
-
}.
|
176
|
+
}.to raise_error(Ridley::Errors::HTTPNotFound)
|
177
177
|
end
|
178
178
|
|
179
179
|
it "should have the body of the response as the error's message" do
|
180
|
-
|
180
|
+
expect {
|
181
181
|
subject.get('not_existant_route')
|
182
|
-
}.
|
182
|
+
}.to raise_error(Ridley::Errors::HTTPNotFound, "errors: 'No routes match the request: /organizations/vialstudios/cookbookss/not_existant'")
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -189,15 +189,15 @@ describe Ridley::Middleware::ChefResponse do
|
|
189
189
|
end
|
190
190
|
|
191
191
|
it "raises a Ridley::Errors::HTTPForbidden" do
|
192
|
-
|
192
|
+
expect {
|
193
193
|
subject.get('cookbooks')
|
194
|
-
}.
|
194
|
+
}.to raise_error(Ridley::Errors::HTTPConflict)
|
195
195
|
end
|
196
196
|
|
197
197
|
it "should have the body of the response as the error's message" do
|
198
|
-
|
198
|
+
expect {
|
199
199
|
subject.get('cookbooks')
|
200
|
-
}.
|
200
|
+
}.to raise_error("errors: '409 - Conflict.'")
|
201
201
|
end
|
202
202
|
end
|
203
203
|
|
@@ -207,7 +207,7 @@ describe Ridley::Middleware::ChefResponse do
|
|
207
207
|
end
|
208
208
|
|
209
209
|
it "returns a body containing a hash" do
|
210
|
-
subject.get('roles/reset').env[:body].
|
210
|
+
expect(subject.get('roles/reset').env[:body]).to be_a(Hash)
|
211
211
|
end
|
212
212
|
end
|
213
213
|
end
|