faraday 0.9.1 → 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +554 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +32 -197
  5. data/Rakefile +4 -68
  6. data/examples/client_spec.rb +119 -0
  7. data/examples/client_test.rb +144 -0
  8. data/lib/faraday/adapter/test.rb +194 -58
  9. data/lib/faraday/adapter.rb +76 -20
  10. data/lib/faraday/adapter_registry.rb +30 -0
  11. data/lib/faraday/connection.rb +341 -212
  12. data/lib/faraday/encoders/flat_params_encoder.rb +105 -0
  13. data/lib/faraday/encoders/nested_params_encoder.rb +183 -0
  14. data/lib/faraday/error.rb +123 -29
  15. data/lib/faraday/logging/formatter.rb +106 -0
  16. data/lib/faraday/methods.rb +6 -0
  17. data/lib/faraday/middleware.rb +18 -25
  18. data/lib/faraday/middleware_registry.rb +83 -0
  19. data/lib/faraday/options/connection_options.rb +22 -0
  20. data/lib/faraday/options/env.rb +199 -0
  21. data/lib/faraday/options/proxy_options.rb +32 -0
  22. data/lib/faraday/options/request_options.rb +22 -0
  23. data/lib/faraday/options/ssl_options.rb +69 -0
  24. data/lib/faraday/options.rb +63 -195
  25. data/lib/faraday/parameters.rb +4 -180
  26. data/lib/faraday/rack_builder.rb +99 -59
  27. data/lib/faraday/request/authorization.rb +37 -30
  28. data/lib/faraday/request/instrumentation.rb +47 -27
  29. data/lib/faraday/request/json.rb +55 -0
  30. data/lib/faraday/request/url_encoded.rb +48 -24
  31. data/lib/faraday/request.rb +76 -32
  32. data/lib/faraday/response/json.rb +54 -0
  33. data/lib/faraday/response/logger.rb +22 -48
  34. data/lib/faraday/response/raise_error.rb +57 -14
  35. data/lib/faraday/response.rb +32 -35
  36. data/lib/faraday/utils/headers.rb +139 -0
  37. data/lib/faraday/utils/params_hash.rb +61 -0
  38. data/lib/faraday/utils.rb +47 -222
  39. data/lib/faraday/version.rb +5 -0
  40. data/lib/faraday.rb +111 -222
  41. data/spec/external_adapters/faraday_specs_setup.rb +14 -0
  42. data/spec/faraday/adapter/test_spec.rb +413 -0
  43. data/spec/faraday/adapter_registry_spec.rb +28 -0
  44. data/spec/faraday/adapter_spec.rb +55 -0
  45. data/spec/faraday/connection_spec.rb +793 -0
  46. data/spec/faraday/error_spec.rb +60 -0
  47. data/spec/faraday/middleware_registry_spec.rb +31 -0
  48. data/spec/faraday/middleware_spec.rb +52 -0
  49. data/spec/faraday/options/env_spec.rb +76 -0
  50. data/spec/faraday/options/options_spec.rb +297 -0
  51. data/spec/faraday/options/proxy_options_spec.rb +44 -0
  52. data/spec/faraday/options/request_options_spec.rb +19 -0
  53. data/spec/faraday/params_encoders/flat_spec.rb +42 -0
  54. data/spec/faraday/params_encoders/nested_spec.rb +150 -0
  55. data/spec/faraday/rack_builder_spec.rb +317 -0
  56. data/spec/faraday/request/authorization_spec.rb +83 -0
  57. data/spec/faraday/request/instrumentation_spec.rb +74 -0
  58. data/spec/faraday/request/json_spec.rb +111 -0
  59. data/spec/faraday/request/url_encoded_spec.rb +93 -0
  60. data/spec/faraday/request_spec.rb +110 -0
  61. data/spec/faraday/response/json_spec.rb +117 -0
  62. data/spec/faraday/response/logger_spec.rb +220 -0
  63. data/spec/faraday/response/raise_error_spec.rb +172 -0
  64. data/spec/faraday/response_spec.rb +75 -0
  65. data/spec/faraday/utils/headers_spec.rb +82 -0
  66. data/spec/faraday/utils_spec.rb +118 -0
  67. data/spec/faraday_spec.rb +37 -0
  68. data/spec/spec_helper.rb +132 -0
  69. data/spec/support/disabling_stub.rb +14 -0
  70. data/spec/support/fake_safe_buffer.rb +15 -0
  71. data/spec/support/helper_methods.rb +96 -0
  72. data/spec/support/shared_examples/adapter.rb +105 -0
  73. data/spec/support/shared_examples/params_encoder.rb +18 -0
  74. data/spec/support/shared_examples/request_method.rb +263 -0
  75. data/spec/support/streaming_response_checker.rb +35 -0
  76. metadata +81 -109
  77. data/.document +0 -6
  78. data/CONTRIBUTING.md +0 -36
  79. data/Gemfile +0 -25
  80. data/faraday.gemspec +0 -34
  81. data/lib/faraday/adapter/em_http.rb +0 -237
  82. data/lib/faraday/adapter/em_http_ssl_patch.rb +0 -56
  83. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +0 -66
  84. data/lib/faraday/adapter/em_synchrony.rb +0 -92
  85. data/lib/faraday/adapter/excon.rb +0 -80
  86. data/lib/faraday/adapter/httpclient.rb +0 -106
  87. data/lib/faraday/adapter/net_http.rb +0 -130
  88. data/lib/faraday/adapter/net_http_persistent.rb +0 -48
  89. data/lib/faraday/adapter/patron.rb +0 -72
  90. data/lib/faraday/adapter/rack.rb +0 -58
  91. data/lib/faraday/adapter/typhoeus.rb +0 -123
  92. data/lib/faraday/autoload.rb +0 -84
  93. data/lib/faraday/request/basic_authentication.rb +0 -13
  94. data/lib/faraday/request/multipart.rb +0 -63
  95. data/lib/faraday/request/retry.rb +0 -148
  96. data/lib/faraday/request/token_authentication.rb +0 -15
  97. data/lib/faraday/upload_io.rb +0 -67
  98. data/script/cached-bundle +0 -46
  99. data/script/console +0 -7
  100. data/script/generate_certs +0 -42
  101. data/script/package +0 -7
  102. data/script/proxy-server +0 -42
  103. data/script/release +0 -17
  104. data/script/s3-put +0 -71
  105. data/script/server +0 -36
  106. data/script/test +0 -172
  107. data/test/adapters/default_test.rb +0 -14
  108. data/test/adapters/em_http_test.rb +0 -20
  109. data/test/adapters/em_synchrony_test.rb +0 -20
  110. data/test/adapters/excon_test.rb +0 -20
  111. data/test/adapters/httpclient_test.rb +0 -21
  112. data/test/adapters/integration.rb +0 -254
  113. data/test/adapters/logger_test.rb +0 -82
  114. data/test/adapters/net_http_persistent_test.rb +0 -20
  115. data/test/adapters/net_http_test.rb +0 -14
  116. data/test/adapters/patron_test.rb +0 -20
  117. data/test/adapters/rack_test.rb +0 -31
  118. data/test/adapters/test_middleware_test.rb +0 -114
  119. data/test/adapters/typhoeus_test.rb +0 -28
  120. data/test/authentication_middleware_test.rb +0 -65
  121. data/test/composite_read_io_test.rb +0 -111
  122. data/test/connection_test.rb +0 -522
  123. data/test/env_test.rb +0 -218
  124. data/test/helper.rb +0 -81
  125. data/test/live_server.rb +0 -67
  126. data/test/middleware/instrumentation_test.rb +0 -88
  127. data/test/middleware/retry_test.rb +0 -177
  128. data/test/middleware_stack_test.rb +0 -173
  129. data/test/multibyte.txt +0 -1
  130. data/test/options_test.rb +0 -252
  131. data/test/parameters_test.rb +0 -64
  132. data/test/request_middleware_test.rb +0 -142
  133. data/test/response_middleware_test.rb +0 -72
  134. data/test/strawberry.rb +0 -2
  135. data/test/utils_test.rb +0 -58
