ridley 0.10.2 → 0.11.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/README.md +147 -216
  2. data/lib/ridley.rb +2 -0
  3. data/lib/ridley/bootstrap_bindings/unix_template_binding.rb +21 -25
  4. data/lib/ridley/bootstrap_bindings/windows_template_binding.rb +29 -34
  5. data/lib/ridley/bootstrapper.rb +2 -2
  6. data/lib/ridley/bootstrapper/context.rb +5 -5
  7. data/lib/ridley/chef.rb +0 -1
  8. data/lib/ridley/chef/cookbook.rb +0 -9
  9. data/lib/ridley/chef_object.rb +128 -0
  10. data/lib/ridley/chef_objects.rb +3 -0
  11. data/lib/ridley/chef_objects/client_object.rb +55 -0
  12. data/lib/ridley/chef_objects/cookbook_object.rb +190 -0
  13. data/lib/ridley/chef_objects/data_bag_item_obect.rb +104 -0
  14. data/lib/ridley/chef_objects/data_bag_object.rb +31 -0
  15. data/lib/ridley/chef_objects/environment_object.rb +59 -0
  16. data/lib/ridley/chef_objects/node_object.rb +161 -0
  17. data/lib/ridley/chef_objects/role_object.rb +62 -0
  18. data/lib/ridley/chef_objects/sandbox_object.rb +58 -0
  19. data/lib/ridley/client.rb +76 -45
  20. data/lib/ridley/connection.rb +1 -1
  21. data/lib/ridley/errors.rb +8 -1
  22. data/lib/ridley/host_connector.rb +26 -6
  23. data/lib/ridley/host_connector/ssh.rb +3 -3
  24. data/lib/ridley/host_connector/ssh/worker.rb +7 -9
  25. data/lib/ridley/host_connector/winrm/worker.rb +4 -5
  26. data/lib/ridley/mixin/bootstrap_binding.rb +1 -12
  27. data/lib/ridley/resource.rb +51 -171
  28. data/lib/ridley/resources/client_resource.rb +18 -68
  29. data/lib/ridley/resources/cookbook_resource.rb +181 -381
  30. data/lib/ridley/resources/data_bag_item_resource.rb +55 -161
  31. data/lib/ridley/resources/data_bag_resource.rb +20 -61
  32. data/lib/ridley/resources/environment_resource.rb +9 -64
  33. data/lib/ridley/resources/node_resource.rb +135 -311
  34. data/lib/ridley/resources/role_resource.rb +1 -57
  35. data/lib/ridley/resources/sandbox_resource.rb +80 -65
  36. data/lib/ridley/resources/search_resource.rb +99 -0
  37. data/lib/ridley/sandbox_uploader.rb +12 -52
  38. data/lib/ridley/version.rb +1 -1
  39. data/spec/acceptance/bootstrapping_spec.rb +1 -1
  40. data/spec/acceptance/client_resource_spec.rb +15 -37
  41. data/spec/acceptance/data_bag_item_resource_spec.rb +8 -14
  42. data/spec/acceptance/data_bag_resource_spec.rb +1 -1
  43. data/spec/acceptance/environment_resource_spec.rb +13 -22
  44. data/spec/acceptance/node_resource_spec.rb +10 -29
  45. data/spec/acceptance/role_resource_spec.rb +14 -13
  46. data/spec/acceptance/sandbox_resource_spec.rb +2 -2
  47. data/spec/support/shared_examples/ridley_resource.rb +2 -23
  48. data/spec/unit/ridley/bootstrap_bindings/unix_template_binding_spec.rb +3 -4
  49. data/spec/unit/ridley/bootstrap_bindings/windows_template_binding_spec.rb +3 -5
  50. data/spec/unit/ridley/bootstrapper/context_spec.rb +2 -3
  51. data/spec/unit/ridley/bootstrapper_spec.rb +1 -1
  52. data/spec/unit/ridley/chef_object_spec.rb +240 -0
  53. data/spec/unit/ridley/chef_objects/client_object_spec.rb +11 -0
  54. data/spec/unit/ridley/chef_objects/cookbook_object_spec.rb +93 -0
  55. data/spec/unit/ridley/chef_objects/data_bag_item_object_spec.rb +74 -0
  56. data/spec/unit/ridley/chef_objects/data_bag_object_spec.rb +9 -0
  57. data/spec/unit/ridley/chef_objects/environment_object_spec.rb +57 -0
  58. data/spec/unit/ridley/chef_objects/node_object_spec.rb +252 -0
  59. data/spec/unit/ridley/chef_objects/role_object_spec.rb +57 -0
  60. data/spec/unit/ridley/chef_objects/sandbox_object_spec.rb +66 -0
  61. data/spec/unit/ridley/client_spec.rb +51 -51
  62. data/spec/unit/ridley/host_connector/ssh/worker_spec.rb +4 -4
  63. data/spec/unit/ridley/host_connector/ssh_spec.rb +26 -24
  64. data/spec/unit/ridley/host_connector/winrm/worker_spec.rb +3 -4
  65. data/spec/unit/ridley/host_connector/winrm_spec.rb +4 -4
  66. data/spec/unit/ridley/host_connector_spec.rb +40 -3
  67. data/spec/unit/ridley/mixin/bootstrap_binding_spec.rb +1 -1
  68. data/spec/unit/ridley/resource_spec.rb +81 -109
  69. data/spec/unit/ridley/resources/client_resource_spec.rb +18 -33
  70. data/spec/unit/ridley/resources/cookbook_resource_spec.rb +56 -230
  71. data/spec/unit/ridley/resources/data_bag_item_resource_spec.rb +2 -57
  72. data/spec/unit/ridley/resources/data_bag_resource_spec.rb +12 -7
  73. data/spec/unit/ridley/resources/environment_resource_spec.rb +10 -118
  74. data/spec/unit/ridley/resources/node_resource_spec.rb +83 -394
  75. data/spec/unit/ridley/resources/role_resource_spec.rb +2 -56
  76. data/spec/unit/ridley/resources/sandbox_resource_spec.rb +139 -136
  77. data/spec/unit/ridley/resources/search_resource_spec.rb +234 -0
  78. data/spec/unit/ridley/sandbox_uploader_spec.rb +13 -58
  79. metadata +36 -17
  80. data/lib/ridley/chef/chefignore.rb +0 -76
  81. data/lib/ridley/resources/encrypted_data_bag_item_resource.rb +0 -55
  82. data/lib/ridley/resources/search.rb +0 -101
  83. data/spec/fixtures/chefignore +0 -8
  84. data/spec/unit/ridley/chef/chefignore_spec.rb +0 -40
  85. data/spec/unit/ridley/resources/search_spec.rb +0 -221
