softlayer_api 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ # Copyright (c) 2010, SoftLayer Technologies, Inc. All rights reserved.
2
+ #
3
+ # Redistribution and use in source and binary forms, with or without
4
+ # modification, are permitted provided that the following conditions are met:
5
+ #
6
+ # * Redistributions of source code must retain the above copyright notice,
7
+ # this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright notice,
9
+ # this list of conditions and the following disclaimer in the documentation
10
+ # and/or other materials provided with the distribution.
11
+ # * Neither SoftLayer Technologies, Inc. nor the names of its contributors may
12
+ # be used to endorse or promote products derived from this software without
13
+ # specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
+ # POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ require 'softlayer/base'
28
+ require 'softlayer/object_mask_helpers'
29
+ require 'softlayer/service'
@@ -0,0 +1,81 @@
1
+ # Copyright (c) 2010, SoftLayer Technologies, Inc. All rights reserved.
2
+ #
3
+ # Redistribution and use in source and binary forms, with or without
4
+ # modification, are permitted provided that the following conditions are met:
5
+ #
6
+ # * Redistributions of source code must retain the above copyright notice,
7
+ # this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright notice,
9
+ # this list of conditions and the following disclaimer in the documentation
10
+ # and/or other materials provided with the distribution.
11
+ # * Neither SoftLayer Technologies, Inc. nor the names of its contributors may
12
+ # be used to endorse or promote products derived from this software without
13
+ # specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
+ # POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ $: << File.expand_path(File.join(File.dirname(__FILE__), "../lib"))
28
+
29
+ require 'rubygems'
30
+ require 'softlayer_api'
31
+ require 'spec'
32
+
33
+ describe SoftLayer::APIParameterFilter, "#object_with_id" do
34
+ it "should intitialize with empty parameter values" do
35
+ filter = SoftLayer::APIParameterFilter.new
36
+ filter.server_object_id.should be_nil
37
+ filter.server_object_mask.should be_nil
38
+ end
39
+
40
+ it "should store its value in server_object_id when called " do
41
+ filter = SoftLayer::APIParameterFilter.new
42
+ result = filter.object_with_id(12345)
43
+ result.server_object_id.should eql(12345)
44
+ result.parameters.should eql({:server_object_id => 12345})
45
+ end
46
+
47
+ it "should allow call chaining with object_mask " do
48
+ filter = SoftLayer::APIParameterFilter.new
49
+ result = filter.object_with_id(12345).object_mask("fish", "cow", "duck")
50
+ result.server_object_id.should == 12345
51
+ result.server_object_mask.should == ["fish", "cow", "duck"]
52
+ end
53
+ end
54
+
55
+ describe SoftLayer::APIParameterFilter, "#object_mask" do
56
+ it "should store its value in server_object_mask when called" do
57
+ filter = SoftLayer::APIParameterFilter.new
58
+ result = filter.object_mask("fish", "cow", "duck")
59
+ result.server_object_mask.should == ["fish", "cow", "duck"]
60
+ end
61
+
62
+ it "should allow call chaining with object_with_id" do
63
+ filter = SoftLayer::APIParameterFilter.new
64
+ result = filter.object_mask("fish", "cow", "duck").object_with_id(12345)
65
+ result.server_object_id.should == 12345
66
+ result.server_object_mask.should == ["fish", "cow", "duck"]
67
+ end
68
+ end
69
+
70
+ describe SoftLayer::APIParameterFilter, "#method_missing" do
71
+ it "should invoke call_softlayer_api_with_params(method_name, self, args, &block) on it's target with itself and the method_missing parameters" do
72
+ filter = SoftLayer::APIParameterFilter.new.object_mask("fish", "cow", "duck").object_with_id(12345)
73
+
74
+ target = mock("method_missing_target")
75
+ target.should_receive(:call_softlayer_api_with_params).with(:getObject, filter, ["marshmallow"])
76
+
77
+ filter.target = target
78
+
79
+ filter.getObject("marshmallow")
80
+ end
81
+ end
@@ -0,0 +1,376 @@
1
+ # Copyright (c) 2010, SoftLayer Technologies, Inc. All rights reserved.
2
+ #
3
+ # Redistribution and use in source and binary forms, with or without
4
+ # modification, are permitted provided that the following conditions are met:
5
+ #
6
+ # * Redistributions of source code must retain the above copyright notice,
7
+ # this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright notice,
9
+ # this list of conditions and the following disclaimer in the documentation
10
+ # and/or other materials provided with the distribution.
11
+ # * Neither SoftLayer Technologies, Inc. nor the names of its contributors may
12
+ # be used to endorse or promote products derived from this software without
13
+ # specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
+ # POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ $: << File.expand_path(File.join(File.dirname(__FILE__), "../lib"))
28
+
29
+ require 'rubygems'
30
+ require 'softlayer_api'
31
+ require 'spec'
32
+ require 'spec/autorun'
33
+
34
+ describe SoftLayer::Service, "#new" do
35
+ before(:each) do
36
+ $SL_API_USERNAME = "some_default_username"
37
+ $SL_API_KEY = "some_default_api_key"
38
+ $SL_API_BASE_URL = SoftLayer::API_PUBLIC_ENDPOINT
39
+ end
40
+
41
+ after(:each) do
42
+ $SL_API_USERNAME = nil
43
+ $SL_API_KEY = nil
44
+ $SL_API_BASE_URL = SoftLayer::API_PUBLIC_ENDPOINT
45
+ end
46
+
47
+ it "should reject a nil or empty service name" do
48
+ lambda() {service = SoftLayer::Service.new(nil)}.should raise_error
49
+ lambda() {service = SoftLayer::Service.new("")}.should raise_error
50
+ end
51
+
52
+ it "should remember service name passed in" do
53
+ service = SoftLayer::Service.new("SoftLayer_Account")
54
+ service.service_name.should == "SoftLayer_Account"
55
+ end
56
+
57
+ it "should pickup default username" do
58
+ $SL_API_USERNAME = "sample"
59
+ service = SoftLayer::Service.new("SoftLayer_Account")
60
+ service.username.should == "sample"
61
+ end
62
+
63
+ it "should accept a username in options" do
64
+ $SL_API_USERNAME = "sample"
65
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => 'fred')
66
+ service.username.should == "fred"
67
+ end
68
+
69
+ it "should pickup default api key" do
70
+ $SL_API_KEY = "sample"
71
+ service = SoftLayer::Service.new("SoftLayer_Account")
72
+ service.api_key.should == "sample"
73
+ end
74
+
75
+ it "should accept an api key in options" do
76
+ $SL_API_KEY = "sample"
77
+ service = SoftLayer::Service.new("SoftLayer_Account", :api_key => 'fred')
78
+ service.api_key.should == "fred"
79
+ end
80
+
81
+ it "should fail if username is empty" do
82
+ lambda() do
83
+ $SL_API_USERNAME = ""
84
+ $SL_API_KEY = "sample"
85
+
86
+ service = SoftLayer::Service.new("SoftLayer_Account")
87
+ end.should raise_error
88
+
89
+ lambda() do
90
+ $SL_API_USERNAME = "good_username"
91
+ $SL_API_KEY = "sample"
92
+
93
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "")
94
+ end.should raise_error
95
+ end
96
+
97
+ it "should fail if username is nil" do
98
+ lambda() do
99
+ $SL_API_USERNAME = nil
100
+ service = SoftLayer::Service.new("SoftLayer_Account", :api_key => "sample")
101
+ end.should raise_error
102
+
103
+ lambda() do
104
+ $SL_API_KEY = "sample"
105
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => nil, :api_key => "sample")
106
+ end.should raise_error
107
+ end
108
+
109
+ it "should fail if api_key is empty" do
110
+ lambda() do
111
+ $SL_API_USERNAME = "good_username"
112
+ $SL_API_KEY = ""
113
+
114
+ service = SoftLayer::Service.new("SoftLayer_Account")
115
+ end.should raise_error
116
+
117
+ lambda() do
118
+ $SL_API_USERNAME = "good_username"
119
+ $SL_API_KEY = "good_api_key"
120
+
121
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "")
122
+ end.should raise_error
123
+ end
124
+
125
+ it "should fail if api_key is nil" do
126
+ lambda() do
127
+ $SL_API_KEY = nil
128
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample")
129
+ end.should raise_error
130
+
131
+ lambda() do
132
+ $SL_API_KEY = nil
133
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => nil)
134
+ end.should raise_error
135
+ end
136
+
137
+ it "should pickup default base url" do
138
+ $SL_API_BASE_URL = nil
139
+ service = SoftLayer::Service.new("SoftLayer_Account")
140
+ service.endpoint_url.should == SoftLayer::API_PUBLIC_ENDPOINT
141
+ end
142
+
143
+ it "should get base URL from globals" do
144
+ $SL_API_BASE_URL = "http://someendpoint.softlayer.com/from/globals"
145
+ service = SoftLayer::Service.new("SoftLayer_Account")
146
+ service.endpoint_url.should == "http://someendpoint.softlayer.com/from/globals"
147
+ end
148
+
149
+ it "should accept a base url through options" do
150
+ service = SoftLayer::Service.new("SoftLayer_Account", :endpoint_url => "http://someendpoint.softlayer.com")
151
+ service.endpoint_url.should == "http://someendpoint.softlayer.com"
152
+ end
153
+ end #describe SoftLayer#new
154
+
155
+ describe SoftLayer::Service, "#username=" do
156
+ it "should not allow you to set a nil or empty username" do
157
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "sample")
158
+ lambda() {service.username = ""}.should raise_error
159
+ lambda() {service.username = nil}.should raise_error
160
+ end
161
+
162
+ it "should strip whitespace" do
163
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "sample")
164
+ service.username = " whitespace "
165
+ service.username.should == "whitespace"
166
+ end
167
+ end #describe SoftLayer#username=
168
+
169
+ describe SoftLayer::Service, "#api_key=" do
170
+ it "should not allow you to set a nil or empty api_key" do
171
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "sample")
172
+ lambda() {service.api_key = ""}.should raise_error
173
+ lambda() {service.api_key = nil}.should raise_error
174
+ end
175
+
176
+ it "should strip whitespace" do
177
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "sample")
178
+ service.api_key = " fred "
179
+ service.api_key.should == "fred"
180
+ end
181
+ end #describe SoftLayer#api_key=
182
+
183
+ describe SoftLayer::Service, "#endpoint_url=" do
184
+ it "should not allow you to set a nil or empty endpoint_url" do
185
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "sample", :endpoint_url => "http://someendpoint.softlayer.com")
186
+ lambda() {service.endpoint_url = ""}.should raise_error
187
+ lambda() {service.endpoint_url = nil}.should raise_error
188
+ end
189
+
190
+ it "should strip whitespace" do
191
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample", :api_key => "sample", :endpoint_url => "http://someendpoint.softlayer.com")
192
+ service.endpoint_url = " http://someendpoint.softlayer.com "
193
+ service.endpoint_url.should == "http://someendpoint.softlayer.com"
194
+ end
195
+ end #describe SoftLayer#endpoint_url=
196
+
197
+ describe SoftLayer::Service, "#url_to_call_method" do
198
+ it "should concatenate the method to the base url" do
199
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
200
+
201
+ # make sure we've picked up the default API key (can be wrong if one of the other tests is misbehaving)
202
+ service.endpoint_url.should == SoftLayer::API_PUBLIC_ENDPOINT
203
+
204
+ call_url = service.url_to_call_method("getOpenTickets", nil);
205
+ call_url.scheme.should == "https"
206
+ call_url.host.should == "api.softlayer.com"
207
+ call_url.path.should == "/rest/v3/SoftLayer_Account/getOpenTickets.json"
208
+ end #describe SoftLayer#url_to_call_method=
209
+ end
210
+
211
+ describe SoftLayer::Service, "#object_with_id" do
212
+ it "should add an object to the URL for a request " do
213
+ service = SoftLayer::Service.new("SoftLayer_Ticket", :username => "sample_username", :api_key => "blah")
214
+ service.should_receive(:issue_http_request).with(URI.parse("https://api.softlayer.com/rest/v3/SoftLayer_Ticket/12345/getObject.json"), an_instance_of(Net::HTTP::Get))
215
+ service.object_with_id(12345).getObject
216
+ end
217
+ end
218
+
219
+ describe SoftLayer::Service, "#missing_method" do
220
+ it "should translate unknown method into an api call" do
221
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
222
+ service.should_receive(:call_softlayer_api_with_params).with(:getOpenTickets, nil, ["marshmallow"])
223
+ response = service.getOpenTickets("marshmallow")
224
+ end
225
+ end
226
+
227
+ describe SoftLayer::Service, "#call_softlayer_api_with_params" do
228
+ it "should issue an HTTP request for the given method" do
229
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
230
+ service.should_receive(:issue_http_request).with(any_args())
231
+ service.call_softlayer_api_with_params(:getObject, nil, []);
232
+ end
233
+
234
+ it "should include the object id in the url created" do
235
+ service = SoftLayer::Service.new("SoftLayer_Ticket", :username => "sample_username", :api_key => "blah")
236
+ service.should_receive(:issue_http_request).with(URI.parse("https://api.softlayer.com/rest/v3/SoftLayer_Ticket/12345/getObject.json"), an_instance_of(Net::HTTP::Get))
237
+ service.call_softlayer_api_with_params(:getObject, SoftLayer::APIParameterFilter.new.object_with_id(12345), []);
238
+ end
239
+
240
+ it "should include the object mask in the url created" do
241
+ expected_uri = "https://api.softlayer.com/rest/v3/SoftLayer_Account/getObject.json?objectMask=cow;duck;chicken;bull%20dog"
242
+
243
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
244
+ service.should_receive(:issue_http_request).with(URI.parse(expected_uri), an_instance_of(Net::HTTP::Get))
245
+ service.call_softlayer_api_with_params(:getObject, SoftLayer::APIParameterFilter.new.object_mask("cow ", " duck", "chicken", "bull dog"), []);
246
+ end
247
+
248
+ it "should warn about calling a get method with arguments" do
249
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
250
+ service.should_receive(:issue_http_request).with(any_args())
251
+ $stderr.should_receive(:puts).with("Warning - The HTTP request for getObject does not allow arguments to be passed to the server")
252
+ service.getObject("Hello", "Bindigo")
253
+ end
254
+
255
+ it "should return the parsed JSON when completing successfully" do
256
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
257
+ service.should_receive(:issue_http_request).with(any_args()).and_return('{"successful":"Yipeee!", "array":[1,2,3], "bool":true}')
258
+ result = service.getObject
259
+ result.should == {"array"=>[1, 2, 3], "successful"=>"Yipeee!", "bool"=>true}
260
+ end
261
+
262
+ it "should raise an exception when completing unsuccessfully" do
263
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
264
+ service.should_receive(:issue_http_request).with(any_args()).and_return('{"error":"Function (\"getSnargled\") is not a valid method for this service"}')
265
+ lambda{ result = service.getSnargled }.should raise_error
266
+ end
267
+ end
268
+
269
+ describe SoftLayer::Service, "#object_with_id" do
270
+ it "should return an APIParameterFilter with itself as the target" do
271
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
272
+ filter = service.object_with_id(12345)
273
+
274
+ filter.should_not be_nil
275
+ filter.target.should === service
276
+ filter.server_object_id.should == 12345
277
+ end
278
+ end
279
+
280
+ describe SoftLayer::Service, "#object_mask" do
281
+ it "should return an APIParameterFilter with itself as the target" do
282
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
283
+ filter = service.object_mask("fish", "cow", "duck")
284
+
285
+ filter.should_not be_nil
286
+ filter.target.should === service
287
+ filter.server_object_mask.should == ["fish", "cow", "duck"]
288
+ end
289
+ end
290
+
291
+ describe SoftLayer::Service, "#http_request_for_method" do
292
+ it "should generate a GET request for methods staring with get" do
293
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
294
+ url_request = service.http_request_for_method(:getObject, URI.parse("http://bogus.com"))
295
+ url_request.should_not be_nil
296
+ url_request.should be_kind_of(Net::HTTP::Get)
297
+ end
298
+
299
+ it "should generate a POST request for methods starting with crate" do
300
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
301
+ url_request = service.http_request_for_method(:createSomeTicket, URI.parse("http://bogus.com"))
302
+ url_request.should_not be_nil
303
+ url_request.should be_kind_of(Net::HTTP::Post)
304
+ end
305
+
306
+ it "should generate a PUT request for methods starting with edit" do
307
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
308
+ url_request = service.http_request_for_method(:editFoo, URI.parse("http://bogus.com"))
309
+ url_request.should_not be_nil
310
+ url_request.should be_kind_of(Net::HTTP::Put)
311
+
312
+ # I know of at least one service (I think it's the ticket service) that uses "edit" as
313
+ # a method name. Make sure that the lack of additional characters doesn't throw off
314
+ # the service
315
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
316
+ url_request = service.http_request_for_method(:edit, URI.parse("http://bogus.com"))
317
+ url_request.should_not be_nil
318
+ url_request.should be_kind_of(Net::HTTP::Put)
319
+ end
320
+
321
+ it "should generate a DELETE request for methods starting with delete" do
322
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
323
+ url_request = service.http_request_for_method(:deleteObject, URI.parse("http://bogus.com"))
324
+
325
+ url_request.should_not be_nil
326
+ url_request.should be_kind_of(Net::HTTP::Delete)
327
+ end
328
+ end
329
+
330
+ describe SoftLayer::Service, "#marshall_arguments_for_call" do
331
+ service = SoftLayer::Service.new("SoftLayer_Account", :username => "sample_username", :api_key => "blah")
332
+ request_body = service.marshall_arguments_for_call(["first", 3, {"cow" => "chicken"}])
333
+ request_body.should == '{"parameters":["first",3,{"cow":"chicken"}]}'
334
+ end
335
+
336
+ describe SoftLayer::Service, " creating option proxies" do
337
+ it "should allow me to create a proxy object with just the object_with_id option" do
338
+ service = SoftLayer::Service.new("SoftLayer_Ticket", :username => "sample_username", :api_key => "blah")
339
+ ticket_proxy = service.object_with_id(123456)
340
+
341
+ ticket_proxy.server_object_id.should eql(123456)
342
+ service.should_receive(:call_softlayer_api_with_params).with(any_args())
343
+ ticket_proxy.getObject
344
+ end
345
+
346
+ it "should allow me to create a proxy object with just the object_mask option" do
347
+ service = SoftLayer::Service.new("SoftLayer_Ticket", :username => "sample_username", :api_key => "blah")
348
+ ticket_proxy = service.object_mask("fish", "cow", "duck")
349
+
350
+ ticket_proxy.server_object_mask.should eql(["fish", "cow", "duck"])
351
+ service.should_receive(:call_softlayer_api_with_params).with(any_args())
352
+ ticket_proxy.getObject
353
+ end
354
+
355
+ it "should not modify an object_with_id proxy even if that proxy is used with a mask" do
356
+ service = SoftLayer::Service.new("SoftLayer_Ticket", :username => "sample_username", :api_key => "blah")
357
+ ticket_proxy = service.object_with_id(123456)
358
+
359
+ service.should_receive(:issue_http_request).with(URI.parse("https://api.softlayer.com/rest/v3/SoftLayer_Ticket/123456/getObject.json?objectMask=fish;cow;duck"), an_instance_of(Net::HTTP::Get))
360
+ ticket_proxy.object_mask("fish", "cow", "duck").getObject
361
+
362
+ ticket_proxy.server_object_id.should eql(123456)
363
+ ticket_proxy.server_object_mask.should be_nil
364
+ end
365
+
366
+ it "should not modify an object_mask proxy even if it is used with an object ID" do
367
+ service = SoftLayer::Service.new("SoftLayer_Ticket", :username => "sample_username", :api_key => "blah")
368
+ masked_proxy = service.object_mask("fish", "cow", "duck")
369
+
370
+ service.should_receive(:issue_http_request).with(URI.parse("https://api.softlayer.com/rest/v3/SoftLayer_Ticket/123456/getObject.json?objectMask=fish;cow;duck"), an_instance_of(Net::HTTP::Get))
371
+ masked_proxy.object_with_id(123456).getObject
372
+
373
+ masked_proxy.server_object_id.should be_nil
374
+ masked_proxy.server_object_mask.should eql(["fish", "cow", "duck"])
375
+ end
376
+ end