@@ -1,522 +0,0 @@
1
- require File.expand_path('../helper', __FILE__)
2
-
3
- class TestConnection < Faraday::TestCase
4
-
5
- def with_env(key, proxy)
6
- old_value = ENV.fetch(key, false)
7
- ENV[key] = proxy
8
- begin
9
- yield
10
- ensure
11
- if old_value == false
12
- ENV.delete key
13
- else
14
- ENV[key] = old_value
15
- end
16
- end
17
- end
18
-
19
- def test_initialize_parses_host_out_of_given_url
20
- conn = Faraday::Connection.new "http://sushi.com"
21
- assert_equal 'sushi.com', conn.host
22
- end
23
-
24
- def test_initialize_inherits_default_port_out_of_given_url
25
- conn = Faraday::Connection.new "http://sushi.com"
26
- assert_equal 80, conn.port
27
- end
28
-
29
- def test_initialize_parses_scheme_out_of_given_url
30
- conn = Faraday::Connection.new "http://sushi.com"
31
- assert_equal 'http', conn.scheme
32
- end
33
-
34
- def test_initialize_parses_port_out_of_given_url
35
- conn = Faraday::Connection.new "http://sushi.com:815"
36
- assert_equal 815, conn.port
37
- end
38
-
39
- def test_initialize_parses_nil_path_prefix_out_of_given_url
40
- conn = Faraday::Connection.new "http://sushi.com"
41
- assert_equal '/', conn.path_prefix
42
- end
43
-
44
- def test_initialize_parses_path_prefix_out_of_given_url
45
- conn = Faraday::Connection.new "http://sushi.com/fish"
46
- assert_equal '/fish', conn.path_prefix
47
- end
48
-
49
- def test_initialize_parses_path_prefix_out_of_given_url_option
50
- conn = Faraday::Connection.new :url => "http://sushi.com/fish"
51
- assert_equal '/fish', conn.path_prefix
52
- end
53
-
54
- def test_initialize_stores_default_params_from_options
55
- conn = Faraday::Connection.new :params => {:a => 1}
56
- assert_equal({'a' => 1}, conn.params)
57
- end
58
-
59
- def test_initialize_stores_default_params_from_uri
60
- conn = Faraday::Connection.new "http://sushi.com/fish?a=1"
61
- assert_equal({'a' => '1'}, conn.params)
62
- end
63
-
64
- def test_initialize_stores_default_params_from_uri_and_options
65
- conn = Faraday::Connection.new "http://sushi.com/fish?a=1&b=2", :params => {'a' => 3}
66
- assert_equal({'a' => 3, 'b' => '2'}, conn.params)
67
- end
68
-
69
- def test_initialize_stores_default_headers_from_options
70
- conn = Faraday::Connection.new :headers => {:user_agent => 'Faraday'}
71
- assert_equal 'Faraday', conn.headers['User-agent']
72
- end
73
-
74
- def test_basic_auth_sets_header
75
- conn = Faraday::Connection.new
76
- assert_nil conn.headers['Authorization']
77
-
78
- conn.basic_auth 'Aladdin', 'open sesame'
79
- assert auth = conn.headers['Authorization']
80
- assert_equal 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', auth
81
- end
82
-
83
- def test_auto_parses_basic_auth_from_url_and_unescapes
84
- conn = Faraday::Connection.new :url => "http://foo%40bar.com:pass%20word@sushi.com/fish"
85
- assert auth = conn.headers['Authorization']
86
- assert_equal Faraday::Request::BasicAuthentication.header("foo@bar.com", "pass word"), auth
87
- end
88
-
89
- def test_token_auth_sets_header
90
- conn = Faraday::Connection.new
91
- assert_nil conn.headers['Authorization']
92
-
93
- conn.token_auth 'abcdef', :nonce => 'abc'
94
- assert auth = conn.headers['Authorization']
95
- assert_match(/^Token /, auth)
96
- assert_match(/token="abcdef"/, auth)
97
- assert_match(/nonce="abc"/, auth)
98
- end
99
-
100
- def test_build_exclusive_url_uses_connection_host_as_default_uri_host
101
- conn = Faraday::Connection.new
102
- conn.host = 'sushi.com'
103
- uri = conn.build_exclusive_url("/sake.html")
104
- assert_equal 'sushi.com', uri.host
105
- end
106
-
107
- def test_build_exclusive_url_overrides_connection_port_for_absolute_urls
108
- conn = Faraday::Connection.new
109
- conn.port = 23
110
- uri = conn.build_exclusive_url("http://sushi.com")
111
- assert_equal 80, uri.port
112
- end
113
-
114
- def test_build_exclusive_url_uses_connection_scheme_as_default_uri_scheme
115
- conn = Faraday::Connection.new 'http://sushi.com'
116
- uri = conn.build_exclusive_url("/sake.html")
117
- assert_equal 'http', uri.scheme
118
- end
119
-
120
- def test_build_exclusive_url_uses_connection_path_prefix_to_customize_path
121
- conn = Faraday::Connection.new
122
- conn.path_prefix = '/fish'
123
- uri = conn.build_exclusive_url("sake.html")
124
- assert_equal '/fish/sake.html', uri.path
125
- end
126
-
127
- def test_build_exclusive_url_uses_root_connection_path_prefix_to_customize_path
128
- conn = Faraday::Connection.new
129
- conn.path_prefix = '/'
130
- uri = conn.build_exclusive_url("sake.html")
131
- assert_equal '/sake.html', uri.path
132
- end
133
-
134
- def test_build_exclusive_url_forces_connection_path_prefix_to_be_absolute
135
- conn = Faraday::Connection.new
136
- conn.path_prefix = 'fish'
137
- uri = conn.build_exclusive_url("sake.html")
138
- assert_equal '/fish/sake.html', uri.path
139
- end
140
-
141
- def test_build_exclusive_url_ignores_connection_path_prefix_trailing_slash
142
- conn = Faraday::Connection.new
143
- conn.path_prefix = '/fish/'
144
- uri = conn.build_exclusive_url("sake.html")
145
- assert_equal '/fish/sake.html', uri.path
146
- end
147
-
148
- def test_build_exclusive_url_allows_absolute_uri_to_ignore_connection_path_prefix
149
- conn = Faraday::Connection.new
150
- conn.path_prefix = '/fish'
151
- uri = conn.build_exclusive_url("/sake.html")
152
- assert_equal '/sake.html', uri.path
153
- end
154
-
155
- def test_build_exclusive_url_parses_url_params_into_path
156
- conn = Faraday::Connection.new
157
- uri = conn.build_exclusive_url("http://sushi.com/sake.html")
158
- assert_equal '/sake.html', uri.path
159
- end
160
-
161
- def test_build_exclusive_url_doesnt_add_ending_slash_given_nil_url
162
- conn = Faraday::Connection.new
163
- conn.url_prefix = "http://sushi.com/nigiri"
164
- uri = conn.build_exclusive_url
165
- assert_equal "/nigiri", uri.path
166
- end
167
-
168
- def test_build_exclusive_url_doesnt_add_ending_slash_given_empty_url
169
- conn = Faraday::Connection.new
170
- conn.url_prefix = "http://sushi.com/nigiri"
171
- uri = conn.build_exclusive_url('')
172
- assert_equal "/nigiri", uri.path
173
- end
174
-
175
- def test_build_exclusive_url_doesnt_use_connection_params
176
- conn = Faraday::Connection.new "http://sushi.com/nigiri"
177
- conn.params = {:a => 1}
178
- assert_equal "http://sushi.com/nigiri", conn.build_exclusive_url.to_s
179
- end
180
-
181
- def test_build_exclusive_url_uses_argument_params
182
- conn = Faraday::Connection.new "http://sushi.com/nigiri"
183
- conn.params = {:a => 1}
184
- params = Faraday::Utils::ParamsHash.new
185
- params[:a] = 2
186
- url = conn.build_exclusive_url(nil, params)
187
- assert_equal "http://sushi.com/nigiri?a=2", url.to_s
188
- end
189
-
190
- def test_build_url_uses_params
191
- conn = Faraday::Connection.new "http://sushi.com/nigiri"
192
- conn.params = {:a => 1, :b => 1}
193
- assert_equal "http://sushi.com/nigiri?a=1&b=1", conn.build_url.to_s
194
- end
195
-
196
- def test_build_url_merges_params
197
- conn = Faraday::Connection.new "http://sushi.com/nigiri"
198
- conn.params = {:a => 1, :b => 1}
199
- url = conn.build_url(nil, :b => 2, :c => 3)
200
- assert_equal "http://sushi.com/nigiri?a=1&b=2&c=3", url.to_s
201
- end
202
-
203
- def test_env_url_parses_url_params_into_query
204
- uri = env_url("http://sushi.com/sake.html", 'a[b]' => '1 + 2')
205
- assert_equal "a%5Bb%5D=1+%2B+2", uri.query
206
- end
207
-
208
- def test_env_url_escapes_per_spec
209
- uri = env_url('http:/', 'a' => '1+2 foo~bar.-baz')
210
- assert_equal "a=1%2B2+foo~bar.-baz", uri.query
211
- end
212
-
213
- def test_env_url_bracketizes_nested_params_in_query
214
- url = env_url nil, 'a' => {'b' => 'c'}
215
- assert_equal "a%5Bb%5D=c", url.query
216
- end
217
-
218
- def test_env_url_bracketizes_repeated_params_in_query
219
- uri = env_url("http://sushi.com/sake.html", 'a' => [1, 2])
220
- assert_equal "a%5B%5D=1&a%5B%5D=2", uri.query
221
- end
222
-
223
- def test_env_url_without_braketizing_repeated_params_in_query
224
- uri = env_url 'http://sushi.com', 'a' => [1, 2] do |conn|
225
- conn.options.params_encoder = Faraday::FlatParamsEncoder
226
- end
227
- assert_equal "a=1&a=2", uri.query
228
- end
229
-
230
- def test_build_exclusive_url_parses_url
231
- conn = Faraday::Connection.new
232
- uri = conn.build_exclusive_url("http://sushi.com/sake.html")
233
- assert_equal "http", uri.scheme
234
- assert_equal "sushi.com", uri.host
235
- assert_equal '/sake.html', uri.path
236
- end
237
-
238
- def test_build_exclusive_url_parses_url_and_changes_scheme
239
- conn = Faraday::Connection.new :url => "http://sushi.com/sushi"
240
- conn.scheme = 'https'
241
- uri = conn.build_exclusive_url("sake.html")
242
- assert_equal 'https://sushi.com/sushi/sake.html', uri.to_s
243
- end
244
-
245
- def test_build_exclusive_url_joins_url_to_base_with_ending_slash
246
- conn = Faraday::Connection.new :url => "http://sushi.com/sushi/"
247
- uri = conn.build_exclusive_url("sake.html")
248
- assert_equal 'http://sushi.com/sushi/sake.html', uri.to_s
249
- end
250
-
251
- def test_build_exclusive_url_used_default_base_with_ending_slash
252
- conn = Faraday::Connection.new :url => "http://sushi.com/sushi/"
253
- uri = conn.build_exclusive_url
254
- assert_equal 'http://sushi.com/sushi/', uri.to_s
255
- end
256
-
257
- def test_build_exclusive_url_overrides_base
258
- conn = Faraday::Connection.new :url => "http://sushi.com/sushi/"
259
- uri = conn.build_exclusive_url('/sake/')
260
- assert_equal 'http://sushi.com/sake/', uri.to_s
261
- end
262
-
263
- def test_build_exclusive_url_handles_uri_instances
264
- conn = Faraday::Connection.new
265
- uri = conn.build_exclusive_url(URI('/sake.html'))
266
- assert_equal '/sake.html', uri.path
267
- end
268
-
269
- def test_proxy_accepts_string
270
- with_env 'http_proxy', "http://duncan.proxy.com:80" do
271
- conn = Faraday::Connection.new
272
- conn.proxy 'http://proxy.com'
273
- assert_equal 'proxy.com', conn.proxy.host
274
- end
275
- end
276
-
277
- def test_proxy_accepts_uri
278
- with_env 'http_proxy', "http://duncan.proxy.com:80" do
279
- conn = Faraday::Connection.new
280
- conn.proxy URI.parse('http://proxy.com')
281
- assert_equal 'proxy.com', conn.proxy.host
282
- end
283
- end
284
-
285
- def test_proxy_accepts_hash_with_string_uri
286
- with_env 'http_proxy', "http://duncan.proxy.com:80" do
287
- conn = Faraday::Connection.new
288
- conn.proxy :uri => 'http://proxy.com', :user => 'rick'
289
- assert_equal 'proxy.com', conn.proxy.host
290
- assert_equal 'rick', conn.proxy.user
291
- end
292
- end
293
-
294
- def test_proxy_accepts_hash
295
- with_env 'http_proxy', "http://duncan.proxy.com:80" do
296
- conn = Faraday::Connection.new
297
- conn.proxy :uri => URI.parse('http://proxy.com'), :user => 'rick'
298
- assert_equal 'proxy.com', conn.proxy.host
299
- assert_equal 'rick', conn.proxy.user
300
- end
301
- end
302
-
303
- def test_proxy_accepts_http_env
304
- with_env 'http_proxy', "http://duncan.proxy.com:80" do
305
- conn = Faraday::Connection.new
306
- assert_equal 'duncan.proxy.com', conn.proxy.host
307
- end
308
- end
309
-
310
- def test_proxy_accepts_http_env_with_auth
311
- with_env 'http_proxy', "http://a%40b:my%20pass@duncan.proxy.com:80" do
312
- conn = Faraday::Connection.new
313
- assert_equal 'a@b', conn.proxy.user
314
- assert_equal 'my pass', conn.proxy.password
315
- end
316
- end
317
-
318
- def test_proxy_accepts_env_without_scheme
319
- with_env 'http_proxy', "localhost:8888" do
320
- uri = Faraday::Connection.new.proxy[:uri]
321
- assert_equal 'localhost', uri.host
322
- assert_equal 8888, uri.port
323
- end
324
- end
325
-
326
- def test_no_proxy_from_env
327
- with_env 'http_proxy', nil do
328
- conn = Faraday::Connection.new
329
- assert_equal nil, conn.proxy
330
- end
331
- end
332
-
333
- def test_no_proxy_from_blank_env
334
- with_env 'http_proxy', '' do
335
- conn = Faraday::Connection.new
336
- assert_equal nil, conn.proxy
337
- end
338
- end
339
-
340
- def test_proxy_doesnt_accept_uppercase_env
341
- with_env 'HTTP_PROXY', "http://localhost:8888/" do
342
- conn = Faraday::Connection.new
343
- assert_nil conn.proxy
344
- end
345
- end
346
-
347
- def test_proxy_requires_uri
348
- conn = Faraday::Connection.new
349
- assert_raises ArgumentError do
350
- conn.proxy :uri => :bad_uri, :user => 'rick'
351
- end
352
- end
353
-
354
- def test_dups_connection_object
355
- conn = Faraday::Connection.new 'http://sushi.com/foo',
356
- :ssl => { :verify => :none },
357
- :headers => {'content-type' => 'text/plain'},
358
- :params => {'a'=>'1'}
359
-
360
- other = conn.dup
361
-
362
- assert_equal conn.build_exclusive_url, other.build_exclusive_url
363
- assert_equal 'text/plain', other.headers['content-type']
364
- assert_equal '1', other.params['a']
365
-
366
- other.basic_auth('', '')
367
- other.headers['content-length'] = 12
368
- other.params['b'] = '2'
369
-
370
- assert_equal 2, other.builder.handlers.size
371
- assert_equal 2, conn.builder.handlers.size
372
- assert !conn.headers.key?('content-length')
373
- assert !conn.params.key?('b')
374
- end
375
-
376
- def test_initialize_with_false_option
377
- conn = Faraday::Connection.new :ssl => {:verify => false}
378
- assert !conn.ssl.verify?
379
- end
380
-
381
- def test_init_with_block
382
- conn = Faraday::Connection.new { }
383
- assert_equal 0, conn.builder.handlers.size
384
- end
385
-
386
- def test_init_with_block_yields_connection
387
- conn = Faraday::Connection.new(:params => {'a'=>'1'}) { |faraday|
388
- faraday.adapter :net_http
389
- faraday.url_prefix = 'http://sushi.com/omnom'
390
- assert_equal '1', faraday.params['a']
391
- }
392
- assert_equal 1, conn.builder.handlers.size
393
- assert_equal '/omnom', conn.path_prefix
394
- end
395
-
396
- def env_url(url, params)
397
- conn = Faraday::Connection.new(url, :params => params)
398
- yield(conn) if block_given?
399
- req = conn.build_request(:get)
400
- req.to_env(conn).url
401
- end
402
- end
403
-
404
- class TestRequestParams < Faraday::TestCase
405
- def create_connection(*args)
406
- @conn = Faraday::Connection.new(*args) do |conn|
407
- yield(conn) if block_given?
408
- class << conn.builder
409
- undef app
410
- def app() lambda { |env| env } end
411
- end
412
- end
413
- end
414
-
415
- def assert_query_equal(expected, query)
416
- assert_equal expected, query.split('&').sort
417
- end
418
-
419
- def with_default_params_encoder(encoder)
420
- old_encoder = Faraday::Utils.default_params_encoder
421
- begin
422
- Faraday::Utils.default_params_encoder = encoder
423
- yield
424
- ensure
425
- Faraday::Utils.default_params_encoder = old_encoder
426
- end
427
- end
428
-
429
- def test_merges_connection_and_request_params
430
- create_connection 'http://a.co/?token=abc', :params => {'format' => 'json'}
431
- query = get '?page=1', :limit => 5
432
- assert_query_equal %w[format=json limit=5 page=1 token=abc], query
433
- end
434
-
435
- def test_overrides_connection_params
436
- create_connection 'http://a.co/?a=a&b=b&c=c', :params => {:a => 'A'} do |conn|
437
- conn.params[:b] = 'B'
438
- assert_equal 'c', conn.params[:c]
439
- end
440
- assert_query_equal %w[a=A b=B c=c], get
441
- end
442
-
443
- def test_all_overrides_connection_params
444
- create_connection 'http://a.co/?a=a', :params => {:c => 'c'} do |conn|
445
- conn.params = {'b' => 'b'}
446
- end
447
- assert_query_equal %w[b=b], get
448
- end
449
-
450
- def test_overrides_request_params
451
- create_connection
452
- query = get '?p=1&a=a', :p => 2
453
- assert_query_equal %w[a=a p=2], query
454
- end
455
-
456
- def test_overrides_request_params_block
457
- create_connection
458
- query = get '?p=1&a=a', :p => 2 do |req|
459
- req.params[:p] = 3
460
- end
461
- assert_query_equal %w[a=a p=3], query
462
- end
463
-
464
- def test_overrides_request_params_block_url
465
- create_connection
466
- query = get nil, :p => 2 do |req|
467
- req.url '?p=1&a=a', 'p' => 3
468
- end
469
- assert_query_equal %w[a=a p=3], query
470
- end
471
-
472
- def test_overrides_all_request_params
473
- create_connection :params => {:c => 'c'}
474
- query = get '?p=1&a=a', :p => 2 do |req|
475
- assert_equal 'a', req.params[:a]
476
- assert_equal 'c', req.params['c']
477
- assert_equal 2, req.params['p']
478
- req.params = {:b => 'b'}
479
- assert_equal 'b', req.params['b']
480
- end
481
- assert_query_equal %w[b=b], query
482
- end
483
-
484
- def test_array_params_in_url
485
- with_default_params_encoder(nil) do
486
- create_connection 'http://a.co/page1?color[]=red&color[]=blue'
487
- query = get
488
- assert_equal "color%5B%5D=red&color%5B%5D=blue", query
489
- end
490
- end
491
-
492
- def test_array_params_in_params
493
- with_default_params_encoder(nil) do
494
- create_connection 'http://a.co/page1', :params => {:color => ['red', 'blue']}
495
- query = get
496
- assert_equal "color%5B%5D=red&color%5B%5D=blue", query
497
- end
498
- end
499
-
500
- def test_array_params_in_url_with_flat_params
501
- with_default_params_encoder(Faraday::FlatParamsEncoder) do
502
- create_connection 'http://a.co/page1?color=red&color=blue'
503
- query = get
504
- assert_equal "color=red&color=blue", query
505
- end
506
- end
507
-
508
- def test_array_params_in_params_with_flat_params
509
- with_default_params_encoder(Faraday::FlatParamsEncoder) do
510
- create_connection 'http://a.co/page1', :params => {:color => ['red', 'blue']}
511
- query = get
512
- assert_equal "color=red&color=blue", query
513
- end
514
- end
515
-
516
- def get(*args)
517
- env = @conn.get(*args) do |req|
518
- yield(req) if block_given?
519
- end
520
- env[:url].query
521
- end
522
- end