@@ -1,61 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Ridley::RoleResource do
4
- it_behaves_like "a Ridley Resource", Ridley::RoleResource
4
+ subject { described_class.new(double) }
5
5
 
6
- let(:connection) { double("connection") }
7
-
8
- subject { Ridley::RoleResource.new(connection) }
9
-
10
- describe "#set_override_attribute" do
11
- it "sets an override node attribute at the nested path" do
12
- subject.set_override_attribute('deep.nested.item', true)
13
-
14
- subject.override_attributes.should have_key("deep")
15
- subject.override_attributes["deep"].should have_key("nested")
16
- subject.override_attributes["deep"]["nested"].should have_key("item")
17
- subject.override_attributes["deep"]["nested"]["item"].should be_true
18
- end
19
-
20
- context "when the override attribute is already set" do
21
- it "test" do
22
- subject.override_attributes = {
23
- deep: {
24
- nested: {
25
- item: false
26
- }
27
- }
28
- }
29
- subject.set_override_attribute('deep.nested.item', true)
30
-
31
- subject.override_attributes["deep"]["nested"]["item"].should be_true
32
- end
33
- end
34
- end
35
-
36
- describe "#set_default_attribute" do
37
- it "sets an override node attribute at the nested path" do
38
- subject.set_default_attribute('deep.nested.item', true)
39
-
40
- subject.default_attributes.should have_key("deep")
41
- subject.default_attributes["deep"].should have_key("nested")
42
- subject.default_attributes["deep"]["nested"].should have_key("item")
43
- subject.default_attributes["deep"]["nested"]["item"].should be_true
44
- end
45
-
46
- context "when the override attribute is already set" do
47
- it "test" do
48
- subject.default_attributes = {
49
- deep: {
50
- nested: {
51
- item: false
52
- }
53
- }
54
- }
55
- subject.set_default_attribute('deep.nested.item', true)
56
-
57
- subject.default_attributes["deep"]["nested"]["item"].should be_true
58
- end
59
- end
60
- end
6
+ pending
61
7
  end
