avdi-faraday 0.8.1
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.
- data/Gemfile +27 -0
- data/LICENSE.md +20 -0
- data/README.md +250 -0
- data/Rakefile +87 -0
- data/config.ru +6 -0
- data/faraday.gemspec +86 -0
- data/lib/faraday.rb +276 -0
- data/lib/faraday/adapter.rb +71 -0
- data/lib/faraday/adapter/em_http.rb +217 -0
- data/lib/faraday/adapter/em_synchrony.rb +89 -0
- data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +66 -0
- data/lib/faraday/adapter/excon.rb +59 -0
- data/lib/faraday/adapter/httpclient.rb +92 -0
- data/lib/faraday/adapter/net_http.rb +116 -0
- data/lib/faraday/adapter/net_http_persistent.rb +37 -0
- data/lib/faraday/adapter/patron.rb +65 -0
- data/lib/faraday/adapter/rack.rb +57 -0
- data/lib/faraday/adapter/test.rb +162 -0
- data/lib/faraday/adapter/typhoeus.rb +107 -0
- data/lib/faraday/builder.rb +184 -0
- data/lib/faraday/connection.rb +468 -0
- data/lib/faraday/error.rb +40 -0
- data/lib/faraday/middleware.rb +41 -0
- data/lib/faraday/request.rb +101 -0
- data/lib/faraday/request/authorization.rb +40 -0
- data/lib/faraday/request/basic_authentication.rb +13 -0
- data/lib/faraday/request/multipart.rb +62 -0
- data/lib/faraday/request/retry.rb +67 -0
- data/lib/faraday/request/token_authentication.rb +15 -0
- data/lib/faraday/request/url_encoded.rb +35 -0
- data/lib/faraday/response.rb +99 -0
- data/lib/faraday/response/logger.rb +34 -0
- data/lib/faraday/response/raise_error.rb +16 -0
- data/lib/faraday/upload_io.rb +23 -0
- data/lib/faraday/utils.rb +274 -0
- data/script/test +91 -0
- data/test/adapters/default_test.rb +14 -0
- data/test/adapters/em_http_test.rb +19 -0
- data/test/adapters/em_synchrony_test.rb +20 -0
- data/test/adapters/excon_test.rb +15 -0
- data/test/adapters/httpclient_test.rb +16 -0
- data/test/adapters/integration.rb +193 -0
- data/test/adapters/logger_test.rb +37 -0
- data/test/adapters/net_http_persistent_test.rb +11 -0
- data/test/adapters/net_http_test.rb +49 -0
- data/test/adapters/patron_test.rb +17 -0
- data/test/adapters/rack_test.rb +26 -0
- data/test/adapters/test_middleware_test.rb +70 -0
- data/test/adapters/typhoeus_test.rb +20 -0
- data/test/authentication_middleware_test.rb +65 -0
- data/test/connection_test.rb +375 -0
- data/test/env_test.rb +183 -0
- data/test/helper.rb +75 -0
- data/test/live_server.rb +57 -0
- data/test/middleware/retry_test.rb +62 -0
- data/test/middleware_stack_test.rb +203 -0
- data/test/middleware_test.rb +12 -0
- data/test/request_middleware_test.rb +108 -0
- data/test/response_middleware_test.rb +74 -0
- metadata +182 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path('../integration', __FILE__)
|
2
|
+
|
3
|
+
module Adapters
|
4
|
+
class TyphoeusTest < Faraday::TestCase
|
5
|
+
|
6
|
+
def adapter() :typhoeus end
|
7
|
+
|
8
|
+
Integration.apply(self, :Parallel) do
|
9
|
+
# https://github.com/dbalatero/typhoeus/issues/75
|
10
|
+
undef :test_GET_with_body
|
11
|
+
|
12
|
+
def test_binds_local_socket
|
13
|
+
host = '1.2.3.4'
|
14
|
+
conn = create_connection :request => { :bind => { :host => host } }
|
15
|
+
assert_equal host, conn.options[:bind][:host]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end unless defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
+
|
3
|
+
class AuthenticationMiddlewareTest < Faraday::TestCase
|
4
|
+
def conn
|
5
|
+
Faraday::Connection.new('http://example.net/') do |builder|
|
6
|
+
yield builder
|
7
|
+
builder.adapter :test do |stub|
|
8
|
+
stub.get('/auth-echo') do |env|
|
9
|
+
[200, {}, env[:request_headers]['Authorization']]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_basic_middleware_adds_basic_header
|
16
|
+
response = conn { |b| b.request :basic_auth, 'aladdin', 'opensesame' }.get('/auth-echo')
|
17
|
+
assert_equal 'Basic YWxhZGRpbjpvcGVuc2VzYW1l', response.body
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_basic_middleware_adds_basic_header_correctly_with_long_values
|
21
|
+
response = conn { |b| b.request :basic_auth, 'A' * 255, '' }.get('/auth-echo')
|
22
|
+
assert_equal "Basic #{'QUFB' * 85}Og==", response.body
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_basic_middleware_does_not_interfere_with_existing_authorization
|
26
|
+
response = conn { |b| b.request :basic_auth, 'aladdin', 'opensesame' }.
|
27
|
+
get('/auth-echo', nil, :authorization => 'Token token="bar"')
|
28
|
+
assert_equal 'Token token="bar"', response.body
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_token_middleware_adds_token_header
|
32
|
+
response = conn { |b| b.request :token_auth, 'quux' }.get('/auth-echo')
|
33
|
+
assert_equal 'Token token="quux"', response.body
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_token_middleware_includes_other_values_if_provided
|
37
|
+
response = conn { |b|
|
38
|
+
b.request :token_auth, 'baz', :foo => 42
|
39
|
+
}.get('/auth-echo')
|
40
|
+
assert_match /^Token /, response.body
|
41
|
+
assert_match /token="baz"/, response.body
|
42
|
+
assert_match /foo="42"/, response.body
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_token_middleware_does_not_interfere_with_existing_authorization
|
46
|
+
response = conn { |b| b.request :token_auth, 'quux' }.
|
47
|
+
get('/auth-echo', nil, :authorization => 'Token token="bar"')
|
48
|
+
assert_equal 'Token token="bar"', response.body
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_authorization_middleware_with_string
|
52
|
+
response = conn { |b|
|
53
|
+
b.request :authorization, 'custom', 'abc def'
|
54
|
+
}.get('/auth-echo')
|
55
|
+
assert_match /^custom abc def$/, response.body
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_authorization_middleware_with_hash
|
59
|
+
response = conn { |b|
|
60
|
+
b.request :authorization, 'baz', :foo => 42
|
61
|
+
}.get('/auth-echo')
|
62
|
+
assert_match /^baz /, response.body
|
63
|
+
assert_match /foo="42"/, response.body
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,375 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
class TestConnection < Faraday::TestCase
|
5
|
+
|
6
|
+
def with_proxy_env(proxy)
|
7
|
+
old_proxy = ENV['http_proxy']
|
8
|
+
ENV['http_proxy'] = proxy
|
9
|
+
begin
|
10
|
+
yield
|
11
|
+
ensure
|
12
|
+
ENV['http_proxy'] = old_proxy
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_initialize_parses_host_out_of_given_url
|
17
|
+
conn = Faraday::Connection.new "http://sushi.com"
|
18
|
+
assert_equal 'sushi.com', conn.host
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_initialize_inherits_default_port_out_of_given_url
|
22
|
+
conn = Faraday::Connection.new "http://sushi.com"
|
23
|
+
assert_equal 80, conn.port
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_initialize_parses_scheme_out_of_given_url
|
27
|
+
conn = Faraday::Connection.new "http://sushi.com"
|
28
|
+
assert_equal 'http', conn.scheme
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_initialize_parses_port_out_of_given_url
|
32
|
+
conn = Faraday::Connection.new "http://sushi.com:815"
|
33
|
+
assert_equal 815, conn.port
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_initialize_parses_nil_path_prefix_out_of_given_url
|
37
|
+
conn = Faraday::Connection.new "http://sushi.com"
|
38
|
+
assert_equal '/', conn.path_prefix
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_initialize_parses_path_prefix_out_of_given_url
|
42
|
+
conn = Faraday::Connection.new "http://sushi.com/fish"
|
43
|
+
assert_equal '/fish', conn.path_prefix
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_initialize_parses_path_prefix_out_of_given_url_option
|
47
|
+
conn = Faraday::Connection.new :url => "http://sushi.com/fish"
|
48
|
+
assert_equal '/fish', conn.path_prefix
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_initialize_stores_default_params_from_options
|
52
|
+
conn = Faraday::Connection.new :params => {:a => 1}
|
53
|
+
assert_equal({'a' => 1}, conn.params)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_initialize_stores_default_params_from_uri
|
57
|
+
conn = Faraday::Connection.new "http://sushi.com/fish?a=1"
|
58
|
+
assert_equal({'a' => '1'}, conn.params)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_initialize_stores_default_params_from_uri_and_options
|
62
|
+
conn = Faraday::Connection.new "http://sushi.com/fish?a=1&b=2", :params => {'a' => 3}
|
63
|
+
assert_equal({'a' => 3, 'b' => '2'}, conn.params)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_initialize_stores_default_headers_from_options
|
67
|
+
conn = Faraday::Connection.new :headers => {:user_agent => 'Faraday'}
|
68
|
+
assert_equal 'Faraday', conn.headers['User-agent']
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_basic_auth_sets_header
|
72
|
+
conn = Faraday::Connection.new
|
73
|
+
assert_nil conn.headers['Authorization']
|
74
|
+
|
75
|
+
conn.basic_auth 'Aladdin', 'open sesame'
|
76
|
+
assert auth = conn.headers['Authorization']
|
77
|
+
assert_equal 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', auth
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_auto_parses_basic_auth_from_url_and_unescapes
|
81
|
+
conn = Faraday::Connection.new :url => "http://foo%40bar.com:pass%20word@sushi.com/fish"
|
82
|
+
assert auth = conn.headers['Authorization']
|
83
|
+
assert_equal Faraday::Request::BasicAuthentication.header("foo@bar.com", "pass word"), auth
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_token_auth_sets_header
|
87
|
+
conn = Faraday::Connection.new
|
88
|
+
assert_nil conn.headers['Authorization']
|
89
|
+
|
90
|
+
conn.token_auth 'abcdef', :nonce => 'abc'
|
91
|
+
assert auth = conn.headers['Authorization']
|
92
|
+
assert_match /^Token /, auth
|
93
|
+
assert_match /token="abcdef"/, auth
|
94
|
+
assert_match /nonce="abc"/, auth
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_build_url_uses_connection_host_as_default_uri_host
|
98
|
+
conn = Faraday::Connection.new
|
99
|
+
conn.host = 'sushi.com'
|
100
|
+
uri = conn.build_url("/sake.html")
|
101
|
+
assert_equal 'sushi.com', uri.host
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_build_url_overrides_connection_port_for_absolute_urls
|
105
|
+
conn = Faraday::Connection.new
|
106
|
+
conn.port = 23
|
107
|
+
uri = conn.build_url("http://sushi.com")
|
108
|
+
assert_equal 80, uri.port
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_build_url_uses_connection_scheme_as_default_uri_scheme
|
112
|
+
conn = Faraday::Connection.new 'http://sushi.com'
|
113
|
+
uri = conn.build_url("/sake.html")
|
114
|
+
assert_equal 'http', uri.scheme
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_build_url_uses_connection_path_prefix_to_customize_path
|
118
|
+
conn = Faraday::Connection.new
|
119
|
+
conn.path_prefix = '/fish'
|
120
|
+
uri = conn.build_url("sake.html")
|
121
|
+
assert_equal '/fish/sake.html', uri.path
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_build_url_uses_root_connection_path_prefix_to_customize_path
|
125
|
+
conn = Faraday::Connection.new
|
126
|
+
conn.path_prefix = '/'
|
127
|
+
uri = conn.build_url("sake.html")
|
128
|
+
assert_equal '/sake.html', uri.path
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_build_url_forces_connection_path_prefix_to_be_absolute
|
132
|
+
conn = Faraday::Connection.new
|
133
|
+
conn.path_prefix = 'fish'
|
134
|
+
uri = conn.build_url("sake.html")
|
135
|
+
assert_equal '/fish/sake.html', uri.path
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_build_url_ignores_connection_path_prefix_trailing_slash
|
139
|
+
conn = Faraday::Connection.new
|
140
|
+
conn.path_prefix = '/fish/'
|
141
|
+
uri = conn.build_url("sake.html")
|
142
|
+
assert_equal '/fish/sake.html', uri.path
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_build_url_allows_absolute_uri_to_ignore_connection_path_prefix
|
146
|
+
conn = Faraday::Connection.new
|
147
|
+
conn.path_prefix = '/fish'
|
148
|
+
uri = conn.build_url("/sake.html")
|
149
|
+
assert_equal '/sake.html', uri.path
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_build_url_parses_url_params_into_path
|
153
|
+
conn = Faraday::Connection.new
|
154
|
+
uri = conn.build_url("http://sushi.com/sake.html")
|
155
|
+
assert_equal '/sake.html', uri.path
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_build_url_doesnt_add_ending_slash_given_nil_url
|
159
|
+
conn = Faraday::Connection.new
|
160
|
+
conn.url_prefix = "http://sushi.com/nigiri"
|
161
|
+
uri = conn.build_url(nil)
|
162
|
+
assert_equal "/nigiri", uri.path
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_build_url_doesnt_add_ending_slash_given_empty_url
|
166
|
+
conn = Faraday::Connection.new
|
167
|
+
conn.url_prefix = "http://sushi.com/nigiri"
|
168
|
+
uri = conn.build_url('')
|
169
|
+
assert_equal "/nigiri", uri.path
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_build_url_parses_url_params_into_query
|
173
|
+
conn = Faraday::Connection.new
|
174
|
+
uri = conn.build_url("http://sushi.com/sake.html", 'a[b]' => '1 + 2')
|
175
|
+
assert_equal "a%5Bb%5D=1+%2B+2", uri.query
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_build_url_escapes_per_spec
|
179
|
+
conn = Faraday::Connection.new
|
180
|
+
uri = conn.build_url('http:/', 'a' => '1+2 foo~bar.-baz')
|
181
|
+
assert_equal "a=1%2B2+foo~bar.-baz", uri.query
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_build_url_bracketizes_nested_params_in_query
|
185
|
+
conn = Faraday::Connection.new
|
186
|
+
uri = conn.build_url("http://sushi.com/sake.html", 'a' => {'b' => 'c'})
|
187
|
+
assert_equal "a%5Bb%5D=c", uri.query
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_build_url_parses_url
|
191
|
+
conn = Faraday::Connection.new
|
192
|
+
uri = conn.build_url("http://sushi.com/sake.html")
|
193
|
+
assert_equal "http", uri.scheme
|
194
|
+
assert_equal "sushi.com", uri.host
|
195
|
+
assert_equal '/sake.html', uri.path
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_build_url_parses_url_and_changes_scheme
|
199
|
+
conn = Faraday::Connection.new :url => "http://sushi.com/sushi"
|
200
|
+
conn.scheme = 'https'
|
201
|
+
uri = conn.build_url("sake.html")
|
202
|
+
assert_equal 'https://sushi.com/sushi/sake.html', uri.to_s
|
203
|
+
end
|
204
|
+
|
205
|
+
def test_build_url_handles_uri_instances
|
206
|
+
conn = Faraday::Connection.new
|
207
|
+
uri = conn.build_url(URI('/sake.html'))
|
208
|
+
assert_equal '/sake.html', uri.path
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_proxy_accepts_string
|
212
|
+
with_proxy_env "http://duncan.proxy.com:80" do
|
213
|
+
conn = Faraday::Connection.new
|
214
|
+
conn.proxy 'http://proxy.com'
|
215
|
+
assert_equal 'proxy.com', conn.proxy[:uri].host
|
216
|
+
assert_equal [:uri], conn.proxy.keys
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_proxy_accepts_uri
|
221
|
+
with_proxy_env "http://duncan.proxy.com:80" do
|
222
|
+
conn = Faraday::Connection.new
|
223
|
+
conn.proxy URI.parse('http://proxy.com')
|
224
|
+
assert_equal 'proxy.com', conn.proxy[:uri].host
|
225
|
+
assert_equal [:uri], conn.proxy.keys
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def test_proxy_accepts_hash_with_string_uri
|
230
|
+
with_proxy_env "http://duncan.proxy.com:80" do
|
231
|
+
conn = Faraday::Connection.new
|
232
|
+
conn.proxy :uri => 'http://proxy.com', :user => 'rick'
|
233
|
+
assert_equal 'proxy.com', conn.proxy[:uri].host
|
234
|
+
assert_equal 'rick', conn.proxy[:user]
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_proxy_accepts_hash
|
239
|
+
with_proxy_env "http://duncan.proxy.com:80" do
|
240
|
+
conn = Faraday::Connection.new
|
241
|
+
conn.proxy :uri => URI.parse('http://proxy.com'), :user => 'rick'
|
242
|
+
assert_equal 'proxy.com', conn.proxy[:uri].host
|
243
|
+
assert_equal 'rick', conn.proxy[:user]
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_proxy_accepts_http_env
|
248
|
+
with_proxy_env "http://duncan.proxy.com:80" do
|
249
|
+
conn = Faraday::Connection.new
|
250
|
+
assert_equal 'duncan.proxy.com', conn.proxy[:uri].host
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_proxy_requires_uri
|
255
|
+
conn = Faraday::Connection.new
|
256
|
+
assert_raises ArgumentError do
|
257
|
+
conn.proxy :uri => :bad_uri, :user => 'rick'
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def test_dups_connection_object
|
262
|
+
conn = Faraday::Connection.new 'http://sushi.com/foo',
|
263
|
+
:ssl => { :verify => :none },
|
264
|
+
:headers => {'content-type' => 'text/plain'},
|
265
|
+
:params => {'a'=>'1'}
|
266
|
+
|
267
|
+
other = conn.dup
|
268
|
+
|
269
|
+
assert_equal conn.build_url(''), other.build_url('')
|
270
|
+
assert_equal 'text/plain', other.headers['content-type']
|
271
|
+
assert_equal '1', other.params['a']
|
272
|
+
|
273
|
+
other.basic_auth('', '')
|
274
|
+
other.headers['content-length'] = 12
|
275
|
+
other.params['b'] = '2'
|
276
|
+
|
277
|
+
assert_equal 2, other.builder.handlers.size
|
278
|
+
assert_equal 2, conn.builder.handlers.size
|
279
|
+
assert !conn.headers.key?('content-length')
|
280
|
+
assert !conn.params.key?('b')
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_init_with_block
|
284
|
+
conn = Faraday::Connection.new { }
|
285
|
+
assert_equal 0, conn.builder.handlers.size
|
286
|
+
end
|
287
|
+
|
288
|
+
def test_init_with_block_yields_connection
|
289
|
+
conn = Faraday::Connection.new(:params => {'a'=>'1'}) { |faraday|
|
290
|
+
faraday.adapter :net_http
|
291
|
+
faraday.url_prefix = 'http://sushi.com/omnom'
|
292
|
+
assert_equal '1', faraday.params['a']
|
293
|
+
}
|
294
|
+
assert_equal 1, conn.builder.handlers.size
|
295
|
+
assert_equal '/omnom', conn.path_prefix
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
class TestRequestParams < Faraday::TestCase
|
300
|
+
def create_connection(*args)
|
301
|
+
@conn = Faraday::Connection.new(*args) do |conn|
|
302
|
+
yield conn if block_given?
|
303
|
+
class << conn
|
304
|
+
undef app
|
305
|
+
def app() lambda { |env| env } end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def get(*args)
|
311
|
+
env = @conn.get(*args) do |req|
|
312
|
+
yield req if block_given?
|
313
|
+
end
|
314
|
+
env[:url].query
|
315
|
+
end
|
316
|
+
|
317
|
+
def assert_query_equal(expected, query)
|
318
|
+
assert_equal expected, query.split('&').sort
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_merges_connection_and_request_params
|
322
|
+
create_connection 'http://a.co/?token=abc', :params => {'format' => 'json'}
|
323
|
+
query = get '?page=1', :limit => 5
|
324
|
+
assert_query_equal %w[format=json limit=5 page=1 token=abc], query
|
325
|
+
end
|
326
|
+
|
327
|
+
def test_overrides_connection_params
|
328
|
+
create_connection 'http://a.co/?a=a&b=b&c=c', :params => {:a => 'A'} do |conn|
|
329
|
+
conn.params[:b] = 'B'
|
330
|
+
assert_equal 'c', conn.params[:c]
|
331
|
+
end
|
332
|
+
assert_query_equal %w[a=A b=B c=c], get
|
333
|
+
end
|
334
|
+
|
335
|
+
def test_all_overrides_connection_params
|
336
|
+
create_connection 'http://a.co/?a=a', :params => {:c => 'c'} do |conn|
|
337
|
+
conn.params = {'b' => 'b'}
|
338
|
+
end
|
339
|
+
assert_query_equal %w[b=b], get
|
340
|
+
end
|
341
|
+
|
342
|
+
def test_overrides_request_params
|
343
|
+
create_connection
|
344
|
+
query = get '?p=1&a=a', :p => 2
|
345
|
+
assert_query_equal %w[a=a p=2], query
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_overrides_request_params_block
|
349
|
+
create_connection
|
350
|
+
query = get '?p=1&a=a', :p => 2 do |req|
|
351
|
+
req.params[:p] = 3
|
352
|
+
end
|
353
|
+
assert_query_equal %w[a=a p=3], query
|
354
|
+
end
|
355
|
+
|
356
|
+
def test_overrides_request_params_block_url
|
357
|
+
create_connection
|
358
|
+
query = get nil, :p => 2 do |req|
|
359
|
+
req.url '?p=1&a=a', 'p' => 3
|
360
|
+
end
|
361
|
+
assert_query_equal %w[a=a p=3], query
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_overrides_all_request_params
|
365
|
+
create_connection :params => {:c => 'c'}
|
366
|
+
query = get '?p=1&a=a', :p => 2 do |req|
|
367
|
+
assert_equal 'a', req.params[:a]
|
368
|
+
assert_equal 'c', req.params['c']
|
369
|
+
assert_equal 2, req.params['p']
|
370
|
+
req.params = {:b => 'b'}
|
371
|
+
assert_equal 'b', req.params['b']
|
372
|
+
end
|
373
|
+
assert_query_equal %w[b=b], query
|
374
|
+
end
|
375
|
+
end
|