aeden-contacts 0.2.15

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 (49) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +51 -0
  3. data/Rakefile +71 -0
  4. data/VERSION.yml +4 -0
  5. data/lib/config/contacts.yml +10 -0
  6. data/lib/contacts/flickr.rb +133 -0
  7. data/lib/contacts/google.rb +387 -0
  8. data/lib/contacts/google_oauth.rb +91 -0
  9. data/lib/contacts/version.rb +9 -0
  10. data/lib/contacts/windows_live.rb +164 -0
  11. data/lib/contacts/yahoo.rb +236 -0
  12. data/lib/contacts.rb +55 -0
  13. data/spec/contact_spec.rb +61 -0
  14. data/spec/feeds/contacts.yml +10 -0
  15. data/spec/feeds/flickr/auth.getFrob.xml +4 -0
  16. data/spec/feeds/flickr/auth.getToken.xml +5 -0
  17. data/spec/feeds/google-many.xml +48 -0
  18. data/spec/feeds/google-single.xml +46 -0
  19. data/spec/feeds/wl_contacts.xml +29 -0
  20. data/spec/feeds/yh_contacts.txt +119 -0
  21. data/spec/feeds/yh_credential.xml +28 -0
  22. data/spec/flickr/auth_spec.rb +80 -0
  23. data/spec/gmail/auth_spec.rb +70 -0
  24. data/spec/gmail/fetching_spec.rb +198 -0
  25. data/spec/rcov.opts +2 -0
  26. data/spec/spec.opts +2 -0
  27. data/spec/spec_helper.rb +84 -0
  28. data/spec/windows_live/windows_live_spec.rb +34 -0
  29. data/spec/yahoo/yahoo_spec.rb +83 -0
  30. data/vendor/fakeweb/CHANGELOG +80 -0
  31. data/vendor/fakeweb/LICENSE.txt +281 -0
  32. data/vendor/fakeweb/README.rdoc +160 -0
  33. data/vendor/fakeweb/Rakefile +57 -0
  34. data/vendor/fakeweb/fakeweb.gemspec +13 -0
  35. data/vendor/fakeweb/lib/fake_web/ext/net_http.rb +58 -0
  36. data/vendor/fakeweb/lib/fake_web/registry.rb +78 -0
  37. data/vendor/fakeweb/lib/fake_web/responder.rb +88 -0
  38. data/vendor/fakeweb/lib/fake_web/response.rb +10 -0
  39. data/vendor/fakeweb/lib/fake_web/socket_delegator.rb +24 -0
  40. data/vendor/fakeweb/lib/fake_web.rb +152 -0
  41. data/vendor/fakeweb/test/fixtures/test_example.txt +1 -0
  42. data/vendor/fakeweb/test/fixtures/test_request +21 -0
  43. data/vendor/fakeweb/test/test_allow_net_connect.rb +41 -0
  44. data/vendor/fakeweb/test/test_fake_web.rb +453 -0
  45. data/vendor/fakeweb/test/test_fake_web_open_uri.rb +62 -0
  46. data/vendor/fakeweb/test/test_helper.rb +52 -0
  47. data/vendor/fakeweb/test/test_query_string.rb +37 -0
  48. data/vendor/windowslivelogin.rb +1151 -0
  49. metadata +108 -0