@@ -1,172 +1,175 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Ridley::SandboxResource do
4
- let(:server_url) { "https://api.opscode.com/organizations/vialstudios" }
5
4
  let(:client_name) { "reset" }
6
- let(:client_key) { fixtures_path.join("reset.pem") }
7
-
8
- let(:sandbox) do
9
- Ridley.new(
10
- server_url: server_url,
11
- client_name: client_name,
12
- client_key: client_key
13
- ).sandbox
14
- end
5
+ let(:client_key) { fixtures_path.join('reset.pem') }
6
+ let(:connection) { double('chef-connection') }
7
+ subject { described_class.new(double, client_name, client_key) }
8
+ before { subject.stub(connection: connection) }
9
+
10
+ describe "#create" do
11
+ let(:sandbox_id) { "bd091b150b0a4578b97771af6abf3e05" }
12
+ let(:sandbox_uri) { "https://api.opscode.com/organizations/vialstudios/sandboxes/bd091b150b0a4578b97771af6abf3e05" }
13
+ let(:checksums) { Hash.new }
14
+ let(:response) do
15
+ double(body: { uri: sandbox_uri, checksums: checksums, sandbox_id: sandbox_id })
16
+ end
15
17
 
16
- describe "ClassMethods" do
17
- describe "::create" do
18
- let(:checksums) { Hash.new }
19
-
20
- before(:each) do
21
- stub_request(:post, File.join(server_url, "sandboxes")).
22
- with(body: MultiJson.encode(checksums: checksums)).
23
- to_return(status: 200, body: {
24
- uri: "https://api.opscode.com/organizations/vialstudios/sandboxes/bd091b150b0a4578b97771af6abf3e05",
25
- checksums: {},
26
- sandbox_id: "bd091b150b0a4578b97771af6abf3e05"
27
- })
28
- end
18
+ before(:each) do
19
+ connection.stub(:post).
20
+ with(subject.class.resource_path, MultiJson.encode(checksums: checksums)).
21
+ and_return(response)
22
+ end
23
+
24
+ it "returns a Ridley::SandboxObject" do
25
+ subject.create.should be_a(Ridley::SandboxObject)
26
+ end
29
27
 
30
- subject { sandbox.create }
28
+ it "has a value of 'false' for :is_completed" do
29
+ subject.create.is_completed.should be_false
30
+ end
31
31
 
32
- it "returns a SandboxResource" do
33
- subject.should be_a(Ridley::SandboxResource)
32
+ it "has an empty Hash of checksums" do
33
+ subject.create.checksums.should be_a(Hash)
34
+ subject.create.checksums.should be_empty
35
+ end
36
+
37
+ it "has a value for :uri" do
38
+ subject.create.uri.should eql(sandbox_uri)
39
+ end
40
+
41
+ it "has a value for :sandbox_id" do
42
+ subject.create.sandbox_id.should eql(sandbox_id)
43
+ end
44
+
45
+ context "when given an array of checksums" do
46
+ let(:checksums) do
47
+ {
48
+ "385ea5490c86570c7de71070bce9384a" => nil,
49
+ "f6f73175e979bd90af6184ec277f760c" => nil,
50
+ "2e03dd7e5b2e6c8eab1cf41ac61396d5" => nil
51
+ }
34
52
  end
