google-authsub 0.0.4

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.
Files changed (69) hide show
  1. data/.gitignore +1 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +98 -0
  4. data/Rakefile +19 -0
  5. data/VERSION +1 -0
  6. data/coverage/-Library-Ruby-Gems-1_8-gems-FakeWeb-1_1_2-lib-fake_net_http_rb.html +679 -0
  7. data/coverage/-Library-Ruby-Gems-1_8-gems-FakeWeb-1_1_2-lib-fake_web_rb.html +843 -0
  8. data/coverage/-Library-Ruby-Gems-1_8-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +1598 -0
  9. data/coverage/index.html +360 -0
  10. data/coverage/lib-googleauthsub_rb.html +877 -0
  11. data/coverage/spec-googleauthsub_spec_rb.html +950 -0
  12. data/coverage/spec-spec_helper_rb.html +640 -0
  13. data/doc/classes/AuthEchoServlet.html +152 -0
  14. data/doc/classes/AuthEchoServlet.src/M000001.html +20 -0
  15. data/doc/classes/AuthEchoServlet.src/M000002.html +18 -0
  16. data/doc/classes/GData/AuthSubError.html +139 -0
  17. data/doc/classes/GData/AuthSubError.src/M000019.html +18 -0
  18. data/doc/classes/GData/Error.html +111 -0
  19. data/doc/classes/GData/GoogleAuthSub.html +521 -0
  20. data/doc/classes/GData/GoogleAuthSub.src/M000001.html +29 -0
  21. data/doc/classes/GData/GoogleAuthSub.src/M000002.html +22 -0
  22. data/doc/classes/GData/GoogleAuthSub.src/M000003.html +29 -0
  23. data/doc/classes/GData/GoogleAuthSub.src/M000004.html +22 -0
  24. data/doc/classes/GData/GoogleAuthSub.src/M000005.html +24 -0
  25. data/doc/classes/GData/GoogleAuthSub.src/M000006.html +19 -0
  26. data/doc/classes/GData/GoogleAuthSub.src/M000007.html +18 -0
  27. data/doc/classes/GData/GoogleAuthSub.src/M000008.html +18 -0
  28. data/doc/classes/GData/GoogleAuthSub.src/M000009.html +24 -0
  29. data/doc/classes/GData/GoogleAuthSub.src/M000010.html +25 -0
  30. data/doc/classes/GData/GoogleAuthSub.src/M000011.html +30 -0
  31. data/doc/classes/GData/GoogleAuthSub.src/M000012.html +18 -0
  32. data/doc/classes/GData/GoogleAuthSub.src/M000013.html +18 -0
  33. data/doc/classes/GData/GoogleAuthSub.src/M000014.html +18 -0
  34. data/doc/classes/GData/GoogleAuthSub.src/M000015.html +18 -0
  35. data/doc/classes/GData/GoogleAuthSub.src/M000016.html +20 -0
  36. data/doc/classes/GData/GoogleAuthSub.src/M000017.html +20 -0
  37. data/doc/classes/GData/GoogleAuthSub.src/M000018.html +19 -0
  38. data/doc/classes/GData.html +162 -0
  39. data/doc/created.rid +1 -0
  40. data/doc/files/googleauthsub_rb.html +140 -0
  41. data/doc/files/lib/googleauthsub_rb.html +140 -0
  42. data/doc/files/spec/googleauthsub_spec_rb.html +146 -0
  43. data/doc/files/spec/googleresponder_rb.html +121 -0
  44. data/doc/files/spec/spec_helper_rb.html +149 -0
  45. data/doc/fr_class_index.html +31 -0
  46. data/doc/fr_file_index.html +30 -0
  47. data/doc/fr_method_index.html +45 -0
  48. data/doc/index.html +24 -0
  49. data/doc/rdoc-style.css +208 -0
  50. data/google-authsub-0.0.2.gem +0 -0
  51. data/google-authsub-0.0.3.gem +0 -0
  52. data/google-authsub.gemspec +109 -0
  53. data/lib/googleauthsub.rb +271 -0
  54. data/live test/authsub_test.html +40 -0
  55. data/live test/gastest.rb +90 -0
  56. data/spec/googleauthsub_spec.rb +350 -0
  57. data/spec/googleresponder.rb +26 -0
  58. data/spec/mock responses/bad_token_info.txt +11 -0
  59. data/spec/mock responses/calendar.txt +11 -0
  60. data/spec/mock responses/revoke_token.txt +7 -0
  61. data/spec/mock responses/revoked_token.txt +17 -0
  62. data/spec/mock responses/session_token.txt +9 -0
  63. data/spec/mock responses/token_info.txt +11 -0
  64. data/spec/mock responses/unauthorized.txt +18 -0
  65. data/spec/mock_certs/test_private_key.pem +15 -0
  66. data/spec/mock_certs/test_public_key.pem +6 -0
  67. data/spec/spec_helper.rb +30 -0
  68. data/spec/spec_opts +7 -0
  69. metadata +125 -0
