ghost_google-api-client 0.4.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/CHANGELOG.md +77 -0
  2. data/Gemfile +30 -0
  3. data/Gemfile.lock +80 -0
  4. data/LICENSE +202 -0
  5. data/README.md +71 -0
  6. data/Rakefile +42 -0
  7. data/bin/google-api +545 -0
  8. data/lib/compat/multi_json.rb +17 -0
  9. data/lib/google/api_client.rb +802 -0
  10. data/lib/google/api_client/batch.rb +296 -0
  11. data/lib/google/api_client/client_secrets.rb +106 -0
  12. data/lib/google/api_client/discovery.rb +19 -0
  13. data/lib/google/api_client/discovery/api.rb +287 -0
  14. data/lib/google/api_client/discovery/media.rb +77 -0
  15. data/lib/google/api_client/discovery/method.rb +369 -0
  16. data/lib/google/api_client/discovery/resource.rb +150 -0
  17. data/lib/google/api_client/discovery/schema.rb +119 -0
  18. data/lib/google/api_client/environment.rb +42 -0
  19. data/lib/google/api_client/errors.rb +49 -0
  20. data/lib/google/api_client/media.rb +172 -0
  21. data/lib/google/api_client/reference.rb +305 -0
  22. data/lib/google/api_client/result.rb +161 -0
  23. data/lib/google/api_client/service_account.rb +134 -0
  24. data/lib/google/api_client/version.rb +31 -0
  25. data/lib/google/inflection.rb +28 -0
  26. data/spec/fixtures/files/sample.txt +33 -0
  27. data/spec/google/api_client/batch_spec.rb +241 -0
  28. data/spec/google/api_client/discovery_spec.rb +670 -0
  29. data/spec/google/api_client/media_spec.rb +143 -0
  30. data/spec/google/api_client/result_spec.rb +185 -0
  31. data/spec/google/api_client/service_account_spec.rb +58 -0
  32. data/spec/google/api_client_spec.rb +139 -0
  33. data/spec/spec_helper.rb +7 -0
  34. data/tasks/gem.rake +97 -0
  35. data/tasks/git.rake +45 -0
  36. data/tasks/metrics.rake +22 -0
  37. data/tasks/spec.rake +57 -0
  38. data/tasks/wiki.rake +82 -0
  39. data/tasks/yard.rake +29 -0
  40. metadata +253 -0