35
53
 
36
- it "has an 'is_completed' value of false" do
37
- subject.is_completed.should be_false
54
+ let(:checksum_array) { checksums.keys }
55
+
56
+ it "has a Hash of checksums with each of the given checksum ids" do
57
+ subject.create(checksum_array).checksums.should have(checksum_array.length).checksums
38
58
  end
59
+ end
60
+ end
61
+
62
+ describe "#commit" do
63
+ let(:sandbox_id) { "bd091b150b0a4578b97771af6abf3e05" }
64
+ let(:sandbox_path) { "#{described_class.resource_path}/#{sandbox_id}" }
65
+
66
+ let(:response) do
67
+ double(body: {
68
+ is_completed: true,
69
+ _rev: "1-bbc8a96f7486aeba2b562d382142fd68",
70
+ create_time: "2013-01-16T01:43:43+00:00",
71
+ guid: "bd091b150b0a4578b97771af6abf3e05",
72
+ json_class: "Chef::Sandbox",
73
+ name: "bd091b150b0a4578b97771af6abf3e05",
74
+ checksums: [],
75
+ chef_type: "sandbox"
76
+ })
77
+ end
39
78
 
40
- it "has an empty Hash of checksums" do
41
- subject.checksums.should be_a(Hash)
42
- subject.checksums.should be_empty
79
+ it "sends a /PUT to the sandbox resource with is_complete set to true" do
80
+ connection.should_receive(:put).with(sandbox_path, MultiJson.encode(is_completed: true)).and_return(response)
81
+
82
+ subject.commit(sandbox_id)
83
+ end
84
+
85
+ context "when a sandbox of the given ID is not found" do
86
+ before do
87
+ connection.should_receive(:put).and_raise(Ridley::Errors::HTTPNotFound.new({}))
43
88
  end
44
89
 
45
- it "has a value for 'uri'" do
46
- subject.uri.should eql("https://api.opscode.com/organizations/vialstudios/sandboxes/bd091b150b0a4578b97771af6abf3e05")
90
+ it "raises a ResourceNotFound error" do
91
+ expect {
92
+ subject.commit(sandbox_id)
93
+ }.to raise_error(Ridley::Errors::ResourceNotFound)
47
94
  end
95
+ end
48
96
 
49
- it "has a sandbox_id" do
50
- subject.sandbox_id.should eql("bd091b150b0a4578b97771af6abf3e05")
97
+ context "when the given sandbox contents are malformed" do
98
+ before do
99
+ connection.should_receive(:put).and_raise(Ridley::Errors::HTTPBadRequest.new({}))
51
100
  end
52
101
 