@@ -0,0 +1,950 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>spec/googleauthsub_spec.rb - C0 code coverage information</title>
3
+ <style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
4
+ <style type='text/css'>span.cross-ref-title {
5
+ font-size: 140%;
6
+ }
7
+ span.cross-ref a {
8
+ text-decoration: none;
9
+ }
10
+ span.cross-ref {
11
+ background-color:#f3f7fa;
12
+ border: 1px dashed #333;
13
+ margin: 1em;
14
+ padding: 0.5em;
15
+ overflow: hidden;
16
+ }
17
+ a.crossref-toggle {
18
+ text-decoration: none;
19
+ }
20
+ span.marked0 {
21
+ background-color: rgb(185, 210, 200);
22
+ display: block;
23
+ }
24
+ span.marked1 {
25
+ background-color: rgb(190, 215, 205);
26
+ display: block;
27
+ }
28
+ span.inferred0 {
29
+ background-color: rgb(175, 200, 200);
30
+ display: block;
31
+ }
32
+ span.inferred1 {
33
+ background-color: rgb(180, 205, 205);
34
+ display: block;
35
+ }
36
+ span.uncovered0 {
37
+ background-color: rgb(225, 110, 110);
38
+ display: block;
39
+ }
40
+ span.uncovered1 {
41
+ background-color: rgb(235, 120, 120);
42
+ display: block;
43
+ }
44
+ span.overview {
45
+ border-bottom: 8px solid black;
46
+ }
47
+ div.overview {
48
+ border-bottom: 8px solid black;
49
+ }
50
+ body {
51
+ font-family: verdana, arial, helvetica;
52
+ }
53
+ div.footer {
54
+ font-size: 68%;
55
+ margin-top: 1.5em;
56
+ }
57
+ h1, h2, h3, h4, h5, h6 {
58
+ margin-bottom: 0.5em;
59
+ }
60
+ h5 {
61
+ margin-top: 0.5em;
62
+ }
63
+ .hidden {
64
+ display: none;
65
+ }
66
+ div.separator {
67
+ height: 10px;
68
+ }
69
+ /* Commented out for better readability, esp. on IE */
70
+ /*
71
+ table tr td, table tr th {
72
+ font-size: 68%;
73
+ }
74
+ td.value table tr td {
75
+ font-size: 11px;
76
+ }
77
+ */
78
+ table.percent_graph {
79
+ height: 12px;
80
+ border: #808080 1px solid;
81
+ empty-cells: show;
82
+ }
83
+ table.percent_graph td.covered {
84
+ height: 10px;
85
+ background: #00f000;
86
+ }
87
+ table.percent_graph td.uncovered {
88
+ height: 10px;
89
+ background: #e00000;
90
+ }
91
+ table.percent_graph td.NA {
92
+ height: 10px;
93
+ background: #eaeaea;
94
+ }
95
+ table.report {
96
+ border-collapse: collapse;
97
+ width: 100%;
98
+ }
99
+ table.report td.heading {
100
+ background: #dcecff;
101
+ border: #d0d0d0 1px solid;
102
+ font-weight: bold;
103
+ text-align: center;
104
+ }
105
+ table.report td.heading:hover {
106
+ background: #c0ffc0;
107
+ }
108
+ table.report td.text {
109
+ border: #d0d0d0 1px solid;
110
+ }
111
+ table.report td.value,
112
+ table.report td.lines_total,
113
+ table.report td.lines_code {
114
+ text-align: right;
115
+ border: #d0d0d0 1px solid;
116
+ }
117
+ table.report tr.light {
118
+ background-color: rgb(240, 240, 245);
119
+ }
120
+ table.report tr.dark {
121
+ background-color: rgb(230, 230, 235);
122
+ }
123
+ </style>
124
+ <script type='text/javascript'>
125
+ // <![CDATA[
126
+ function toggleCode( id ) {
127
+ if ( document.getElementById )
128
+ elem = document.getElementById( id );
129
+ else if ( document.all )
130
+ elem = eval( "document.all." + id );
131
+ else
132
+ return false;
133
+
134
+ elemStyle = elem.style;
135
+
136
+ if ( elemStyle.display != "block" ) {
137
+ elemStyle.display = "block"
138
+ } else {
139
+ elemStyle.display = "none"
140
+ }
141
+
142
+ return true;
143
+ }
144
+
145
+ // Make cross-references hidden by default
146
+ document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
147
+ // ]]>
148
+ </script>
149
+ <style type='text/css'>span.run0 {
150
+ background-color: rgb(178, 204, 255);
151
+ display: block;
152
+ }
153
+ span.run1 {
154
+ background-color: rgb(178, 206, 255);
155
+ display: block;
156
+ }
157
+ span.run2 {
158
+ background-color: rgb(178, 209, 255);
159
+ display: block;
160
+ }
161
+ span.run3 {
162
+ background-color: rgb(178, 211, 255);
163
+ display: block;
164
+ }
165
+ span.run4 {
166
+ background-color: rgb(178, 214, 255);
167
+ display: block;
168
+ }
169
+ span.run5 {
170
+ background-color: rgb(178, 218, 255);
171
+ display: block;
172
+ }
173
+ span.run6 {
174
+ background-color: rgb(178, 220, 255);
175
+ display: block;
176
+ }
177
+ span.run7 {
178
+ background-color: rgb(178, 223, 255);
179
+ display: block;
180
+ }
181
+ span.run8 {
182
+ background-color: rgb(178, 225, 255);
183
+ display: block;
184
+ }
185
+ span.run9 {
186
+ background-color: rgb(178, 228, 255);
187
+ display: block;
188
+ }
189
+ span.run10 {
190
+ background-color: rgb(178, 232, 255);
191
+ display: block;
192
+ }
193
+ span.run11 {
194
+ background-color: rgb(178, 234, 255);
195
+ display: block;
196
+ }
197
+ span.run12 {
198
+ background-color: rgb(178, 237, 255);
199
+ display: block;
200
+ }
201
+ span.run13 {
202
+ background-color: rgb(178, 239, 255);
203
+ display: block;
204
+ }
205
+ span.run14 {
206
+ background-color: rgb(178, 242, 255);
207
+ display: block;
208
+ }
209
+ span.run15 {
210
+ background-color: rgb(178, 246, 255);
211
+ display: block;
212
+ }
213
+ span.run16 {
214
+ background-color: rgb(178, 248, 255);
215
+ display: block;
216
+ }
217
+ span.run17 {
218
+ background-color: rgb(178, 251, 255);
219
+ display: block;
220
+ }
221
+ span.run18 {
222
+ background-color: rgb(178, 253, 255);
223
+ display: block;
224
+ }
225
+ span.run19 {
226
+ background-color: rgb(178, 255, 253);
227
+ display: block;
228
+ }
229
+ span.run20 {
230
+ background-color: rgb(178, 255, 249);
231
+ display: block;
232
+ }
233
+ span.run21 {
234
+ background-color: rgb(178, 255, 247);
235
+ display: block;
236
+ }
237
+ span.run22 {
238
+ background-color: rgb(178, 255, 244);
239
+ display: block;
240
+ }
241
+ span.run23 {
242
+ background-color: rgb(178, 255, 242);
243
+ display: block;
244
+ }
245
+ span.run24 {
246
+ background-color: rgb(178, 255, 239);
247
+ display: block;
248
+ }
249
+ span.run25 {
250
+ background-color: rgb(178, 255, 235);
251
+ display: block;
252
+ }
253
+ span.run26 {
254
+ background-color: rgb(178, 255, 233);
255
+ display: block;
256
+ }
257
+ span.run27 {
258
+ background-color: rgb(178, 255, 230);
259
+ display: block;
260
+ }
261
+ span.run28 {
262
+ background-color: rgb(178, 255, 228);
263
+ display: block;
264
+ }
265
+ span.run29 {
266
+ background-color: rgb(178, 255, 225);
267
+ display: block;
268
+ }
269
+ span.run30 {
270
+ background-color: rgb(178, 255, 221);
271
+ display: block;
272
+ }
273
+ span.run31 {
274
+ background-color: rgb(178, 255, 219);
275
+ display: block;
276
+ }
277
+ span.run32 {
278
+ background-color: rgb(178, 255, 216);
279
+ display: block;
280
+ }
281
+ span.run33 {
282
+ background-color: rgb(178, 255, 214);
283
+ display: block;
284
+ }
285
+ span.run34 {
286
+ background-color: rgb(178, 255, 211);
287
+ display: block;
288
+ }
289
+ span.run35 {
290
+ background-color: rgb(178, 255, 207);
291
+ display: block;
292
+ }
293
+ span.run36 {
294
+ background-color: rgb(178, 255, 205);
295
+ display: block;
296
+ }
297
+ span.run37 {
298
+ background-color: rgb(178, 255, 202);
299
+ display: block;
300
+ }
301
+ span.run38 {
302
+ background-color: rgb(178, 255, 200);
303
+ display: block;
304
+ }
305
+ span.run39 {
306
+ background-color: rgb(178, 255, 197);
307
+ display: block;
308
+ }
309
+ span.run40 {
310
+ background-color: rgb(178, 255, 193);
311
+ display: block;
312
+ }
313
+ span.run41 {
314
+ background-color: rgb(178, 255, 191);
315
+ display: block;
316
+ }
317
+ span.run42 {
318
+ background-color: rgb(178, 255, 188);
319
+ display: block;
320
+ }
321
+ span.run43 {
322
+ background-color: rgb(178, 255, 186);
323
+ display: block;
324
+ }
325
+ span.run44 {
326
+ background-color: rgb(178, 255, 183);
327
+ display: block;
328
+ }
329
+ span.run45 {
330
+ background-color: rgb(178, 255, 179);
331
+ display: block;
332
+ }
333
+ span.run46 {
334
+ background-color: rgb(179, 255, 178);
335
+ display: block;
336
+ }
337
+ span.run47 {
338
+ background-color: rgb(182, 255, 178);
339
+ display: block;
340
+ }
341
+ span.run48 {
342
+ background-color: rgb(184, 255, 178);
343
+ display: block;
344
+ }
345
+ span.run49 {
346
+ background-color: rgb(187, 255, 178);
347
+ display: block;
348
+ }
349
+ span.run50 {
350
+ background-color: rgb(191, 255, 178);
351
+ display: block;
352
+ }
353
+ span.run51 {
354
+ background-color: rgb(193, 255, 178);
355
+ display: block;
356
+ }
357
+ span.run52 {
358
+ background-color: rgb(196, 255, 178);
359
+ display: block;
360
+ }
361
+ span.run53 {
362
+ background-color: rgb(198, 255, 178);
363
+ display: block;
364
+ }
365
+ span.run54 {
366
+ background-color: rgb(201, 255, 178);
367
+ display: block;
368
+ }
369
+ span.run55 {
370
+ background-color: rgb(205, 255, 178);
371
+ display: block;
372
+ }
373
+ span.run56 {
374
+ background-color: rgb(207, 255, 178);
375
+ display: block;
376
+ }
377
+ span.run57 {
378
+ background-color: rgb(210, 255, 178);
379
+ display: block;
380
+ }
381
+ span.run58 {
382
+ background-color: rgb(212, 255, 178);
383
+ display: block;
384
+ }
385
+ span.run59 {
386
+ background-color: rgb(215, 255, 178);
387
+ display: block;
388
+ }
389
+ span.run60 {
390
+ background-color: rgb(219, 255, 178);
391
+ display: block;
392
+ }
393
+ span.run61 {
394
+ background-color: rgb(221, 255, 178);
395
+ display: block;
396
+ }
397
+ span.run62 {
398
+ background-color: rgb(224, 255, 178);
399
+ display: block;
400
+ }
401
+ span.run63 {
402
+ background-color: rgb(226, 255, 178);
403
+ display: block;
404
+ }
405
+ span.run64 {
406
+ background-color: rgb(229, 255, 178);
407
+ display: block;
408
+ }
409
+ span.run65 {
410
+ background-color: rgb(233, 255, 178);
411
+ display: block;
412
+ }
413
+ span.run66 {
414
+ background-color: rgb(235, 255, 178);
415
+ display: block;
416
+ }
417
+ span.run67 {
418
+ background-color: rgb(238, 255, 178);
419
+ display: block;
420
+ }
421
+ span.run68 {
422
+ background-color: rgb(240, 255, 178);
423
+ display: block;
424
+ }
425
+ span.run69 {
426
+ background-color: rgb(243, 255, 178);
427
+ display: block;
428
+ }
429
+ span.run70 {
430
+ background-color: rgb(247, 255, 178);
431
+ display: block;
432
+ }
433
+ span.run71 {
434
+ background-color: rgb(249, 255, 178);
435
+ display: block;
436
+ }
437
+ span.run72 {
438
+ background-color: rgb(252, 255, 178);
439
+ display: block;
440
+ }
441
+ span.run73 {
442
+ background-color: rgb(255, 255, 178);
443
+ display: block;
444
+ }
445
+ span.run74 {
446
+ background-color: rgb(255, 252, 178);
447
+ display: block;
448
+ }
449
+ span.run75 {
450
+ background-color: rgb(255, 248, 178);
451
+ display: block;
452
+ }
453
+ span.run76 {
454
+ background-color: rgb(255, 246, 178);
455
+ display: block;
456
+ }
457
+ span.run77 {
458
+ background-color: rgb(255, 243, 178);
459
+ display: block;
460
+ }
461
+ span.run78 {
462
+ background-color: rgb(255, 240, 178);
463
+ display: block;
464
+ }
465
+ span.run79 {
466
+ background-color: rgb(255, 238, 178);
467
+ display: block;
468
+ }
469
+ span.run80 {
470
+ background-color: rgb(255, 234, 178);
471
+ display: block;
472
+ }
473
+ span.run81 {
474
+ background-color: rgb(255, 232, 178);
475
+ display: block;
476
+ }
477
+ span.run82 {
478
+ background-color: rgb(255, 229, 178);
479
+ display: block;
480
+ }
481
+ span.run83 {
482
+ background-color: rgb(255, 226, 178);
483
+ display: block;
484
+ }
485
+ span.run84 {
486
+ background-color: rgb(255, 224, 178);
487
+ display: block;
488
+ }
489
+ span.run85 {
490
+ background-color: rgb(255, 220, 178);
491
+ display: block;
492
+ }
493
+ span.run86 {
494
+ background-color: rgb(255, 218, 178);
495
+ display: block;
496
+ }
497
+ span.run87 {
498
+ background-color: rgb(255, 215, 178);
499
+ display: block;
500
+ }
501
+ span.run88 {
502
+ background-color: rgb(255, 212, 178);
503
+ display: block;
504
+ }
505
+ span.run89 {
506
+ background-color: rgb(255, 210, 178);
507
+ display: block;
508
+ }
509
+ span.run90 {
510
+ background-color: rgb(255, 206, 178);
511
+ display: block;
512
+ }
513
+ span.run91 {
514
+ background-color: rgb(255, 204, 178);
515
+ display: block;
516
+ }
517
+ span.run92 {
518
+ background-color: rgb(255, 201, 178);
519
+ display: block;
520
+ }
521
+ span.run93 {
522
+ background-color: rgb(255, 198, 178);
523
+ display: block;
524
+ }
525
+ span.run94 {
526
+ background-color: rgb(255, 196, 178);
527
+ display: block;
528
+ }
529
+ span.run95 {
530
+ background-color: rgb(255, 192, 178);
531
+ display: block;
532
+ }
533
+ span.run96 {
534
+ background-color: rgb(255, 189, 178);
535
+ display: block;
536
+ }
537
+ span.run97 {
538
+ background-color: rgb(255, 187, 178);
539
+ display: block;
540
+ }
541
+ span.run98 {
542
+ background-color: rgb(255, 184, 178);
543
+ display: block;
544
+ }
545
+ span.run99 {
546
+ background-color: rgb(255, 182, 178);
547
+ display: block;
548
+ }
549
+ span.run100 {
550
+ background-color: rgb(255, 178, 178);
551
+ display: block;
552
+ }
553
+ </style>
554
+ </head>
555
+ <body><h3>C0 code coverage information</h3>
556
+ <p>Generated on Sat Jun 07 16:45:06 +1000 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
557
+ </p>
558
+ <hr/>
559
+ <pre><span class='marked0'>Code reported as executed by Ruby looks like this...
560
+ </span><span class='marked1'>and this: this line is also marked as covered.
561
+ </span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
562
+ </span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
563
+ </span><span class='uncovered0'>Finally, here&apos;s a line marked as not executed.
564
+ </span></pre>
565
+ <table class='report'><thead><tr><td class='heading'>Name</td>
566
+ <td class='heading'>Total lines</td>
567
+ <td class='heading'>Lines of code</td>
568
+ <td class='heading'>Total coverage</td>
569
+ <td class='heading'>Code coverage</td>
570
+ </tr>
571
+ </thead>
572
+ <tbody><tr class='light'><td><a href='spec-googleauthsub_spec_rb.html'>spec/googleauthsub_spec.rb</a>
573
+ </td>
574
+ <td class='lines_total'><tt>340</tt>
575
+ </td>
576
+ <td class='lines_code'><tt>248</tt>
577
+ </td>
578
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>9.1%</tt>
579
+ &nbsp;</td>
580
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='9'/>
581
+ <td class='uncovered' width='91'/>
582
+ </tr>
583
+ </table>
584
+ </td>
585
+ </tr>
586
+ </table>
587
+ </td>
588
+ <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>2.4%</tt>
589
+ &nbsp;</td>
590
+ <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='2'/>
591
+ <td class='uncovered' width='98'/>
592
+ </tr>
593
+ </table>
594
+ </td>
595
+ </tr>
596
+ </table>
597
+ </td>
598
+ </tr>
599
+ </tbody>
600
+ </table>
601
+ <pre><span class="inferred0"><a name="line1"></a> 1 # GoogleAuthSub - Ruby on Rails plugin for Google Authorization
602
+ </span><span class="inferred1"><a name="line2"></a> 2 # # Copyright 2008 Stuart Coyle &lt;stuart.coyle@gmail.com&gt;
603
+ </span><span class="inferred0"><a name="line3"></a> 3 #
604
+ </span><span class="inferred1"><a name="line4"></a> 4 # Permission is hereby granted, free of charge, to any person obtaining
605
+ </span><span class="inferred0"><a name="line5"></a> 5 # a copy of this software and associated documentation files (the
606
+ </span><span class="inferred1"><a name="line6"></a> 6 # &quot;Software&quot;), to deal in the Software without restriction, including
607
+ </span><span class="inferred0"><a name="line7"></a> 7 # without limitation the rights to use, copy, modify, merge, publish,
608
+ </span><span class="inferred1"><a name="line8"></a> 8 # distribute, sublicense, and/or sell copies of the Software, and to
609
+ </span><span class="inferred0"><a name="line9"></a> 9 # permit persons to whom the Software is furnished to do so, subject to
610
+ </span><span class="inferred1"><a name="line10"></a> 10 # the following conditions:
611
+ </span><span class="inferred0"><a name="line11"></a> 11 #
612
+ </span><span class="inferred1"><a name="line12"></a> 12 # The above copyright notice and this permission notice shall be
613
+ </span><span class="inferred0"><a name="line13"></a> 13 # included in all copies or substantial portions of the Software.
614
+ </span><span class="inferred1"><a name="line14"></a> 14 #
615
+ </span><span class="inferred0"><a name="line15"></a> 15 # THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
616
+ </span><span class="inferred1"><a name="line16"></a> 16 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
617
+ </span><span class="inferred0"><a name="line17"></a> 17 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
618
+ </span><span class="inferred1"><a name="line18"></a> 18 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
619
+ </span><span class="inferred0"><a name="line19"></a> 19 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
620
+ </span><span class="inferred1"><a name="line20"></a> 20 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
621
+ </span><span class="inferred0"><a name="line21"></a> 21 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
622
+ </span><span class="inferred1"><a name="line22"></a> 22
623
+ </span><span class="inferred0"><a name="line23"></a> 23
624
+ </span><span class="marked1"><a name="line24"></a> 24 require File.dirname(__FILE__) + '/spec_helper'
625
+ </span><span class="marked0"><a name="line25"></a> 25 require 'fake_web'
626
+ </span><span class="marked1"><a name="line26"></a> 26 require 'net/http'
627
+ </span><span class="marked0"><a name="line27"></a> 27 require 'openssl'
628
+ </span><span class="inferred1"><a name="line28"></a> 28
629
+ </span><span class="marked0"><a name="line29"></a> 29 include GData
630
+ </span><span class="inferred1"><a name="line30"></a> 30
631
+ </span><span class="marked0"><a name="line31"></a> 31 describe GoogleAuthSub do
632
+ </span><span class="uncovered1"><a name="line32"></a> 32
633
+ </span><span class="uncovered0"><a name="line33"></a> 33 before do
634
+ </span><span class="uncovered1"><a name="line34"></a> 34
635
+ </span><span class="uncovered0"><a name="line35"></a> 35 @test_next_url = &quot;http://www.example.com/next&quot;
636
+ </span><span class="uncovered1"><a name="line36"></a> 36 @test_scope_url = &quot;http://www.google.com/calendar/feeds&quot;
637
+ </span><span class="uncovered0"><a name="line37"></a> 37
638
+ </span><span class="uncovered1"><a name="line38"></a> 38 # Valid test token
639
+ </span><span class="uncovered0"><a name="line39"></a> 39 @token = TOKEN
640
+ </span><span class="uncovered1"><a name="line40"></a> 40
641
+ </span><span class="uncovered0"><a name="line41"></a> 41 # Invalid test token
642
+ </span><span class="uncovered1"><a name="line42"></a> 42 @invalid_token = INVALID_TOKEN
643
+ </span><span class="uncovered0"><a name="line43"></a> 43 @session_token = SESSION_TOKEN
644
+ </span><span class="uncovered1"><a name="line44"></a> 44
645
+ </span><span class="uncovered0"><a name="line45"></a> 45 # Various URLs we expect to call
646
+ </span><span class="uncovered1"><a name="line46"></a> 46 @valid_request_url = AUTHSUB_REQUEST_URL + &quot;?next=http://www.example.com/next&amp;scope=http://www.google.com/calendar/feeds&amp;session=0&amp;secure=0&quot;
647
+ </span><span class="uncovered0"><a name="line47"></a> 47 @valid_session_request_url = AUTHSUB_REQUEST_URL + &quot;?next=http://www.example.com/next&amp;scope=http://www.google.com/calendar/feeds&amp;session=1&amp;secure=0&quot;
648
+ </span><span class="uncovered1"><a name="line48"></a> 48 @valid_secure_session_url = AUTHSUB_REQUEST_URL + &quot;?next=http://www.example.com/next&amp;scope=http://www.google.com/calendar/feeds&amp;session=1&amp;secure=1&quot;
649
+ </span><span class="uncovered0"><a name="line49"></a> 49 @session_token_request_url = AUTHSUB_SESSION_TOKEN_URL
650
+ </span><span class="uncovered1"><a name="line50"></a> 50 @token_revoke_url = AUTHSUB_REVOKE_TOKEN_URL
651
+ </span><span class="uncovered0"><a name="line51"></a> 51 @token_info_url = AUTHSUB_TOKEN_INFO_URL
652
+ </span><span class="uncovered1"><a name="line52"></a> 52 @data_request_url = @test_scope_url + &quot;/default/private/full&quot;
653
+ </span><span class="uncovered0"><a name="line53"></a> 53
654
+ </span><span class="uncovered1"><a name="line54"></a> 54 @authsub = GoogleAuthSub.new({:next_url =&gt; @test_next_url, :scope_url =&gt; @test_scope_url})
655
+ </span><span class="uncovered0"><a name="line55"></a> 55 end
656
+ </span><span class="uncovered1"><a name="line56"></a> 56
657
+ </span><span class="uncovered0"><a name="line57"></a> 57 describe &quot;Methods GoogleAuthsubToken should have&quot; do
658
+ </span><span class="uncovered1"><a name="line58"></a> 58
659
+ </span><span class="uncovered0"><a name="line59"></a> 59 it &quot;should have a request_url method&quot; do
660
+ </span><span class="uncovered1"><a name="line60"></a> 60 @authsub.should respond_to(:request_url)
661
+ </span><span class="uncovered0"><a name="line61"></a> 61 end
662
+ </span><span class="uncovered1"><a name="line62"></a> 62
663
+ </span><span class="uncovered0"><a name="line63"></a> 63 it &quot;should have a get_session_token method&quot; do
664
+ </span><span class="uncovered1"><a name="line64"></a> 64 @authsub.should respond_to(:session_token)
665
+ </span><span class="uncovered0"><a name="line65"></a> 65 end
666
+ </span><span class="uncovered1"><a name="line66"></a> 66
667
+ </span><span class="uncovered0"><a name="line67"></a> 67 it &quot;should have an revoke_token method&quot; do
668
+ </span><span class="uncovered1"><a name="line68"></a> 68 @authsub.should respond_to(:revoke_token)
669
+ </span><span class="uncovered0"><a name="line69"></a> 69 end
670
+ </span><span class="uncovered1"><a name="line70"></a> 70
671
+ </span><span class="uncovered0"><a name="line71"></a> 71 it &quot;should have a token_info method&quot; do
672
+ </span><span class="uncovered1"><a name="line72"></a> 72 @authsub.should respond_to(:token_info)
673
+ </span><span class="uncovered0"><a name="line73"></a> 73 end
674
+ </span><span class="uncovered1"><a name="line74"></a> 74
675
+ </span><span class="uncovered0"><a name="line75"></a> 75 it &quot;should have a get method&quot; do
676
+ </span><span class="uncovered1"><a name="line76"></a> 76 @authsub.should respond_to(:get)
677
+ </span><span class="uncovered0"><a name="line77"></a> 77 end
678
+ </span><span class="uncovered1"><a name="line78"></a> 78
679
+ </span><span class="uncovered0"><a name="line79"></a> 79 it &quot;should have a post method&quot; do
680
+ </span><span class="uncovered1"><a name="line80"></a> 80 @authsub.should respond_to(:post)
681
+ </span><span class="uncovered0"><a name="line81"></a> 81 end
682
+ </span><span class="uncovered1"><a name="line82"></a> 82
683
+ </span><span class="uncovered0"><a name="line83"></a> 83 it &quot;should have a put method&quot; do
684
+ </span><span class="uncovered1"><a name="line84"></a> 84 @authsub.should respond_to(:put)
685
+ </span><span class="uncovered0"><a name="line85"></a> 85 end
686
+ </span><span class="uncovered1"><a name="line86"></a> 86
687
+ </span><span class="uncovered0"><a name="line87"></a> 87 it &quot;should have a delete method&quot; do
688
+ </span><span class="uncovered1"><a name="line88"></a> 88 @authsub.should respond_to(:delete)
689
+ </span><span class="uncovered0"><a name="line89"></a> 89 end
690
+ </span><span class="uncovered1"><a name="line90"></a> 90 end
691
+ </span><span class="uncovered0"><a name="line91"></a> 91
692
+ </span><span class="uncovered1"><a name="line92"></a> 92 describe &quot;Request method - getting a single use token from Google&quot; do
693
+ </span><span class="uncovered0"><a name="line93"></a> 93
694
+ </span><span class="uncovered1"><a name="line94"></a> 94 it &quot;should redirect to request url&quot; do
695
+ </span><span class="uncovered0"><a name="line95"></a> 95 @authsub.request_url.to_s.should == @valid_request_url
696
+ </span><span class="uncovered1"><a name="line96"></a> 96 end
697
+ </span><span class="uncovered0"><a name="line97"></a> 97
698
+ </span><span class="uncovered1"><a name="line98"></a> 98 it &quot;should redirect to request url with session = true&quot; do
699
+ </span><span class="uncovered0"><a name="line99"></a> 99 @authsub.session = true
700
+ </span><span class="uncovered1"><a name="line100"></a>100 @authsub.request_url.to_s.should == @valid_session_request_url
701
+ </span><span class="uncovered0"><a name="line101"></a>101 end
702
+ </span><span class="uncovered1"><a name="line102"></a>102
703
+ </span><span class="uncovered0"><a name="line103"></a>103 it &quot;should redirect to request url with secure = true&quot; do
704
+ </span><span class="uncovered1"><a name="line104"></a>104 @authsub.session = true
705
+ </span><span class="uncovered0"><a name="line105"></a>105 @authsub.secure = true
706
+ </span><span class="uncovered1"><a name="line106"></a>106 @authsub.request_url.to_s.should == @valid_secure_session_url
707
+ </span><span class="uncovered0"><a name="line107"></a>107 end
708
+ </span><span class="uncovered1"><a name="line108"></a>108
709
+ </span><span class="uncovered0"><a name="line109"></a>109 it 'should raise an error if the scope URL is not a full path' do
710
+ </span><span class="uncovered1"><a name="line110"></a>110 @authsub.scope = &quot;www.google.com/calendar/feeds&quot;
711
+ </span><span class="uncovered0"><a name="line111"></a>111 lambda { @authsub.request_url }.should raise_error(AuthSubError)
712
+ </span><span class="uncovered1"><a name="line112"></a>112 end
713
+ </span><span class="uncovered0"><a name="line113"></a>113
714
+ </span><span class="uncovered1"><a name="line114"></a>114 it &quot;should raise an error if the next_url is not a full path&quot; do
715
+ </span><span class="uncovered0"><a name="line115"></a>115 @authsub.next_url = &quot;www.schedy.com&quot;
716
+ </span><span class="uncovered1"><a name="line116"></a>116 lambda { @authsub.request_url }.should raise_error(AuthSubError)
717
+ </span><span class="uncovered0"><a name="line117"></a>117 end
718
+ </span><span class="uncovered1"><a name="line118"></a>118 end
719
+ </span><span class="uncovered0"><a name="line119"></a>119
720
+ </span><span class="uncovered1"><a name="line120"></a>120 describe &quot;Token Signatures&quot; do
721
+ </span><span class="uncovered0"><a name="line121"></a>121 before(:all) do
722
+ </span><span class="uncovered1"><a name="line122"></a>122 # Private key for signing
723
+ </span><span class="uncovered0"><a name="line123"></a>123 f = File.open(File.dirname(__FILE__)+&quot;/mock_certs/test_private_key.pem&quot;)
724
+ </span><span class="uncovered1"><a name="line124"></a>124 @private_key = OpenSSL::PKey::RSA.new(f.read)
725
+ </span><span class="uncovered0"><a name="line125"></a>125 @public_key = @private_key.public_key
726
+ </span><span class="uncovered1"><a name="line126"></a>126 GoogleAuthSub.set_private_key(@private_key)
727
+ </span><span class="uncovered0"><a name="line127"></a>127 end
728
+ </span><span class="uncovered1"><a name="line128"></a>128
729
+ </span><span class="uncovered0"><a name="line129"></a>129 before do
730
+ </span><span class="uncovered1"><a name="line130"></a>130 Time.stub!(:now).and_return(Time.local(2008,&quot;mar&quot;,8,12,15,1)) # == 1204942501
731
+ </span><span class="uncovered0"><a name="line131"></a>131 OpenSSL::BN.stub!(:rand_range).and_return(100000000000000)
732
+ </span><span class="uncovered1"><a name="line132"></a>132 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/calendar.txt&quot;)
733
+ </span><span class="uncovered0"><a name="line133"></a>133 @authsub.secure = true
734
+ </span><span class="uncovered1"><a name="line134"></a>134 @authsub.token = @token
735
+ </span><span class="uncovered0"><a name="line135"></a>135 end
736
+ </span><span class="uncovered1"><a name="line136"></a>136
737
+ </span><span class="uncovered0"><a name="line137"></a>137 it &quot;should have a signing algorithm&quot; do
738
+ </span><span class="uncovered1"><a name="line138"></a>138 @authsub.should respond_to(:sigalg)
739
+ </span><span class="uncovered0"><a name="line139"></a>139 end
740
+ </span><span class="uncovered1"><a name="line140"></a>140
741
+ </span><span class="uncovered0"><a name="line141"></a>141 it &quot;should have rsa-sha1 as the sigalg&quot; do
742
+ </span><span class="uncovered1"><a name="line142"></a>142 @authsub.sigalg.should == 'rsa-sha1'
743
+ </span><span class="uncovered0"><a name="line143"></a>143 end
744
+ </span><span class="uncovered1"><a name="line144"></a>144
745
+ </span><span class="uncovered0"><a name="line145"></a>145 it &quot;should generate a correct authorization header when not secure&quot; do
746
+ </span><span class="uncovered1"><a name="line146"></a>146 @authsub.secure = false
747
+ </span><span class="uncovered0"><a name="line147"></a>147 @authsub.auth_header(Net::HTTP::Get.new(@data_request_url), @data_request_url).should == &quot;AuthSub token=\&quot;#{@token}\&quot;&quot;
748
+ </span><span class="uncovered1"><a name="line148"></a>148 end
749
+ </span><span class="uncovered0"><a name="line149"></a>149
750
+ </span><span class="uncovered1"><a name="line150"></a>150 it &quot;should generate a correct authorization header when secure&quot; do
751
+ </span><span class="uncovered0"><a name="line151"></a>151 @authsub.auth_header(Net::HTTP::Get.new(@data_request_url), @data_request_url).should ==
752
+ </span><span class="uncovered1"><a name="line152"></a>152 &quot;AuthSub token=\&quot;CMScoaHmDxC80Y2pAg\&quot; data=\&quot;GET http://www.google.com/calendar/feeds/default/private/full 1204942501 100000000000000\&quot; sig=\&quot;5H44KRwb+B9dMraK0mxsVv3aSF+gCz1hz7FEMViYdl89rC/BXQkmW7Xb9/Xf\n226E5Q+RPtFd+DaK/mXFxtoOJBqlz7mZgV+QOrr/dxCM6HpjIpxF9Qxo9zCT\nKvz0IS4gxXCVMgEgJOdF3YjqZo2bMgiG/Wjm/774Yitkc2tKhL8=\n\&quot; sigalg=\&quot;rsa-sha1\&quot;&quot;
753
+ </span><span class="uncovered0"><a name="line153"></a>153 end
754
+ </span><span class="uncovered1"><a name="line154"></a>154
755
+ </span><span class="uncovered0"><a name="line155"></a>155
756
+ </span><span class="uncovered1"><a name="line156"></a>156 it &quot;should take private key as a file&quot; do
757
+ </span><span class="uncovered0"><a name="line157"></a>157 f = File.open(File.dirname(__FILE__)+&quot;/mock_certs/test_private_key.pem&quot;)
758
+ </span><span class="uncovered1"><a name="line158"></a>158 GoogleAuthSub.set_private_key(f)
759
+ </span><span class="uncovered0"><a name="line159"></a>159 end
760
+ </span><span class="uncovered1"><a name="line160"></a>160
761
+ </span><span class="uncovered0"><a name="line161"></a>161 it &quot;should take private key as a string&quot; do
762
+ </span><span class="uncovered1"><a name="line162"></a>162 s = File.open(File.dirname(__FILE__)+&quot;/mock_certs/test_private_key.pem&quot;).read
763
+ </span><span class="uncovered0"><a name="line163"></a>163 GoogleAuthSub.set_private_key(s)
764
+ </span><span class="uncovered1"><a name="line164"></a>164 end
765
+ </span><span class="uncovered0"><a name="line165"></a>165
766
+ </span><span class="uncovered1"><a name="line166"></a>166 end
767
+ </span><span class="uncovered0"><a name="line167"></a>167
768
+ </span><span class="uncovered1"><a name="line168"></a>168 describe &quot;Token received from Google in response url. Note: in Rails this is simply params[:token]&quot; do
769
+ </span><span class="uncovered0"><a name="line169"></a>169 before do
770
+ </span><span class="uncovered1"><a name="line170"></a>170 url = URI::HTTP.build({:host =&gt; &quot;www.example.com&quot;, :path =&gt; &quot;/next&quot;, :query =&gt; &quot;token=#{@token}&quot;})
771
+ </span><span class="uncovered0"><a name="line171"></a>171 @authsub.receive_token(url)
772
+ </span><span class="uncovered1"><a name="line172"></a>172 end
773
+ </span><span class="uncovered0"><a name="line173"></a>173
774
+ </span><span class="uncovered1"><a name="line174"></a>174 it &quot;should find the token in the headers and save it&quot; do
775
+ </span><span class="uncovered0"><a name="line175"></a>175 @authsub.token.should == @token
776
+ </span><span class="uncovered1"><a name="line176"></a>176 end
777
+ </span><span class="uncovered0"><a name="line177"></a>177
778
+ </span><span class="uncovered1"><a name="line178"></a>178 it &quot;should retain current token value if no token is found&quot; do
779
+ </span><span class="uncovered0"><a name="line179"></a>179 url = URI::HTTP.build({:host =&gt; &quot;www.example.com&quot;, :path =&gt; &quot;/next&quot;, :query =&gt; &quot;&quot;})
780
+ </span><span class="uncovered1"><a name="line180"></a>180 @authsub.receive_token(url)
781
+ </span><span class="uncovered0"><a name="line181"></a>181 @authsub.token.should == @token
782
+ </span><span class="uncovered1"><a name="line182"></a>182 end
783
+ </span><span class="uncovered0"><a name="line183"></a>183
784
+ </span><span class="uncovered1"><a name="line184"></a>184 end
785
+ </span><span class="uncovered0"><a name="line185"></a>185
786
+ </span><span class="uncovered1"><a name="line186"></a>186 describe &quot;Getting a session token from google&quot; do
787
+ </span><span class="uncovered0"><a name="line187"></a>187 before do
788
+ </span><span class="uncovered1"><a name="line188"></a>188 FakeWeb.register_uri(@session_token_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/session_token.txt&quot;)
789
+ </span><span class="uncovered0"><a name="line189"></a>189 end
790
+ </span><span class="uncovered1"><a name="line190"></a>190
791
+ </span><span class="uncovered0"><a name="line191"></a>191 it &quot;should make request to correct url&quot; do
792
+ </span><span class="uncovered1"><a name="line192"></a>192 FakeWeb.should_receive(:response_for).with(@session_token_request_url).
793
+ </span><span class="uncovered0"><a name="line193"></a>193 and_return(FakeWeb::Registry.instance.response_for(@session_token_request_url))
794
+ </span><span class="uncovered1"><a name="line194"></a>194 @authsub.session_token
795
+ </span><span class="uncovered0"><a name="line195"></a>195 end
796
+ </span><span class="uncovered1"><a name="line196"></a>196
797
+ </span><span class="uncovered0"><a name="line197"></a>197 end
798
+ </span><span class="uncovered1"><a name="line198"></a>198
799
+ </span><span class="uncovered0"><a name="line199"></a>199 describe &quot;Succesful receipt of a session token&quot; do
800
+ </span><span class="uncovered1"><a name="line200"></a>200 before do
801
+ </span><span class="uncovered0"><a name="line201"></a>201 FakeWeb.register_uri(@session_token_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/session_token.txt&quot;)
802
+ </span><span class="uncovered1"><a name="line202"></a>202 end
803
+ </span><span class="uncovered0"><a name="line203"></a>203
804
+ </span><span class="uncovered1"><a name="line204"></a>204 it &quot;should set session_token in session to correct value&quot; do
805
+ </span><span class="uncovered0"><a name="line205"></a>205 @authsub.session_token
806
+ </span><span class="uncovered1"><a name="line206"></a>206 @authsub.token.should == @session_token
807
+ </span><span class="uncovered0"><a name="line207"></a>207 end
808
+ </span><span class="uncovered1"><a name="line208"></a>208 end
809
+ </span><span class="uncovered0"><a name="line209"></a>209
810
+ </span><span class="uncovered1"><a name="line210"></a>210 describe &quot;Unsuccessful request for session token - revoked token&quot; do
811
+ </span><span class="uncovered0"><a name="line211"></a>211 it &quot;should raise a server exception error&quot; do
812
+ </span><span class="uncovered1"><a name="line212"></a>212 FakeWeb.register_uri(@session_token_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/revoked_token.txt&quot;)
813
+ </span><span class="uncovered0"><a name="line213"></a>213 lambda {
814
+ </span><span class="uncovered1"><a name="line214"></a>214 @authsub.session_token
815
+ </span><span class="uncovered0"><a name="line215"></a>215 }.should raise_error(AuthSubError)
816
+ </span><span class="uncovered1"><a name="line216"></a>216 end
817
+ </span><span class="uncovered0"><a name="line217"></a>217 end
818
+ </span><span class="uncovered1"><a name="line218"></a>218
819
+ </span><span class="uncovered0"><a name="line219"></a>219 describe &quot;Revoking a session token&quot; do
820
+ </span><span class="uncovered1"><a name="line220"></a>220 before do
821
+ </span><span class="uncovered0"><a name="line221"></a>221 FakeWeb.register_uri(@token_revoke_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/revoke_token.txt&quot;)
822
+ </span><span class="uncovered1"><a name="line222"></a>222 @authsub.token = @token
823
+ </span><span class="uncovered0"><a name="line223"></a>223 end
824
+ </span><span class="uncovered1"><a name="line224"></a>224
825
+ </span><span class="uncovered0"><a name="line225"></a>225 it &quot;should make request to correct url&quot; do
826
+ </span><span class="uncovered1"><a name="line226"></a>226 FakeWeb.should_receive(:response_for).with(@token_revoke_url).
827
+ </span><span class="uncovered0"><a name="line227"></a>227 and_return(FakeWeb::Registry.instance.response_for(@token_revoke_url))
828
+ </span><span class="uncovered1"><a name="line228"></a>228 @authsub.revoke_token
829
+ </span><span class="uncovered0"><a name="line229"></a>229 end
830
+ </span><span class="uncovered1"><a name="line230"></a>230
831
+ </span><span class="uncovered0"><a name="line231"></a>231 it &quot;should return true&quot; do
832
+ </span><span class="uncovered1"><a name="line232"></a>232 @authsub.revoke_token.should be_true
833
+ </span><span class="uncovered0"><a name="line233"></a>233 end
834
+ </span><span class="uncovered1"><a name="line234"></a>234
835
+ </span><span class="uncovered0"><a name="line235"></a>235 it &quot;should return false on an error&quot; do
836
+ </span><span class="uncovered1"><a name="line236"></a>236 FakeWeb.register_uri(@token_revoke_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/unauthorized.txt&quot;)
837
+ </span><span class="uncovered0"><a name="line237"></a>237 @authsub.revoke_token.should be_false
838
+ </span><span class="uncovered1"><a name="line238"></a>238 end
839
+ </span><span class="uncovered0"><a name="line239"></a>239 end
840
+ </span><span class="uncovered1"><a name="line240"></a>240
841
+ </span><span class="uncovered0"><a name="line241"></a>241 describe &quot;Getting token info from google&quot; do
842
+ </span><span class="uncovered1"><a name="line242"></a>242 before do
843
+ </span><span class="uncovered0"><a name="line243"></a>243 FakeWeb.register_uri(@token_info_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/token_info.txt&quot;)
844
+ </span><span class="uncovered1"><a name="line244"></a>244 @authsub.token = @token
845
+ </span><span class="uncovered0"><a name="line245"></a>245 end
846
+ </span><span class="uncovered1"><a name="line246"></a>246
847
+ </span><span class="uncovered0"><a name="line247"></a>247 it &quot;should make request to correct url&quot; do
848
+ </span><span class="uncovered1"><a name="line248"></a>248 FakeWeb.should_receive(:response_for).with(@token_info_url).
849
+ </span><span class="uncovered0"><a name="line249"></a>249 and_return(FakeWeb::Registry.instance.response_for(@token_info_url))
850
+ </span><span class="uncovered1"><a name="line250"></a>250 @authsub.token_info
851
+ </span><span class="uncovered0"><a name="line251"></a>251 end
852
+ </span><span class="uncovered1"><a name="line252"></a>252
853
+ </span><span class="uncovered0"><a name="line253"></a>253 it &quot;should return the info as [:target =&gt; target, :scope=&gt; scope, :secure=&gt; secure]&quot; do
854
+ </span><span class="uncovered1"><a name="line254"></a>254 @authsub.token_info.should == {:target=&gt;'http://www.example.com',
855
+ </span><span class="uncovered0"><a name="line255"></a>255 :scope=&gt;'http://www.google.com/calendar/feeds/',
856
+ </span><span class="uncovered1"><a name="line256"></a>256 :secure=&gt;true}
857
+ </span><span class="uncovered0"><a name="line257"></a>257 end
858
+ </span><span class="uncovered1"><a name="line258"></a>258
859
+ </span><span class="uncovered0"><a name="line259"></a>259 it &quot;should throw an error on an incorrect response from Google&quot; do
860
+ </span><span class="uncovered1"><a name="line260"></a>260 FakeWeb.register_uri(@token_info_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/bad_token_info.txt&quot;)
861
+ </span><span class="uncovered0"><a name="line261"></a>261 lambda{
862
+ </span><span class="uncovered1"><a name="line262"></a>262 @authsub.token_info
863
+ </span><span class="uncovered0"><a name="line263"></a>263 }.should raise_error(AuthSubError)
864
+ </span><span class="uncovered1"><a name="line264"></a>264 end
865
+ </span><span class="uncovered0"><a name="line265"></a>265 end
866
+ </span><span class="uncovered1"><a name="line266"></a>266
867
+ </span><span class="uncovered0"><a name="line267"></a>267
868
+ </span><span class="uncovered1"><a name="line268"></a>268 describe &quot;GET data from google using the token&quot; do
869
+ </span><span class="uncovered0"><a name="line269"></a>269 before do
870
+ </span><span class="uncovered1"><a name="line270"></a>270 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/calendar.txt&quot;)
871
+ </span><span class="uncovered0"><a name="line271"></a>271 end
872
+ </span><span class="uncovered1"><a name="line272"></a>272
873
+ </span><span class="uncovered0"><a name="line273"></a>273 it &quot;should append the scope to the url when it does not start with http://&quot; do
874
+ </span><span class="uncovered1"><a name="line274"></a>274 FakeWeb.should_receive(:response_for).with(@data_request_url).
875
+ </span><span class="uncovered0"><a name="line275"></a>275 and_return(FakeWeb::Registry.instance.response_for(@data_request_url))
876
+ </span><span class="uncovered1"><a name="line276"></a>276 @authsub.get(&quot;/default/private/full&quot;)
877
+ </span><span class="uncovered0"><a name="line277"></a>277 end
878
+ </span><span class="uncovered1"><a name="line278"></a>278
879
+ </span><span class="uncovered0"><a name="line279"></a>279 it &quot;should raise errors if there is an error in the response&quot; do
880
+ </span><span class="uncovered1"><a name="line280"></a>280 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/unauthorized.txt&quot;)
881
+ </span><span class="uncovered0"><a name="line281"></a>281 lambda{@authsub.get(@data_request_url)}.should raise_error(Net::HTTPServerException)
882
+ </span><span class="uncovered1"><a name="line282"></a>282 end
883
+ </span><span class="uncovered0"><a name="line283"></a>283
884
+ </span><span class="uncovered1"><a name="line284"></a>284 it &quot;should pass the entire response as a Net::HTTPResponse object&quot; do
885
+ </span><span class="uncovered0"><a name="line285"></a>285 @authsub.get(@data_request_url).should be_a_kind_of(Net::HTTPResponse)
886
+ </span><span class="uncovered1"><a name="line286"></a>286 end
887
+ </span><span class="uncovered0"><a name="line287"></a>287
888
+ </span><span class="uncovered1"><a name="line288"></a>288 it &quot;should have the correct body&quot; do
889
+ </span><span class="uncovered0"><a name="line289"></a>289 @authsub.get(@data_request_url).body.should == &quot;This is my wonderful calendar!\nEmpty as usual.\nHire me!!&quot;
890
+ </span><span class="uncovered1"><a name="line290"></a>290 end
891
+ </span><span class="uncovered0"><a name="line291"></a>291 end
892
+ </span><span class="uncovered1"><a name="line292"></a>292
893
+ </span><span class="uncovered0"><a name="line293"></a>293 describe &quot;POST Data to Google using the token&quot; do
894
+ </span><span class="uncovered1"><a name="line294"></a>294 before do
895
+ </span><span class="uncovered0"><a name="line295"></a>295 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/calendar.txt&quot;)
896
+ </span><span class="uncovered1"><a name="line296"></a>296 end
897
+ </span><span class="uncovered0"><a name="line297"></a>297
898
+ </span><span class="uncovered1"><a name="line298"></a>298 it &quot;should append the scope to the url when it does not start with http://&quot; do
899
+ </span><span class="uncovered0"><a name="line299"></a>299 FakeWeb.should_receive(:response_for).with(@data_request_url).
900
+ </span><span class="uncovered1"><a name="line300"></a>300 and_return(FakeWeb::Registry.instance.response_for(@data_request_url))
901
+ </span><span class="uncovered0"><a name="line301"></a>301 @authsub.post(&quot;/default/private/full&quot;)
902
+ </span><span class="uncovered1"><a name="line302"></a>302 end
903
+ </span><span class="uncovered0"><a name="line303"></a>303
904
+ </span><span class="uncovered1"><a name="line304"></a>304 it &quot;should raise errors if there is an error in the response&quot; do
905
+ </span><span class="uncovered0"><a name="line305"></a>305 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/unauthorized.txt&quot;)
906
+ </span><span class="uncovered1"><a name="line306"></a>306 lambda{@authsub.post(@data_request_url)}.should raise_error(Net::HTTPServerException)
907
+ </span><span class="uncovered0"><a name="line307"></a>307 end
908
+ </span><span class="uncovered1"><a name="line308"></a>308
909
+ </span><span class="uncovered0"><a name="line309"></a>309 it &quot;should pass the entire response as a Net::HTTPResponse object&quot; do
910
+ </span><span class="uncovered1"><a name="line310"></a>310 @authsub.post(@data_request_url).should be_a_kind_of(Net::HTTPResponse)
911
+ </span><span class="uncovered0"><a name="line311"></a>311 end
912
+ </span><span class="uncovered1"><a name="line312"></a>312
913
+ </span><span class="uncovered0"><a name="line313"></a>313 it &quot;should have the correct body&quot; do
914
+ </span><span class="uncovered1"><a name="line314"></a>314 @authsub.post(@data_request_url).body.should == &quot;This is my wonderful calendar!\nEmpty as usual.\nHire me!!&quot;
915
+ </span><span class="uncovered0"><a name="line315"></a>315 end
916
+ </span><span class="uncovered1"><a name="line316"></a>316 end
917
+ </span><span class="uncovered0"><a name="line317"></a>317
918
+ </span><span class="uncovered1"><a name="line318"></a>318 describe &quot;PUT to Google using the token&quot; do
919
+ </span><span class="uncovered0"><a name="line319"></a>319 before do
920
+ </span><span class="uncovered1"><a name="line320"></a>320 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/calendar.txt&quot;)
921
+ </span><span class="uncovered0"><a name="line321"></a>321 end
922
+ </span><span class="uncovered1"><a name="line322"></a>322
923
+ </span><span class="uncovered0"><a name="line323"></a>323 it &quot;should recieve a PUT&quot; do
924
+ </span><span class="uncovered1"><a name="line324"></a>324 FakeWeb.should_receive(:response_for).with(@data_request_url).
925
+ </span><span class="uncovered0"><a name="line325"></a>325 and_return(FakeWeb::Registry.instance.response_for(@data_request_url))
926
+ </span><span class="uncovered1"><a name="line326"></a>326 @authsub.put(@data_request_url)
927
+ </span><span class="uncovered0"><a name="line327"></a>327 end
928
+ </span><span class="uncovered1"><a name="line328"></a>328 end
929
+ </span><span class="uncovered0"><a name="line329"></a>329
930
+ </span><span class="uncovered1"><a name="line330"></a>330 describe &quot;DELETE request to Google using the token&quot; do
931
+ </span><span class="uncovered0"><a name="line331"></a>331 before do
932
+ </span><span class="uncovered1"><a name="line332"></a>332 FakeWeb.register_uri(@data_request_url, :response =&gt; File.dirname(__FILE__)+&quot;/mock responses/calendar.txt&quot;)
933
+ </span><span class="uncovered0"><a name="line333"></a>333 end
934
+ </span><span class="uncovered1"><a name="line334"></a>334 it &quot;should recieve a DELETE&quot; do
935
+ </span><span class="uncovered0"><a name="line335"></a>335 FakeWeb.should_receive(:response_for).with(@data_request_url).
936
+ </span><span class="uncovered1"><a name="line336"></a>336 and_return(FakeWeb::Registry.instance.response_for(@data_request_url))
937
+ </span><span class="uncovered0"><a name="line337"></a>337 @authsub.delete(@data_request_url)
938
+ </span><span class="uncovered1"><a name="line338"></a>338 end
939
+ </span><span class="uncovered0"><a name="line339"></a>339 end
940
+ </span><span class="uncovered1"><a name="line340"></a>340 end
941
+ </span></pre><hr/>
942
+ <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
943
+ version 0.8.1.2.</p>
944
+ <p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88'/>
945
+ </a>
946
+ <a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
947
+ </a>
948
+ </p>
949
+ </body>
950
+ </html>