@@ -0,0 +1,670 @@
1
+ # encoding:utf-8
2
+
3
+ # Copyright 2010 Google Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ require 'spec_helper'
19
+
20
+ gem 'faraday', '~> 0.8.1'
21
+ require 'faraday'
22
+ require 'faraday/utils'
23
+ require 'multi_json'
24
+ require 'compat/multi_json'
25
+
26
+ gem 'signet', '~> 0.4.0'
27
+ require 'signet/oauth_1/client'
28
+
29
+ require 'google/api_client'
30
+ require 'google/api_client/version'
31
+
32
+ describe Google::APIClient do
33
+ CLIENT ||= Google::APIClient.new
34
+
35
+ after do
36
+ # Reset client to not-quite-pristine state
37
+ CLIENT.key = nil
38
+ CLIENT.user_ip = nil
39
+ end
40
+
41
+ it 'should raise a type error for bogus authorization' do
42
+ (lambda do
43
+ Google::APIClient.new(:authorization => 42)
44
+ end).should raise_error(TypeError)
45
+ end
46
+
47
+ it 'should not be able to retrieve the discovery document for a bogus API' do
48
+ (lambda do
49
+ CLIENT.discovery_document('bogus')
50
+ end).should raise_error(Google::APIClient::TransmissionError)
51
+ (lambda do
52
+ CLIENT.discovered_api('bogus')
53
+ end).should raise_error(Google::APIClient::TransmissionError)
54
+ end
55
+
56
+ it 'should raise an error for bogus services' do
57
+ (lambda do
58
+ CLIENT.discovered_api(42)
59
+ end).should raise_error(TypeError)
60
+ end
61
+
62
+ it 'should raise an error for bogus services' do
63
+ (lambda do
64
+ CLIENT.preferred_version(42)
65
+ end).should raise_error(TypeError)
66
+ end
67
+
68
+ it 'should raise an error for bogus methods' do
69
+ (lambda do
70
+ CLIENT.generate_request(42)
71
+ end).should raise_error(TypeError)
72
+ end
73
+
74
+ it 'should not return a preferred version for bogus service names' do
75
+ CLIENT.preferred_version('bogus').should == nil
76
+ end
77
+
78
+ describe 'with the prediction API' do
79
+ before do
80
+ CLIENT.authorization = nil
81
+ # The prediction API no longer exposes a v1, so we have to be
82
+ # careful about looking up the wrong API version.
83
+ @prediction = CLIENT.discovered_api('prediction', 'v1.2')
84
+ end
85
+
86
+ it 'should correctly determine the discovery URI' do
87
+ CLIENT.discovery_uri('prediction').should ===
88
+ 'https://www.googleapis.com/discovery/v1/apis/prediction/v1/rest'
89
+ end
90
+
91
+ it 'should correctly determine the discovery URI if :user_ip is set' do
92
+ CLIENT.user_ip = '127.0.0.1'
93
+ request = CLIENT.generate_request(
94
+ :http_method => 'GET',
95
+ :uri => CLIENT.discovery_uri('prediction', 'v1.2'),
96
+ :authenticated => false
97
+ )
98
+ request.to_env(Faraday.default_connection)[:url].to_s.should === (
99
+ 'https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest' +
100
+ '?userIp=127.0.0.1'
101
+ )
102
+ end
103
+
104
+ it 'should correctly determine the discovery URI if :key is set' do
105
+ CLIENT.key = 'qwerty'
106
+ request = CLIENT.generate_request(
107
+ :http_method => 'GET',
108
+ :uri => CLIENT.discovery_uri('prediction', 'v1.2'),
109
+ :authenticated => false
110
+ )
111
+ request.to_env(Faraday.default_connection)[:url].to_s.should === (
112
+ 'https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest' +
113
+ '?key=qwerty'
114
+ )
115
+ end
116
+
117
+ it 'should correctly determine the discovery URI if both are set' do
118
+ CLIENT.key = 'qwerty'
119
+ CLIENT.user_ip = '127.0.0.1'
120
+ request = CLIENT.generate_request(
121
+ :http_method => 'GET',
122
+ :uri => CLIENT.discovery_uri('prediction', 'v1.2'),
123
+ :authenticated => false
124
+ )
125
+ Addressable::URI.parse(
126
+ request.to_env(Faraday.default_connection)[:url]
127
+ ).query_values.should == {
128
+ 'key' => 'qwerty',
129
+ 'userIp' => '127.0.0.1'
130
+ }
131
+ end
132
+
133
+ it 'should correctly generate API objects' do
134
+ CLIENT.discovered_api('prediction', 'v1.2').name.should == 'prediction'
135
+ CLIENT.discovered_api('prediction', 'v1.2').version.should == 'v1.2'
136
+ CLIENT.discovered_api(:prediction, 'v1.2').name.should == 'prediction'
137
+ CLIENT.discovered_api(:prediction, 'v1.2').version.should == 'v1.2'
138
+ end
139
+
140
+ it 'should discover methods' do
141
+ CLIENT.discovered_method(
142
+ 'prediction.training.insert', 'prediction', 'v1.2'
143
+ ).name.should == 'insert'
144
+ CLIENT.discovered_method(
145
+ :'prediction.training.insert', :prediction, 'v1.2'
146
+ ).name.should == 'insert'
147
+ CLIENT.discovered_method(
148
+ 'prediction.training.delete', 'prediction', 'v1.2'
149
+ ).name.should == 'delete'
150
+ end
151
+
152
+ it 'should define the origin API in discovered methods' do
153
+ CLIENT.discovered_method(
154
+ 'prediction.training.insert', 'prediction', 'v1.2'
155
+ ).api.name.should == 'prediction'
156
+ end
157
+
158
+ it 'should not find methods that are not in the discovery document' do
159
+ CLIENT.discovered_method(
160
+ 'prediction.bogus', 'prediction', 'v1.2'
161
+ ).should == nil
162
+ end
163
+
164
+ it 'should raise an error for bogus methods' do
165
+ (lambda do
166
+ CLIENT.discovered_method(42, 'prediction', 'v1.2')
167
+ end).should raise_error(TypeError)
168
+ end
169
+
170
+ it 'should raise an error for bogus methods' do
171
+ (lambda do
172
+ CLIENT.generate_request(CLIENT.discovered_api('prediction', 'v1.2'))
173
+ end).should raise_error(TypeError)
174
+ end
175
+
176
+ it 'should correctly determine the preferred version' do
177
+ CLIENT.preferred_version('prediction').version.should_not == 'v1'
178
+ CLIENT.preferred_version(:prediction).version.should_not == 'v1'
179
+ end
180
+
181
+ it 'should return a batch path' do
182
+ CLIENT.discovered_api('prediction', 'v1.2').batch_path.should_not be_nil
183
+ end
184
+
185
+ it 'should generate valid requests' do
186
+ request = CLIENT.generate_request(
187
+ :api_method => @prediction.training.insert,
188
+ :parameters => {'data' => '12345'}
189
+ )
190
+ request.method.should == :post
191
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
192
+ 'https://www.googleapis.com/prediction/v1.2/training?data=12345'
193
+ request.headers.should be_empty
194
+ request.body.should == ''
195
+ end
196
+
197
+ it 'should generate valid requests when repeated parameters are passed' do
198
+ request = CLIENT.generate_request(
199
+ :api_method => @prediction.training.insert,
200
+ :parameters => [['data', '1'], ['data','2']]
201
+ )
202
+ request.method.should == :post
203
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
204
+ 'https://www.googleapis.com/prediction/v1.2/training?data=1&data=2'
205
+ end
206
+
207
+ it 'should generate requests against the correct URIs' do
208
+ request = CLIENT.generate_request(
209
+ :api_method => @prediction.training.insert,
210
+ :parameters => {'data' => '12345'}
211
+ )
212
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
213
+ 'https://www.googleapis.com/prediction/v1.2/training?data=12345'
214
+ end
215
+
216
+ it 'should generate requests against the correct URIs' do
217
+ request = CLIENT.generate_request(
218
+ :api_method => @prediction.training.insert,
219
+ :parameters => {'data' => '12345'}
220
+ )
221
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
222
+ 'https://www.googleapis.com/prediction/v1.2/training?data=12345'
223
+ end
224
+
225
+ it 'should allow modification to the base URIs for testing purposes' do
226
+ # Using a new client instance here to avoid caching rebased discovery doc
227
+ prediction_rebase =
228
+ Google::APIClient.new.discovered_api('prediction', 'v1.2')
229
+ prediction_rebase.method_base =
230
+ 'https://testing-domain.example.com/prediction/v1.2/'
231
+ request = CLIENT.generate_request(
232
+ :api_method => prediction_rebase.training.insert,
233
+ :parameters => {'data' => '123'}
234
+ )
235
+ request.to_env(Faraday.default_connection)[:url].to_s.should === (
236
+ 'https://testing-domain.example.com/' +
237
+ 'prediction/v1.2/training?data=123'
238
+ )
239
+ end
240
+
241
+ it 'should generate OAuth 1 requests' do
242
+ CLIENT.authorization = :oauth_1
243
+ CLIENT.authorization.token_credential_key = '12345'
244
+ CLIENT.authorization.token_credential_secret = '12345'
245
+ request = CLIENT.generate_request(
246
+ :api_method => @prediction.training.insert,
247
+ :parameters => {'data' => '12345'}
248
+ )
249
+ request.headers.should have_key('Authorization')
250
+ request.headers['Authorization'].should =~ /^OAuth/
251
+ end
252
+
253
+ it 'should generate OAuth 2 requests' do
254
+ CLIENT.authorization = :oauth_2
255
+ CLIENT.authorization.access_token = '12345'
256
+ request = CLIENT.generate_request(
257
+ :api_method => @prediction.training.insert,
258
+ :parameters => {'data' => '12345'}
259
+ )
260
+ request.headers.should have_key('Authorization')
261
+ request.headers['Authorization'].should =~ /^Bearer/
262
+ end
263
+
264
+ it 'should not be able to execute improperly authorized requests' do
265
+ CLIENT.authorization = :oauth_1
266
+ CLIENT.authorization.token_credential_key = '12345'
267
+ CLIENT.authorization.token_credential_secret = '12345'
268
+ result = CLIENT.execute(
269
+ @prediction.training.insert,
270
+ {'data' => '12345'}
271
+ )
272
+ result.response.status.should == 401
273
+ end
274
+
275
+ it 'should not be able to execute improperly authorized requests' do
276
+ CLIENT.authorization = :oauth_2
277
+ CLIENT.authorization.access_token = '12345'
278
+ result = CLIENT.execute(
279
+ @prediction.training.insert,
280
+ {'data' => '12345'}
281
+ )
282
+ result.response.status.should == 401
283
+ end
284
+
285
+ it 'should not be able to execute improperly authorized requests' do
286
+ (lambda do
287
+ CLIENT.authorization = :oauth_1
288
+ CLIENT.authorization.token_credential_key = '12345'
289
+ CLIENT.authorization.token_credential_secret = '12345'
290
+ result = CLIENT.execute!(
291
+ @prediction.training.insert,
292
+ {'data' => '12345'}
293
+ )
294
+ end).should raise_error(Google::APIClient::ClientError)
295
+ end
296
+
297
+ it 'should not be able to execute improperly authorized requests' do
298
+ (lambda do
299
+ CLIENT.authorization = :oauth_2
300
+ CLIENT.authorization.access_token = '12345'
301
+ result = CLIENT.execute!(
302
+ @prediction.training.insert,
303
+ {'data' => '12345'}
304
+ )
305
+ end).should raise_error(Google::APIClient::ClientError)
306
+ end
307
+
308
+ it 'should correctly handle unnamed parameters' do
309
+ CLIENT.authorization = :oauth_2
310
+ CLIENT.authorization.access_token = '12345'
311
+ result = CLIENT.execute(
312
+ @prediction.training.insert,
313
+ {},
314
+ MultiJson.dump({"id" => "bucket/object"}),
315
+ {'Content-Type' => 'application/json'}
316
+ )
317
+ result.request.headers['Content-Type'].should == 'application/json'
318
+ end
319
+ end
320
+
321
+ describe 'with the plus API' do
322
+ before do
323
+ CLIENT.authorization = nil
324
+ @plus = CLIENT.discovered_api('plus')
325
+ end
326
+
327
+ it 'should correctly determine the discovery URI' do
328
+ CLIENT.discovery_uri('plus').should ===
329
+ 'https://www.googleapis.com/discovery/v1/apis/plus/v1/rest'
330
+ end
331
+
332
+ it 'should find APIs that are in the discovery document' do
333
+ CLIENT.discovered_api('plus').name.should == 'plus'
334
+ CLIENT.discovered_api('plus').version.should == 'v1'
335
+ CLIENT.discovered_api(:plus).name.should == 'plus'
336
+ CLIENT.discovered_api(:plus).version.should == 'v1'
337
+ end
338
+
339
+ it 'should find methods that are in the discovery document' do
340
+ # TODO(bobaman) Fix this when the RPC names are correct
341
+ CLIENT.discovered_method(
342
+ 'plus.activities.list', 'plus'
343
+ ).name.should == 'list'
344
+ end
345
+
346
+ it 'should define the origin API in discovered methods' do
347
+ CLIENT.discovered_method(
348
+ 'plus.activities.list', 'plus'
349
+ ).api.name.should == 'plus'
350
+ end
351
+
352
+ it 'should not find methods that are not in the discovery document' do
353
+ CLIENT.discovered_method('plus.bogus', 'plus').should == nil
354
+ end
355
+
356
+ it 'should generate requests against the correct URIs' do
357
+ request = CLIENT.generate_request(
358
+ :api_method => @plus.activities.list,
359
+ :parameters => {
360
+ 'userId' => '107807692475771887386', 'collection' => 'public'
361
+ },
362
+ :authenticated => false
363
+ )
364
+ request.to_env(Faraday.default_connection)[:url].to_s.should === (
365
+ 'https://www.googleapis.com/plus/v1/' +
366
+ 'people/107807692475771887386/activities/public'
367
+ )
368
+ end
369
+
370
+ it 'should correctly validate parameters' do
371
+ (lambda do
372
+ CLIENT.generate_request(
373
+ :api_method => @plus.activities.list,
374
+ :parameters => {'alt' => 'json'},
375
+ :authenticated => false
376
+ )
377
+ end).should raise_error(ArgumentError)
378
+ end
379
+
380
+ it 'should correctly validate parameters' do
381
+ (lambda do
382
+ CLIENT.generate_request(
383
+ :api_method => @plus.activities.list,
384
+ :parameters => {
385
+ 'userId' => '107807692475771887386', 'collection' => 'bogus'
386
+ },
387
+ :authenticated => false
388
+ )
389
+ end).should raise_error(ArgumentError)
390
+ end
391
+ end
392
+
393
+ describe 'with the latitude API' do
394
+ before do
395
+ CLIENT.authorization = nil
396
+ @latitude = CLIENT.discovered_api('latitude')
397
+ end
398
+
399
+ it 'should correctly determine the discovery URI' do
400
+ CLIENT.discovery_uri('latitude').should ===
401
+ 'https://www.googleapis.com/discovery/v1/apis/latitude/v1/rest'
402
+ end
403
+
404
+ it 'should find APIs that are in the discovery document' do
405
+ CLIENT.discovered_api('latitude').name.should == 'latitude'
406
+ CLIENT.discovered_api('latitude').version.should == 'v1'
407
+ end
408
+
409
+ it 'should return a batch path' do
410
+ CLIENT.discovered_api('latitude').batch_path.should_not be_nil
411
+ end
412
+
413
+ it 'should find methods that are in the discovery document' do
414
+ CLIENT.discovered_method(
415
+ 'latitude.currentLocation.get', 'latitude'
416
+ ).name.should == 'get'
417
+ end
418
+
419
+ it 'should define the origin API in discovered methods' do
420
+ CLIENT.discovered_method(
421
+ 'latitude.currentLocation.get', 'latitude'
422
+ ).api.name.should == 'latitude'
423
+ end
424
+
425
+ it 'should not find methods that are not in the discovery document' do
426
+ CLIENT.discovered_method('latitude.bogus', 'latitude').should == nil
427
+ end
428
+
429
+ it 'should generate requests against the correct URIs' do
430
+ request = CLIENT.generate_request(
431
+ :api_method => 'latitude.currentLocation.get',
432
+ :authenticated => false
433
+ )
434
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
435
+ 'https://www.googleapis.com/latitude/v1/currentLocation'
436
+ end
437
+
438
+ it 'should generate requests against the correct URIs' do
439
+ request = CLIENT.generate_request(
440
+ :api_method => @latitude.current_location.get,
441
+ :authenticated => false
442
+ )
443
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
444
+ 'https://www.googleapis.com/latitude/v1/currentLocation'
445
+ end
446
+
447
+ it 'should not be able to execute requests without authorization' do
448
+ result = CLIENT.execute(
449
+ :api_method => 'latitude.currentLocation.get',
450
+ :authenticated => false
451
+ )
452
+ result.response.status.should == 401
453
+ end
454
+ end
455
+
456
+ describe 'with the moderator API' do
457
+ before do
458
+ CLIENT.authorization = nil
459
+ @moderator = CLIENT.discovered_api('moderator')
460
+ end
461
+
462
+ it 'should correctly determine the discovery URI' do
463
+ CLIENT.discovery_uri('moderator').should ===
464
+ 'https://www.googleapis.com/discovery/v1/apis/moderator/v1/rest'
465
+ end
466
+
467
+ it 'should find APIs that are in the discovery document' do
468
+ CLIENT.discovered_api('moderator').name.should == 'moderator'
469
+ CLIENT.discovered_api('moderator').version.should == 'v1'
470
+ end
471
+
472
+ it 'should find methods that are in the discovery document' do
473
+ CLIENT.discovered_method(
474
+ 'moderator.profiles.get', 'moderator'
475
+ ).name.should == 'get'
476
+ end
477
+
478
+ it 'should define the origin API in discovered methods' do
479
+ CLIENT.discovered_method(
480
+ 'moderator.profiles.get', 'moderator'
481
+ ).api.name.should == 'moderator'
482
+ end
483
+
484
+ it 'should not find methods that are not in the discovery document' do
485
+ CLIENT.discovered_method('moderator.bogus', 'moderator').should == nil
486
+ end
487
+
488
+ it 'should return a batch path' do
489
+ CLIENT.discovered_api('moderator').batch_path.should_not be_nil
490
+ end
491
+
492
+ it 'should generate requests against the correct URIs' do
493
+ request = CLIENT.generate_request(
494
+ :api_method => 'moderator.profiles.get',
495
+ :authenticated => false
496
+ )
497
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
498
+ 'https://www.googleapis.com/moderator/v1/profiles/@me'
499
+ end
500
+
501
+ it 'should generate requests against the correct URIs' do
502
+ request = CLIENT.generate_request(
503
+ :api_method => @moderator.profiles.get,
504
+ :authenticated => false
505
+ )
506
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
507
+ 'https://www.googleapis.com/moderator/v1/profiles/@me'
508
+ end
509
+
510
+ it 'should not be able to execute requests without authorization' do
511
+ result = CLIENT.execute(
512
+ 'moderator.profiles.get',
513
+ {},
514
+ '',
515
+ [],
516
+ {:authenticated => false}
517
+ )
518
+ result.response.status.should == 401
519
+ end
520
+ end
521
+
522
+ describe 'with the adsense API' do
523
+ before do
524
+ CLIENT.authorization = nil
525
+ @adsense = CLIENT.discovered_api('adsense', 'v1')
526
+ end
527
+
528
+ it 'should correctly determine the discovery URI' do
529
+ CLIENT.discovery_uri('adsense').should ===
530
+ 'https://www.googleapis.com/discovery/v1/apis/adsense/v1/rest'
531
+ end
532
+
533
+ it 'should find APIs that are in the discovery document' do
534
+ CLIENT.discovered_api('adsense').name.should == 'adsense'
535
+ CLIENT.discovered_api('adsense').version.should == 'v1'
536
+ end
537
+
538
+ it 'should return a batch path' do
539
+ CLIENT.discovered_api('adsense').batch_path.should_not be_nil
540
+ end
541
+
542
+ it 'should find methods that are in the discovery document' do
543
+ CLIENT.discovered_method(
544
+ 'adsense.reports.generate', 'adsense'
545
+ ).name.should == 'generate'
546
+ end
547
+
548
+ it 'should not find methods that are not in the discovery document' do
549
+ CLIENT.discovered_method('adsense.bogus', 'adsense').should == nil
550
+ end
551
+
552
+ it 'should generate requests against the correct URIs' do
553
+ request = CLIENT.generate_request(
554
+ :api_method => 'adsense.adclients.list',
555
+ :authenticated => false
556
+ )
557
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
558
+ 'https://www.googleapis.com/adsense/v1/adclients'
559
+ end
560
+
561
+ it 'should generate requests against the correct URIs' do
562
+ request = CLIENT.generate_request(
563
+ :api_method => @adsense.adclients.list,
564
+ :authenticated => false
565
+ )
566
+ request.to_env(Faraday.default_connection)[:url].to_s.should ===
567
+ 'https://www.googleapis.com/adsense/v1/adclients'
568
+ end
569
+
570
+ it 'should not be able to execute requests without authorization' do
571
+ result = CLIENT.execute(
572
+ :api_method => 'adsense.adclients.list',
573
+ :authenticated => false
574
+ )
575
+ result.response.status.should == 401
576
+ end
577
+
578
+ it 'should fail when validating missing required parameters' do
579
+ (lambda do
580
+ CLIENT.generate_request(
581
+ :api_method => @adsense.reports.generate,
582
+ :authenticated => false
583
+ )
584
+ end).should raise_error(ArgumentError)
585
+ end
586
+
587
+ it 'should succeed when validating parameters in a correct call' do
588
+ (lambda do
589
+ CLIENT.generate_request(
590
+ :api_method => @adsense.reports.generate,
591
+ :parameters => {
592
+ 'startDate' => '2000-01-01',
593
+ 'endDate' => '2010-01-01',
594
+ 'dimension' => 'DATE',
595
+ 'metric' => 'PAGE_VIEWS'
596
+ },
597
+ :authenticated => false
598
+ )
599
+ end).should_not raise_error
600
+ end
601
+
602
+ it 'should fail when validating parameters with invalid values' do
603
+ (lambda do
604
+ CLIENT.generate_request(
605
+ :api_method => @adsense.reports.generate,
606
+ :parameters => {
607
+ 'startDate' => '2000-01-01',
608
+ 'endDate' => '2010-01-01',
609
+ 'dimension' => 'BAD_CHARACTERS=-&*(£&',
610
+ 'metric' => 'PAGE_VIEWS'
611
+ },
612
+ :authenticated => false
613
+ )
614
+ end).should raise_error(ArgumentError)
615
+ end
616
+
617
+ it 'should succeed when validating repeated parameters in a correct call' do
618
+ (lambda do
619
+ CLIENT.generate_request(
620
+ :api_method => @adsense.reports.generate,
621
+ :parameters => {
622
+ 'startDate' => '2000-01-01',
623
+ 'endDate' => '2010-01-01',
624
+ 'dimension' => ['DATE', 'PRODUCT_CODE'],
625
+ 'metric' => ['PAGE_VIEWS', 'CLICKS']
626
+ },
627
+ :authenticated => false
628
+ )
629
+ end).should_not raise_error
630
+ end
631
+
632
+ it 'should fail when validating incorrect repeated parameters' do
633
+ (lambda do
634
+ CLIENT.generate_request(
635
+ :api_method => @adsense.reports.generate,
636
+ :parameters => {
637
+ 'startDate' => '2000-01-01',
638
+ 'endDate' => '2010-01-01',
639
+ 'dimension' => ['DATE', 'BAD_CHARACTERS=-&*(£&'],
640
+ 'metric' => ['PAGE_VIEWS', 'CLICKS']
641
+ },
642
+ :authenticated => false
643
+ )
644
+ end).should raise_error(ArgumentError)
645
+ end
646
+ end
647
+
648
+ describe 'with the Drive API' do
649
+ before do
650
+ CLIENT.authorization = nil
651
+ @drive = CLIENT.discovered_api('drive', 'v1')
652
+ end
653
+
654
+ it 'should include media upload info methods' do
655
+ @drive.files.insert.media_upload.should_not == nil
656
+ end
657
+
658
+ it 'should include accepted media types' do
659
+ @drive.files.insert.media_upload.accepted_types.should_not be_empty
660
+ end
661
+
662
+ it 'should have an upload path' do
663
+ @drive.files.insert.media_upload.uri_template.should_not == nil
664
+ end
665
+
666
+ it 'should have a max file size' do
667
+ @drive.files.insert.media_upload.max_size.should_not == nil
668
+ end
669
+ end
670
+ end