53
- context "when given an array of checksums" do
54
- let(:checksums) do
55
- {
56
- "385ea5490c86570c7de71070bce9384a" => nil,
57
- "f6f73175e979bd90af6184ec277f760c" => nil,
58
- "2e03dd7e5b2e6c8eab1cf41ac61396d5" => nil
59
- }
60
- end
61
- let(:checksum_array) { checksums.keys }
62
-
63
- before(:each) do
64
- stub_request(:post, File.join(server_url, "sandboxes")).
65
- with(body: MultiJson.encode(checksums: checksums)).
66
- to_return(status: 200, body: {
67
- "uri" => "https://api.opscode.com/organizations/vialstudios/sandboxes/bd091b150b0a4578b97771af6abf3e05",
68
- "checksums" => {
69
- "385ea5490c86570c7de71070bce9384a" => {
70
- "url" => "https://s3.amazonaws.com/opscode-platform-production-data/organization",
71
- "needs_upload" => true
72
- },
73
- "f6f73175e979bd90af6184ec277f760c" => {
74
- "url" => "https://s3.amazonaws.com/opscode-platform-production-data/organization",
75
- "needs_upload" => true
76
- },
77
- "2e03dd7e5b2e6c8eab1cf41ac61396d5" => {
78
- "url" => "https://s3.amazonaws.com/opscode-platform-production-data/organization",
79
- "needs_upload" => true
80
- },
81
- },
82
- "sandbox_id" => "bd091b150b0a4578b97771af6abf3e05"
83
- })
84
- end
85
-
86
- subject { sandbox.create(checksum_array) }
87
-
88
- it "has a Hash of checksums with each of the given checksum ids" do
89
- subject.checksums.should have(checksum_array.length).checksums
90
- end
102
+ it "raises a SandboxCommitError error" do
103
+ expect {
104
+ subject.commit(sandbox_id)
105
+ }.to raise_error(Ridley::Errors::SandboxCommitError)
91
106
  end
92
107
  end
93
- end
94
108
 
95
- subject do
96
- sandbox.new(
97
- "uri" => "https://api.opscode.com/organizations/vialstudios/sandboxes/bd091b150b0a4578b97771af6abf3e05",
98
- "checksums" => {
99
- "385ea5490c86570c7de71070bce9384a" => {
100
- "url" => "https://s3.amazonaws.com/opscode-platform-production-data/organization",
101
- "needs_upload" => true
102
- },
103
- "f6f73175e979bd90af6184ec277f760c" => {
104
- "url" => "https://s3.amazonaws.com/opscode-platform-production-data/organization",
105
- "needs_upload" => true
106
- },
107
- "2e03dd7e5b2e6c8eab1cf41ac61396d5" => {
108
- "url" => "https://s3.amazonaws.com/opscode-platform-production-data/organization",
109
- "needs_upload" => true
110
- },
111
- },
112
- "sandbox_id" => "bd091b150b0a4578b97771af6abf3e05"
113
- )
114
- end
109
+ context "when the user who made the request is not authorized" do
110
+ it "raises a PermissionDenied error on unauthorized" do
111
+ connection.should_receive(:put).and_raise(Ridley::Errors::HTTPUnauthorized.new({}))
115
112
 
116
- describe "#commit" do
117
- context "on successful commit" do
118
- before(:each) do
119
- stub_request(:put, File.join(server_url, "sandboxes", "bd091b150b0a4578b97771af6abf3e05")).
120
- with(body: MultiJson.encode(is_completed: true)).
121
- to_return(status: 200, body: {
122
- is_completed: true,
123
- _rev: "1-bbc8a96f7486aeba2b562d382142fd68",
124
- create_time: "2013-01-16T01:43:43+00:00",
125
- guid: "bd091b150b0a4578b97771af6abf3e05",
126
- json_class: "Chef::Sandbox",
127
- name: "bd091b150b0a4578b97771af6abf3e05",
128
- checksums: [],
129
- chef_type: "sandbox"
130
- })
113
+ expect {
114
+ subject.commit(sandbox_id)
115
+ }.to raise_error(Ridley::Errors::PermissionDenied)
131
116
  end
132
117
 
133
- it "has an 'is_completed' value of true" do
134
- subject.commit
118
+ it "raises a PermissionDenied error on forbidden" do
119
+ connection.should_receive(:put).and_raise(Ridley::Errors::HTTPForbidden.new({}))
135
120
 
136
- subject.is_completed.should be_true
121
+ expect {
122
+ subject.commit(sandbox_id)
123
+ }.to raise_error(Ridley::Errors::PermissionDenied)
137
124
  end
138
125
  end
126
+ end
139
127
 