@@ -0,0 +1,453 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class TestFakeWeb < Test::Unit::TestCase
4
+
5
+ def setup
6
+ FakeWeb.allow_net_connect = true
7
+ FakeWeb.clean_registry
8
+ end
9
+
10
+ def test_register_uri
11
+ FakeWeb.register_uri('http://mock/test_example.txt', :string => "example")
12
+ assert FakeWeb.registered_uri?('http://mock/test_example.txt')
13
+ end
14
+
15
+ def test_register_uri_with_a_single_argument
16
+ assert_nothing_raised do
17
+ FakeWeb.register_uri("http://example.com")
18
+ end
19
+ end
20
+
21
+ def test_register_uri_with_wrong_number_of_arguments
22
+ assert_raises ArgumentError do
23
+ FakeWeb.register_uri(:get, "http://example.com", "/example", :string => "example")
24
+ end
25
+ end
26
+
27
+ def test_registered_uri_with_wrong_number_of_arguments
28
+ assert_raises ArgumentError do
29
+ FakeWeb.registered_uri?
30
+ end
31
+ assert_raises ArgumentError do
32
+ FakeWeb.registered_uri?(:get, "http://example.com", "/example")
33
+ end
34
+ end
35
+
36
+ def test_response_for_with_wrong_number_of_arguments
37
+ assert_raises ArgumentError do
38
+ FakeWeb.response_for
39
+ end
40
+ assert_raises ArgumentError do
41
+ FakeWeb.response_for(:get, "http://example.com", "/example")
42
+ end
43
+ end
44
+
45
+ def test_register_uri_without_domain_name
46
+ assert_raises URI::InvalidURIError do
47
+ FakeWeb.register_uri('test_example2.txt', File.dirname(__FILE__) + '/fixtures/test_example.txt')
48
+ end
49
+ end
50
+
51
+ def test_register_uri_with_port_and_check_with_port
52
+ FakeWeb.register_uri('http://example.com:3000/', :string => 'foo')
53
+ assert FakeWeb.registered_uri?('http://example.com:3000/')
54
+ end
55
+
56
+ def test_register_uri_with_port_and_check_without_port
57
+ FakeWeb.register_uri('http://example.com:3000/', :string => 'foo')
58
+ assert !FakeWeb.registered_uri?('http://example.com/')
59
+ end
60
+
61
+ def test_register_uri_with_default_port_for_http_and_check_without_port
62
+ FakeWeb.register_uri('http://example.com:80/', :string => 'foo')
63
+ assert FakeWeb.registered_uri?('http://example.com/')
64
+ end
65
+
66
+ def test_register_uri_with_default_port_for_https_and_check_without_port
67
+ FakeWeb.register_uri('https://example.com:443/', :string => 'foo')
68
+ assert FakeWeb.registered_uri?('https://example.com/')
69
+ end
70
+
71
+ def test_register_uri_with_no_port_for_http_and_check_with_default_port
72
+ FakeWeb.register_uri('http://example.com/', :string => 'foo')
73
+ assert FakeWeb.registered_uri?('http://example.com:80/')
74
+ end
75
+
76
+ def test_register_uri_with_no_port_for_https_and_check_with_default_port
77
+ FakeWeb.register_uri('https://example.com/', :string => 'foo')
78
+ assert FakeWeb.registered_uri?('https://example.com:443/')
79
+ end
80
+
81
+ def test_register_uri_for_any_method_explicitly
82
+ FakeWeb.register_uri(:any, "http://example.com/rpc_endpoint", :string => "OK")
83
+ assert FakeWeb.registered_uri?(:get, "http://example.com/rpc_endpoint")
84
+ assert FakeWeb.registered_uri?(:post, "http://example.com/rpc_endpoint")
85
+ assert FakeWeb.registered_uri?(:put, "http://example.com/rpc_endpoint")
86
+ assert FakeWeb.registered_uri?(:delete, "http://example.com/rpc_endpoint")
87
+ assert FakeWeb.registered_uri?(:any, "http://example.com/rpc_endpoint")
88
+ assert FakeWeb.registered_uri?("http://example.com/rpc_endpoint")
89
+ end
90
+
91
+ def test_register_uri_for_get_method_only
92
+ FakeWeb.register_uri(:get, "http://example.com/users", :string => "User list")
93
+ assert FakeWeb.registered_uri?(:get, "http://example.com/users")
94
+ assert !FakeWeb.registered_uri?(:post, "http://example.com/users")
95
+ assert !FakeWeb.registered_uri?(:put, "http://example.com/users")
96
+ assert !FakeWeb.registered_uri?(:delete, "http://example.com/users")
97
+ assert !FakeWeb.registered_uri?(:any, "http://example.com/users")
98
+ assert !FakeWeb.registered_uri?("http://example.com/users")
99
+ end
100
+
101
+ def test_response_for_with_registered_uri
102
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
103
+ assert_equal 'test example content', FakeWeb.response_for('http://mock/test_example.txt').body
104
+ end
105
+
106
+ def test_response_for_with_unknown_uri
107
+ assert_equal nil, FakeWeb.response_for(:get, 'http://example.com/')
108
+ end
109
+
110
+ def test_response_for_with_put_method
111
+ FakeWeb.register_uri(:put, "http://example.com", :string => "response")
112
+ assert_equal 'response', FakeWeb.response_for(:put, "http://example.com").body
113
+ end
114
+
115
+ def test_response_for_with_any_method_explicitly
116
+ FakeWeb.register_uri(:any, "http://example.com", :string => "response")
117
+ assert_equal 'response', FakeWeb.response_for(:get, "http://example.com").body
118
+ assert_equal 'response', FakeWeb.response_for(:any, "http://example.com").body
119
+ end
120
+
121
+ def test_content_for_registered_uri_with_port_and_request_with_port
122
+ FakeWeb.register_uri('http://example.com:3000/', :string => 'test example content')
123
+ Net::HTTP.start('example.com', 3000) do |http|
124
+ response = http.get('/')
125
+ assert_equal 'test example content', response.body
126
+ end
127
+ end
128
+
129
+ def test_content_for_registered_uri_with_default_port_for_http_and_request_without_port
130
+ FakeWeb.register_uri('http://example.com:80/', :string => 'test example content')
131
+ Net::HTTP.start('example.com') do |http|
132
+ response = http.get('/')
133
+ assert_equal 'test example content', response.body
134
+ end
135
+ end
136
+
137
+ def test_content_for_registered_uri_with_no_port_for_http_and_request_with_default_port
138
+ FakeWeb.register_uri('http://example.com/', :string => 'test example content')
139
+ Net::HTTP.start('example.com', 80) do |http|
140
+ response = http.get('/')
141
+ assert_equal 'test example content', response.body
142
+ end
143
+ end
144
+
145
+ def test_content_for_registered_uri_with_default_port_for_https_and_request_with_default_port
146
+ FakeWeb.register_uri('https://example.com:443/', :string => 'test example content')
147
+ http = Net::HTTP.new('example.com', 443)
148
+ http.use_ssl = true
149
+ response = http.get('/')
150
+ assert_equal 'test example content', response.body
151
+ end
152
+
153
+ def test_content_for_registered_uri_with_no_port_for_https_and_request_with_default_port
154
+ FakeWeb.register_uri('https://example.com/', :string => 'test example content')
155
+ http = Net::HTTP.new('example.com', 443)
156
+ http.use_ssl = true
157
+ response = http.get('/')
158
+ assert_equal 'test example content', response.body
159
+ end
160
+
161
+ def test_content_for_registered_uris_with_ports_on_same_domain_and_request_without_port
162
+ FakeWeb.register_uri('http://example.com:3000/', :string => 'port 3000')
163
+ FakeWeb.register_uri('http://example.com/', :string => 'port 80')
164
+ Net::HTTP.start('example.com') do |http|
165
+ response = http.get('/')
166
+ assert_equal 'port 80', response.body
167
+ end
168
+ end
169
+
170
+ def test_content_for_registered_uris_with_ports_on_same_domain_and_request_with_port
171
+ FakeWeb.register_uri('http://example.com:3000/', :string => 'port 3000')
172
+ FakeWeb.register_uri('http://example.com/', :string => 'port 80')
173
+ Net::HTTP.start('example.com', 3000) do |http|
174
+ response = http.get('/')
175
+ assert_equal 'port 3000', response.body
176
+ end
177
+ end
178
+
179
+ def test_content_for_registered_uri_with_get_method_only
180
+ FakeWeb.allow_net_connect = false
181
+ FakeWeb.register_uri(:get, "http://example.com/", :string => "test example content")
182
+ Net::HTTP.start('example.com') do |http|
183
+ assert_equal 'test example content', http.get('/').body
184
+ assert_raises(FakeWeb::NetConnectNotAllowedError) { http.post('/', nil) }
185
+ assert_raises(FakeWeb::NetConnectNotAllowedError) { http.put('/', nil) }
186
+ assert_raises(FakeWeb::NetConnectNotAllowedError) { http.delete('/', nil) }
187
+ end
188
+ end
189
+
190
+ def test_content_for_registered_uri_with_any_method_explicitly
191
+ FakeWeb.allow_net_connect = false
192
+ FakeWeb.register_uri(:any, "http://example.com/", :string => "test example content")
193
+ Net::HTTP.start('example.com') do |http|
194
+ assert_equal 'test example content', http.get('/').body
195
+ assert_equal 'test example content', http.post('/', nil).body
196
+ assert_equal 'test example content', http.put('/', nil).body
197
+ assert_equal 'test example content', http.delete('/').body
198
+ end
199
+ end
200
+
201
+ def test_content_for_registered_uri_with_any_method_implicitly
202
+ FakeWeb.allow_net_connect = false
203
+ FakeWeb.register_uri("http://example.com/", :string => "test example content")
204
+ Net::HTTP.start('example.com') do |http|
205
+ assert_equal 'test example content', http.get('/').body
206
+ assert_equal 'test example content', http.post('/', nil).body
207
+ assert_equal 'test example content', http.put('/', nil).body
208
+ assert_equal 'test example content', http.delete('/').body
209
+ end
210
+ end
211
+
212
+ def test_mock_request_with_block
213
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
214
+ Net::HTTP.start('mock') do |http|
215
+ response = http.get('/test_example.txt')
216
+ assert_equal 'test example content', response.body
217
+ end
218
+ end
219
+
220
+ def test_mock_request_with_undocumented_full_uri_argument_style
221
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
222
+ Net::HTTP.start('mock') do |query|
223
+ response = query.get('http://mock/test_example.txt')
224
+ assert_equal 'test example content', response.body
225
+ end
226
+ end
227
+
228
+ def test_mock_request_with_undocumented_full_uri_argument_style_and_query
229
+ FakeWeb.register_uri('http://mock/test_example.txt?a=b', :string => 'test query content')
230
+ Net::HTTP.start('mock') do |query|
231
+ response = query.get('http://mock/test_example.txt?a=b')
232
+ assert_equal 'test query content', response.body
233
+ end
234
+ end
235
+
236
+ def test_mock_post
237
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
238
+ response = nil
239
+ Net::HTTP.start('mock') do |query|
240
+ response = query.post('/test_example.txt', '')
241
+ end
242
+ assert_equal 'test example content', response.body
243
+ end
244
+
245
+ def test_mock_post_with_string_as_registered_uri
246
+ response = nil
247
+ FakeWeb.register_uri('http://mock/test_string.txt', :string => 'foo')
248
+ Net::HTTP.start('mock') do |query|
249
+ response = query.post('/test_string.txt', '')
250
+ end
251
+ assert_equal 'foo', response.body
252
+ end
253
+
254
+ def test_mock_get_with_request_as_registered_uri
255
+ fake_response = Net::HTTPOK.new('1.1', '200', 'OK')
256
+ FakeWeb.register_uri('http://mock/test_response', :response => fake_response)
257
+ response = nil
258
+ Net::HTTP.start('mock') do |query|
259
+ response = query.get('/test_response')
260
+ end
261
+
262
+ assert_equal fake_response, response
263
+ end
264
+
265
+ def test_mock_get_with_request_from_file_as_registered_uri
266
+ FakeWeb.register_uri('http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/test_request')
267
+ response = nil
268
+ Net::HTTP.start('www.google.com') do |query|
269
+ response = query.get('/')
270
+ end
271
+ assert_equal '200', response.code
272
+ assert response.body.include?('<title>Google</title>')
273
+ end
274
+
275
+ def test_mock_post_with_request_from_file_as_registered_uri
276
+ FakeWeb.register_uri('http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/test_request')
277
+ response = nil
278
+ Net::HTTP.start('www.google.com') do |query|
279
+ response = query.post('/', '')
280
+ end
281
+ assert_equal "200", response.code
282
+ assert response.body.include?('<title>Google</title>')
283
+ end
284
+
285
+ def test_proxy_request
286
+ FakeWeb.register_uri('http://www.example.com/', :string => "hello world")
287
+ FakeWeb.register_uri('http://your.proxy.host/', :string => "lala")
288
+ proxy_addr = 'your.proxy.host'
289
+ proxy_port = 8080
290
+
291
+ Net::HTTP::Proxy(proxy_addr, proxy_port).start('www.example.com') do |http|
292
+ response = http.get('/')
293
+ assert_equal "hello world", response.body
294
+ end
295
+ end
296
+
297
+ def test_https_request
298
+ FakeWeb.register_uri('https://www.example.com/', :string => "Hello World")
299
+ http = Net::HTTP.new('www.example.com', 443)
300
+ http.use_ssl = true
301
+ response = http.get('/')
302
+ assert_equal "Hello World", response.body
303
+ end
304
+
305
+ def test_register_unimplemented_response
306
+ FakeWeb.register_uri('http://mock/unimplemented', :response => 1)
307
+ assert_raises StandardError do
308
+ Net::HTTP.start('mock') { |q| q.get('/unimplemented') }
309
+ end
310
+ end
311
+
312
+ def test_real_http_request
313
+ setup_expectations_for_real_apple_hot_news_request
314
+
315
+ resp = nil
316
+ Net::HTTP.start('images.apple.com') do |query|
317
+ resp = query.get('/main/rss/hotnews/hotnews.rss')
318
+ end
319
+ assert resp.body.include?('Apple')
320
+ assert resp.body.include?('News')
321
+ end
322
+
323
+ def test_real_http_request_with_undocumented_full_uri_argument_style
324
+ setup_expectations_for_real_apple_hot_news_request(:path => 'http://images.apple.com/main/rss/hotnews/hotnews.rss')
325
+
326
+ resp = nil
327
+ Net::HTTP.start('images.apple.com') do |query|
328
+ resp = query.get('http://images.apple.com/main/rss/hotnews/hotnews.rss')
329
+ end
330
+ assert resp.body.include?('Apple')
331
+ assert resp.body.include?('News')
332
+ end
333
+
334
+ def test_real_https_request
335
+ setup_expectations_for_real_apple_hot_news_request(:port => 443)
336
+
337
+ http = Net::HTTP.new('images.apple.com', 443)
338
+ http.use_ssl = true
339
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE # silence certificate warning
340
+ response = http.get('/main/rss/hotnews/hotnews.rss')
341
+ assert response.body.include?('Apple')
342
+ assert response.body.include?('News')
343
+ end
344
+
345
+ def test_real_request_on_same_domain_as_mock
346
+ setup_expectations_for_real_apple_hot_news_request
347
+
348
+ FakeWeb.register_uri('http://images.apple.com/test_string.txt', :string => 'foo')
349
+
350
+ resp = nil
351
+ Net::HTTP.start('images.apple.com') do |query|
352
+ resp = query.get('/main/rss/hotnews/hotnews.rss')
353
+ end
354
+ assert resp.body.include?('Apple')
355
+ assert resp.body.include?('News')
356
+ end
357
+
358
+ def test_mock_request_on_real_domain
359
+ FakeWeb.register_uri('http://images.apple.com/test_string.txt', :string => 'foo')
360
+ resp = nil
361
+ Net::HTTP.start('images.apple.com') do |query|
362
+ resp = query.get('/test_string.txt')
363
+ end
364
+ assert_equal 'foo', resp.body
365
+ end
366
+
367
+ def test_mock_post_that_raises_exception
368
+ FakeWeb.register_uri('http://mock/raising_exception.txt', :exception => StandardError)
369
+ assert_raises(StandardError) do
370
+ Net::HTTP.start('mock') do |query|
371
+ query.post('/raising_exception.txt', 'some data')
372
+ end
373
+ end
374
+ end
375
+
376
+ def test_mock_post_that_raises_an_http_error
377
+ FakeWeb.register_uri('http://mock/raising_exception.txt', :exception => Net::HTTPError)
378
+ assert_raises(Net::HTTPError) do
379
+ Net::HTTP.start('mock') do |query|
380
+ query.post('/raising_exception.txt', '')
381
+ end
382
+ end
383
+ end
384
+
385
+ def test_mock_instance_syntax
386
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
387
+ response = nil
388
+ uri = URI.parse('http://mock/test_example.txt')
389
+ http = Net::HTTP.new(uri.host, uri.port)
390
+ response = http.start do
391
+ http.get(uri.path)
392
+ end
393
+
394
+ assert_equal 'test example content', response.body
395
+ end
396
+
397
+ def test_mock_via_nil_proxy
398
+ response = nil
399
+ proxy_address = nil
400
+ proxy_port = nil
401
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
402
+ uri = URI.parse('http://mock/test_example.txt')
403
+ http = Net::HTTP::Proxy(proxy_address, proxy_port).new(
404
+ uri.host, (uri.port or 80))
405
+ response = http.start do
406
+ http.get(uri.path)
407
+ end
408
+
409
+ assert_equal 'test example content', response.body
410
+ end
411
+
412
+ def test_response_type
413
+ FakeWeb.register_uri('http://mock/test_example.txt', :string => "test")
414
+ Net::HTTP.start('mock') do |http|
415
+ response = http.get('/test_example.txt', '')
416
+ assert_kind_of(Net::HTTPSuccess, response)
417
+ end
418
+ end
419
+
420
+ def test_mock_request_that_raises_an_http_error_with_a_specific_status
421
+ FakeWeb.register_uri('http://mock/raising_exception.txt', :exception => Net::HTTPError, :status => ['404', 'Not Found'])
422
+ exception = assert_raises(Net::HTTPError) do
423
+ Net::HTTP.start('mock') { |http| response = http.get('/raising_exception.txt') }
424
+ end
425
+ assert_equal '404', exception.response.code
426
+ assert_equal 'Not Found', exception.response.msg
427
+ end
428
+
429
+ def test_mock_rotate_responses
430
+ FakeWeb.register_uri('http://mock/multiple_test_example.txt',
431
+ [ {:file => File.dirname(__FILE__) + '/fixtures/test_example.txt', :times => 2},
432
+ {:string => "thrice", :times => 3},
433
+ {:string => "ever_more"} ])
434
+
435
+ uri = URI.parse('http://mock/multiple_test_example.txt')
436
+ 2.times { assert_equal 'test example content', Net::HTTP.get(uri) }
437
+ 3.times { assert_equal 'thrice', Net::HTTP.get(uri) }
438
+ 4.times { assert_equal 'ever_more', Net::HTTP.get(uri) }
439
+ end
440
+
441
+ def test_response_hit_calls_verify
442
+ verify_called = false
443
+ FakeWeb.register_uri('http://mock/verify_called',
444
+ :verify => lambda { |req|
445
+ assert_kind_of Net::HTTPRequest, req
446
+ verify_called = true
447
+ }
448
+ )
449
+ assert !verify_called
450
+ Net::HTTP.start('mock') { |http| response = http.get('/verify_called') }
451
+ assert verify_called
452
+ end
453
+ end
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class TestFakeWebOpenURI < Test::Unit::TestCase
4
+
5
+ def setup
6
+ FakeWeb.clean_registry
7
+ end
8
+
9
+ def test_content_for_registered_uri
10
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
11
+ assert_equal 'test example content', FakeWeb.response_for('http://mock/test_example.txt').body
12
+ end
13
+
14
+ def test_mock_open
15
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
16
+ assert_equal 'test example content', open('http://mock/test_example.txt').read
17
+ end
18
+
19
+ def test_mock_open_with_string_as_registered_uri
20
+ FakeWeb.register_uri('http://mock/test_string.txt', :string => 'foo')
21
+ assert_equal 'foo', open('http://mock/test_string.txt').string
22
+ end
23
+
24
+ def test_real_open
25
+ setup_expectations_for_real_apple_hot_news_request
26
+ resp = open('http://images.apple.com/main/rss/hotnews/hotnews.rss')
27
+ assert_equal "200", resp.status.first
28
+ body = resp.read
29
+ assert body.include?('Apple')
30
+ assert body.include?('News')
31
+ end
32
+
33
+ def test_mock_open_that_raises_exception
34
+ FakeWeb.register_uri('http://mock/raising_exception.txt', :exception => StandardError)
35
+ assert_raises(StandardError) do
36
+ open('http://mock/raising_exception.txt')
37
+ end
38
+ end
39
+
40
+ def test_mock_open_that_raises_an_http_error
41
+ FakeWeb.register_uri('http://mock/raising_exception.txt', :exception => OpenURI::HTTPError)
42
+ assert_raises(OpenURI::HTTPError) do
43
+ open('http://mock/raising_exception.txt')
44
+ end
45
+ end
46
+
47
+ def test_mock_open_that_raises_an_http_error_with_a_specific_status
48
+ FakeWeb.register_uri('http://mock/raising_exception.txt', :exception => OpenURI::HTTPError, :status => ['123', 'jodel'])
49
+ exception = assert_raises(OpenURI::HTTPError) do
50
+ open('http://mock/raising_exception.txt')
51
+ end
52
+ assert_equal '123', exception.io.code
53
+ assert_equal 'jodel', exception.io.message
54
+ end
55
+
56
+ def test_mock_open_with_block
57
+ FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
58
+ open('http://mock/test_example.txt') do |f|
59
+ assert 'test example content', f.readlines
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,52 @@
1
+ $:.unshift "#{File.dirname(__FILE__)}/../lib"
2
+
3
+ require 'test/unit'
4
+ require 'open-uri'
5
+ require 'fake_web'
6
+ require 'rubygems'
7
+ require 'mocha'
8
+
9
+ module FakeWebTestHelper
10
+
11
+ # Sets several expectations (using Mocha) that a real HTTP request makes it
12
+ # past FakeWeb to the socket layer. You can use this when you need to check
13
+ # that a request isn't handled by FakeWeb.
14
+ def setup_expectations_for_real_request(options = {})
15
+ # Socket handling
16
+ if options[:port] == 443
17
+ socket = mock("SSLSocket")
18
+ OpenSSL::SSL::SSLSocket.expects(:===).with(socket).returns(true).at_least_once
19
+ OpenSSL::SSL::SSLSocket.expects(:new).with(socket, instance_of(OpenSSL::SSL::SSLContext)).returns(socket).at_least_once
20
+ socket.stubs(:sync_close=).returns(true)
21
+ socket.expects(:connect).with().at_least_once
22
+ else
23
+ socket = mock("TCPSocket")
24
+ Socket.expects(:===).with(socket).returns(true)
25
+ end
26
+
27
+ TCPSocket.expects(:open).with(options[:host], options[:port]).returns(socket).at_least_once
28
+ socket.stubs(:closed?).returns(false)
29
+ socket.stubs(:close).returns(true)
30
+
31
+ # Request/response handling
32
+ request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
33
+ socket.expects(:write).with(all_of(includes(request_parts[0]), includes(request_parts[1]))).returns(100)
34
+
35
+ # TODO: handle long response bodies that use more than one #sysread call
36
+ socket.expects(:sysread).with(1024).at_least_once.returns("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}").then.raises(EOFError)
37
+ end
38
+
39
+
40
+ # A helper that calls #setup_expectations_for_real_request for you, using
41
+ # defaults for our commonly used test request to images.apple.com.
42
+ def setup_expectations_for_real_apple_hot_news_request(options = {})
43
+ defaults = { :host => "images.apple.com", :port => 80, :method => "GET",
44
+ :path => "/main/rss/hotnews/hotnews.rss",
45
+ :response_code => 200, :response_message => "OK",
46
+ :response_body => "<title>Apple Hot News</title>" }
47
+ setup_expectations_for_real_request(defaults.merge(options))
48
+ end
49
+
50
+ end
51
+
52
+ Test::Unit::TestCase.send(:include, FakeWebTestHelper)
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class TestFakeWebQueryString < Test::Unit::TestCase
4
+
5
+ def setup
6
+ FakeWeb.clean_registry
7
+ end
8
+
9
+ def test_register_uri_with_query_params
10
+ FakeWeb.register_uri('http://example.com/?a=1&b=1', :string => 'foo')
11
+ assert FakeWeb.registered_uri?('http://example.com/?a=1&b=1')
12
+ end
13
+
14
+ def test_register_uri_with_query_params_and_check_in_different_order
15
+ FakeWeb.register_uri('http://example.com/?a=1&b=1', :string => 'foo')
16
+ assert FakeWeb.registered_uri?('http://example.com/?b=1&a=1')
17
+ end
18
+
19
+ def test_registered_uri_gets_recognized_with_empty_query_params
20
+ FakeWeb.register_uri('http://example.com/', :string => 'foo')
21
+ assert FakeWeb.registered_uri?('http://example.com/?')
22
+ end
23
+
24
+ def test_register_uri_with_empty_query_params_and_check_with_none
25
+ FakeWeb.register_uri('http://example.com/?', :string => 'foo')
26
+ assert FakeWeb.registered_uri?('http://example.com/')
27
+ end
28
+
29
+ def test_registry_sort_query_params
30
+ assert_equal "a=1&b=2", FakeWeb::Registry.instance.send(:sort_query_params, "b=2&a=1")
31
+ end
32
+
33
+ def test_registry_sort_query_params_sorts_by_value_if_keys_collide
34
+ assert_equal "a=1&a=2&b=2", FakeWeb::Registry.instance.send(:sort_query_params, "a=2&b=2&a=1")
35
+ end
36
+
37
+ end