140
- context "on commit failure" do
141
- before(:each) do
142
- stub_request(:put, File.join(server_url, "sandboxes", "bd091b150b0a4578b97771af6abf3e05")).
143
- with(body: MultiJson.encode(is_completed: true)).
144
- to_return(status: 200, body: {
145
- is_completed: false,
146
- _rev: "1-bbc8a96f7486aeba2b562d382142fd68",
147
- create_time: "2013-01-16T01:43:43+00:00",
148
- guid: "bd091b150b0a4578b97771af6abf3e05",
149
- json_class: "Chef::Sandbox",
150
- name: "bd091b150b0a4578b97771af6abf3e05",
151
- checksums: [],
152
- chef_type: "sandbox"
153
- })
154
- end
128
+ describe "#update" do
129
+ it "is not a supported action" do
130
+ expect {
131
+ subject.update(anything)
132
+ }.to raise_error(RuntimeError, "action not supported")
133
+ end
134
+ end
155
135
 
156
- it "has an 'is_completed' value of false" do
157
- subject.commit
136
+ describe "#update" do
137
+ it "is not a supported action" do
138
+ expect {
139
+ subject.update
140
+ }.to raise_error(RuntimeError, "action not supported")
141
+ end
142
+ end
158
143
 
159
- subject.is_completed.should be_false
160
- end
144
+ describe "#all" do
145
+ it "is not a supported action" do
146
+ expect {
147
+ subject.all
148
+ }.to raise_error(RuntimeError, "action not supported")
161
149
  end
162
150
  end
163
151
 
164
- describe "#upload" do
165
- it "delegates self to SandboxUploader.upload" do
166
- checksums = double('checksums')
167
- Ridley::SandboxUploader.should_receive(:upload).with(subject, checksums)
152
+ describe "#find" do
153
+ it "is not a supported action" do
154
+ expect {
155
+ subject.find
156
+ }.to raise_error(RuntimeError, "action not supported")
157
+ end
158
+ end
159
+
160
+ describe "#delete" do
161
+ it "is not a supported action" do
162
+ expect {
163
+ subject.delete
164
+ }.to raise_error(RuntimeError, "action not supported")
165
+ end
166
+ end
168
167
 
169
- subject.upload(checksums)
168
+ describe "#delete_all" do
169
+ it "is not a supported action" do
170
+ expect {
171
+ subject.delete_all
172
+ }.to raise_error(RuntimeError, "action not supported")
170
173
  end
171
174
  end
172
175
  end
@@ -0,0 +1,234 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ridley::SearchResource do
4
+ describe "ClassMethods" do
5
+ subject { described_class }
6
+
7
+ describe "::build_query" do
8
+ let(:query_string) { "*:*" }
9
+ let(:options) { Hash.new }
10
+
11
+ it "contains a 'q' key/value" do
12
+ result = subject.build_query(query_string, options)
13
+
14
+ result.should have_key(:q)
15
+ result[:q].should eql(query_string)
16
+ end
17
+
18
+ context "when :sort option is set" do
19
+ before { options[:sort] = "DESC" }
20
+
21
+ it "contains a 'sort' key/value" do
22
+ result = subject.build_query(query_string, options)
23
+
24
+ result.should have_key(:sort)
25
+ result[:sort].should eql("DESC")
26
+ end
27
+ end
28
+
29
+ context "when :start option is set" do
30
+ before { options[:start] = 1 }
31
+
32
+ it "contains a 'start' key/value" do
33
+ result = subject.build_query(query_string, options)
34
+
35
+ result.should have_key(:start)
36
+ result[:start].should eql(1)
37
+ end
38
+ end
39
+
40
+ context "when :rows option is set" do
41
+ before { options[:rows] = 1 }
42
+
43
+ it "contains a 'rows' key/value" do
44
+ result = subject.build_query(query_string, options)
45
+
46
+ result.should have_key(:rows)
47
+ result[:rows].should eql(1)
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "::query_uri" do
53
+ it "returns a URI path containing the search resource path and index" do
54
+ subject.query_uri(:nodes).should eql("search/nodes")
55
+ end
56
+ end
57
+ end
58
+
59
+ let(:connection) { double('chef-connection') }
60
+ subject { described_class.new(double('registry')) }
61
+ before { subject.stub(connection: connection) }
62
+
63
+ describe "#indexes" do
64
+ let(:response) do
65
+ double(body: {
66
+ node: "http://localhost:4000/search/node",
67
+ role: "http://localhost:4000/search/role",
68
+ client: "http://localhost:4000/search/client",
69
+ users: "http://localhost:4000/search/users"
70
+ })
71
+ end
72
+
73
+ before do
74
+ connection.stub(:get).with(described_class.resource_path).and_return(response)
75
+ end
76
+
77
+ it "performs a GET to the search resource_path" do
78
+ connection.should_receive(:get).with(described_class.resource_path).and_return(response)
79
+ subject.indexes
80
+ end
81
+
82
+ it "contains a key for each index" do
83
+ subject.indexes.should have(4).items
84
+ end
85
+ end
86
+
87
+ describe "#run" do
88
+ let(:index) { :role }
89
+ let(:query_string) { "*:*" }
90
+ let(:options) { Hash.new }
91
+ let(:response) do
92
+ double(body: {
93
+ rows: Array.new,
94
+ total: 0,
95
+ start: 0
96
+ })
97
+ end
98
+
99
+ let(:run) { subject.run(index, query_string) }
100
+
101
+ before do
102
+ connection.stub(:get).and_return(response)
103
+ end
104
+
105
+ it "builds a query and runs it against the index's resource path" do
106
+ query = double('query')
107
+ query_uri = double('query-uri')
108
+ described_class.should_receive(:build_query).with(query_string, options).and_return(query)
109
+ described_class.should_receive(:query_uri).with(index).and_return(query_uri)
110
+ connection.should_receive(:get).with(query_uri, query).and_return(response)
111
+
112
+ subject.run(index, query_string, options)
113
+ end
114
+
115
+ context "when :node is the given index" do
116
+ let(:index) { :node }
117
+ let(:response) do
118
+ double(body: {
119
+ rows: [
120
+ {
121
+ chef_type: "node",
122
+ json_class: "Chef::Node",
123
+ name: "ridley-one",
124
+ chef_environment: "_default",
125
+ automatic: {},
126
+ normal: {},
127
+ default: {},
128
+ override: {},
129
+ run_list: [
130
+ "recipe[one]",
131
+ "recipe[two]"
132
+ ]
133
+ }
134
+ ],
135
+ total: 1,
136
+ start: 0
137
+ })
138
+ end
139
+
140
+ it "returns an array of Ridley::NodeObject" do
141
+ result = run
142
+
143
+ result.should be_a(Array)
144
+ result.should each be_a(Ridley::NodeObject)
145
+ end
146
+ end
147
+
148
+ context "when :role is the given index" do
149
+ let(:index) { :role }
150
+ let(:response) do
151
+ double(body: {
152
+ rows: [
153
+ {
154
+ chef_type: "role",
155
+ json_class: "Chef::Role",
156
+ name: "ridley-role-one",
157
+ description: "",
158
+ default_attributes: {},
159
+ override_attributes: {},
160
+ run_list: [],
161
+ env_run_lists: {}
162
+ }
163
+ ],
164
+ total: 1,
165
+ start: 0
166
+ })
167
+ end
168
+
169
+ it "returns an array of Ridley::RoleObject" do
170
+ result = run
171
+
172
+ result.should be_a(Array)
173
+ result.should each be_a(Ridley::RoleObject)
174
+ end
175
+ end
176
+
177
+ context "when :environment is the given index" do
178
+ let(:index) { :environment }
179
+ let(:response) do
180
+ double(body: {
181
+ rows: [
182
+ {
183
+ chef_type: "environment",
184
+ json_class: "Chef::Environment",
185
+ name: "ridley-env-test",
186
+ description: "ridley testing environment",
187
+ default_attributes: {},
188
+ override_attributes: {},
189
+ cookbook_versions: {}
190
+ }
191
+ ],
192
+ total: 1,
193
+ start: 0
194
+ })
195
+ end
196
+
197
+ it "returns an array of Ridley::EnvironmentObject" do
198
+ result = run
199
+
200
+ result.should be_a(Array)
201
+ result.should each be_a(Ridley::EnvironmentObject)
202
+ end
203
+ end
204
+
205
+ context "when :client is the given index" do
206
+ let(:index) { :client }
207
+ let(:response) do
208
+ double(body: {
209
+ rows: [
210
+ {
211
+ chef_type: "client",
212
+ name: nil,
213
+ admin: false,
214
+ validator: false,
215
+ certificate: "-----BEGIN CERTIFICATE-----\nMIIDOjCCAqOgAwIBAgIE47eOmDANBgkqhkiG9w0BAQUFADCBnjELMAkGA1UEBhMC\nVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFjAUBgNV\nBAoMDU9wc2NvZGUsIEluYy4xHDAaBgNVBAsME0NlcnRpZmljYXRlIFNlcnZpY2Ux\nMjAwBgNVBAMMKW9wc2NvZGUuY29tL2VtYWlsQWRkcmVzcz1hdXRoQG9wc2NvZGUu\nY29tMCAXDTEyMTAwOTAwMTUxNVoYDzIxMDExMTA0MDAxNTE1WjCBnTEQMA4GA1UE\nBxMHU2VhdHRsZTETMBEGA1UECBMKV2FzaGluZ3RvbjELMAkGA1UEBhMCVVMxHDAa\nBgNVBAsTE0NlcnRpZmljYXRlIFNlcnZpY2UxFjAUBgNVBAoTDU9wc2NvZGUsIElu\nYy4xMTAvBgNVBAMUKFVSSTpodHRwOi8vb3BzY29kZS5jb20vR1VJRFMvY2xpZW50\nX2d1aWQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqB9KEGzl7Wcm/\nwz/x8HByZANCn6WQC+R12qQso5I6nLbTNkRP668jXG3j0R5/F5i/KearAB9ePzL/\nQe3iHtwW6u1qLI1hVNFNB+I1fGu1p6fZyIOjnLn3bqsbOkBplHOIqHsp4GVSsHKb\nD32UXZDa9S9ZFXnR4iT6hUGm5895ReZG9TDiHvBpi9NJFDZXz+AQ6JuQY8UgYMMA\nm80KbO8/NJlXbRW+siRuvr+LIsi9Mx4i63pBWAN46my291rQU31PF3IB+btfGtR/\nyDWDgMSB37bTzZeOf1Dg9fpl2vIXyu3PoHER0oYmrMQbrdwAt7qCHZNuNWn51WPb\n1PHxXL1rAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAGnJUVAv951fUhGyPOrl+LbQG\nqgchMwIn7oDLE863e66BYTDj7koK3jjhx3EBkrT2vt/xS4yW0ZRV1BNqfnNKWbBq\nMNQiKkYdTr+oq2O3plOg/q/M1eG1B5pxGXqvH0O76DVWQcV/svO+HQEi1n8y5UQd\n+pBJCygpuv78wPCM+c4=\n-----END CERTIFICATE-----\n",
216
+ public_key: nil,
217
+ private_key: nil,
218
+ orgname: "ridley"
219
+ }
220
+ ],
221
+ total: 1,
222
+ start: 0
223
+ })
224
+ end
225
+
226
+ it "returns an array of Ridley::ClientObject" do
227
+ result = run
228
+
229
+ result.should be_a(Array)
230
+ result.should each be_a(Ridley::ClientObject)
231
+ end
232
+ end
233
+ end
234
+ end