faraday 0.8.11 → 0.9.0
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.
- checksums.yaml +4 -4
- data/.document +6 -0
- data/CHANGELOG.md +15 -0
- data/CONTRIBUTING.md +36 -0
- data/Gemfile +10 -3
- data/LICENSE.md +1 -1
- data/README.md +17 -51
- data/Rakefile +2 -18
- data/faraday.gemspec +34 -0
- data/lib/faraday/adapter/em_http.rb +34 -0
- data/lib/faraday/adapter/em_http_ssl_patch.rb +56 -0
- data/lib/faraday/adapter/em_synchrony.rb +11 -24
- data/lib/faraday/adapter/excon.rb +12 -2
- data/lib/faraday/adapter/httpclient.rb +106 -0
- data/lib/faraday/adapter/net_http.rb +10 -6
- data/lib/faraday/adapter/patron.rb +2 -8
- data/lib/faraday/adapter/rack.rb +0 -2
- data/lib/faraday/adapter/test.rb +39 -39
- data/lib/faraday/adapter/typhoeus.rb +12 -3
- data/lib/faraday/adapter.rb +20 -35
- data/lib/faraday/autoload.rb +85 -0
- data/lib/faraday/connection.rb +232 -125
- data/lib/faraday/error.rb +42 -34
- data/lib/faraday/options.rb +350 -0
- data/lib/faraday/parameters.rb +193 -0
- data/lib/faraday/{builder.rb → rack_builder.rb} +79 -22
- data/lib/faraday/request/authorization.rb +7 -5
- data/lib/faraday/request/basic_authentication.rb +1 -1
- data/lib/faraday/request/instrumentation.rb +36 -0
- data/lib/faraday/request/multipart.rb +10 -9
- data/lib/faraday/request/retry.rb +99 -4
- data/lib/faraday/request/token_authentication.rb +2 -2
- data/lib/faraday/request/url_encoded.rb +7 -6
- data/lib/faraday/request.rb +21 -30
- data/lib/faraday/response/logger.rb +4 -4
- data/lib/faraday/response/raise_error.rb +4 -2
- data/lib/faraday/response.rb +17 -23
- data/lib/faraday/utils.rb +81 -71
- data/lib/faraday.rb +187 -68
- data/script/console +7 -0
- data/script/proxy-server +1 -0
- data/script/release +6 -3
- data/script/test +4 -2
- data/test/adapters/em_http_test.rb +6 -1
- data/test/adapters/em_synchrony_test.rb +7 -1
- data/test/adapters/httpclient_test.rb +21 -0
- data/test/adapters/integration.rb +23 -8
- data/test/adapters/logger_test.rb +1 -1
- data/test/adapters/net_http_persistent_test.rb +10 -1
- data/test/adapters/net_http_test.rb +0 -31
- data/test/adapters/patron_test.rb +4 -1
- data/test/adapters/test_middleware_test.rb +48 -4
- data/test/adapters/typhoeus_test.rb +8 -1
- data/test/authentication_middleware_test.rb +2 -2
- data/test/connection_test.rb +160 -84
- data/test/env_test.rb +51 -24
- data/test/helper.rb +13 -13
- data/test/live_server.rb +8 -0
- data/test/middleware/instrumentation_test.rb +88 -0
- data/test/middleware/retry_test.rb +88 -35
- data/test/middleware_stack_test.rb +13 -12
- data/test/options_test.rb +252 -0
- data/test/request_middleware_test.rb +11 -1
- data/test/response_middleware_test.rb +2 -4
- data/test/strawberry.rb +2 -0
- data/test/utils_test.rb +34 -6
- metadata +71 -11
- data/test/parameters_test.rb +0 -24
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.expand_path("../../helper", __FILE__)
|
2
|
+
|
3
|
+
module Middleware
|
4
|
+
class InstrumentationTest < Faraday::TestCase
|
5
|
+
def setup
|
6
|
+
@instrumenter = FakeInstrumenter.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_default_name
|
10
|
+
assert_equal 'request.faraday', options.name
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_default_instrumenter
|
14
|
+
begin
|
15
|
+
instrumenter = options.instrumenter
|
16
|
+
rescue NameError => err
|
17
|
+
assert_match 'ActiveSupport', err.to_s
|
18
|
+
else
|
19
|
+
assert_equal ActiveSupport::Notifications, instrumenter
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_name
|
24
|
+
assert_equal 'booya', options(:name => 'booya').name
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_instrumenter
|
28
|
+
assert_equal :boom, options(:instrumenter => :boom).instrumenter
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_instrumentation_with_default_name
|
32
|
+
assert_equal 0, @instrumenter.instrumentations.size
|
33
|
+
|
34
|
+
faraday = conn
|
35
|
+
res = faraday.get '/'
|
36
|
+
assert_equal 'ok', res.body
|
37
|
+
|
38
|
+
assert_equal 1, @instrumenter.instrumentations.size
|
39
|
+
name, env = @instrumenter.instrumentations.first
|
40
|
+
assert_equal 'request.faraday', name
|
41
|
+
assert_equal '/', env[:url].path
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_instrumentation
|
45
|
+
assert_equal 0, @instrumenter.instrumentations.size
|
46
|
+
|
47
|
+
faraday = conn :name => 'booya'
|
48
|
+
res = faraday.get '/'
|
49
|
+
assert_equal 'ok', res.body
|
50
|
+
|
51
|
+
assert_equal 1, @instrumenter.instrumentations.size
|
52
|
+
name, env = @instrumenter.instrumentations.first
|
53
|
+
assert_equal 'booya', name
|
54
|
+
assert_equal '/', env[:url].path
|
55
|
+
end
|
56
|
+
|
57
|
+
class FakeInstrumenter
|
58
|
+
attr_reader :instrumentations
|
59
|
+
|
60
|
+
def initialize
|
61
|
+
@instrumentations = []
|
62
|
+
end
|
63
|
+
|
64
|
+
def instrument(name, env)
|
65
|
+
@instrumentations << [name, env]
|
66
|
+
yield
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def options(hash = nil)
|
71
|
+
Faraday::Request::Instrumentation::Options.from hash
|
72
|
+
end
|
73
|
+
|
74
|
+
def conn(hash = nil)
|
75
|
+
hash ||= {}
|
76
|
+
hash[:instrumenter] = @instrumenter
|
77
|
+
|
78
|
+
Faraday.new do |f|
|
79
|
+
f.request :instrumentation, hash
|
80
|
+
f.adapter :test do |stub|
|
81
|
+
stub.get '/' do
|
82
|
+
[200, {}, 'ok']
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -1,56 +1,109 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../../helper", __FILE__)
|
2
2
|
|
3
3
|
module Middleware
|
4
4
|
class RetryTest < Faraday::TestCase
|
5
5
|
def setup
|
6
|
-
@
|
7
|
-
@conn = Faraday.new do |b|
|
8
|
-
b.request :retry, 2
|
9
|
-
b.use ContentValidator
|
10
|
-
b.adapter :test, @stubs
|
11
|
-
end
|
6
|
+
@times_called = 0
|
12
7
|
end
|
13
8
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
def conn(*retry_args)
|
10
|
+
Faraday.new do |b|
|
11
|
+
b.request :retry, *retry_args
|
12
|
+
b.adapter :test do |stub|
|
13
|
+
stub.post('/unstable') {
|
14
|
+
@times_called += 1
|
15
|
+
@explode.call @times_called
|
16
|
+
}
|
17
|
+
end
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
22
|
-
def
|
23
|
-
|
21
|
+
def test_unhandled_error
|
22
|
+
@explode = lambda {|n| raise "boom!" }
|
23
|
+
assert_raises(RuntimeError) { conn.post("/unstable") }
|
24
|
+
assert_equal 1, @times_called
|
25
|
+
end
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
def test_handled_error
|
28
|
+
@explode = lambda {|n| raise Errno::ETIMEDOUT }
|
29
|
+
assert_raises(Errno::ETIMEDOUT) { conn.post("/unstable") }
|
30
|
+
assert_equal 3, @times_called
|
31
|
+
end
|
29
32
|
|
30
|
-
|
31
|
-
|
33
|
+
def test_legacy_max_retries
|
34
|
+
@explode = lambda {|n| raise Errno::ETIMEDOUT }
|
35
|
+
assert_raises(Errno::ETIMEDOUT) { conn(1).post("/unstable") }
|
36
|
+
assert_equal 2, @times_called
|
32
37
|
end
|
33
38
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
39
|
+
def test_new_max_retries
|
40
|
+
@explode = lambda {|n| raise Errno::ETIMEDOUT }
|
41
|
+
assert_raises(Errno::ETIMEDOUT) { conn(:max => 3).post("/unstable") }
|
42
|
+
assert_equal 4, @times_called
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_interval
|
46
|
+
@explode = lambda {|n| raise Errno::ETIMEDOUT }
|
47
|
+
started = Time.now
|
48
|
+
assert_raises(Errno::ETIMEDOUT) {
|
49
|
+
conn(:max => 2, :interval => 0.1).post("/unstable")
|
50
|
+
}
|
51
|
+
assert_in_delta 0.2, Time.now - started, 0.04
|
52
|
+
end
|
37
53
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
54
|
+
def test_calls_sleep_amount
|
55
|
+
explode_app = MiniTest::Mock.new
|
56
|
+
explode_app.expect(:call, nil, [{:body=>nil}])
|
57
|
+
def explode_app.call(env)
|
58
|
+
raise Errno::ETIMEDOUT
|
59
|
+
end
|
60
|
+
|
61
|
+
retry_middleware = Faraday::Request::Retry.new(explode_app)
|
62
|
+
class << retry_middleware
|
63
|
+
attr_accessor :sleep_amount_retries
|
64
|
+
|
65
|
+
def sleep_amount(retries)
|
66
|
+
self.sleep_amount_retries.delete(retries)
|
67
|
+
0
|
45
68
|
end
|
46
69
|
end
|
70
|
+
retry_middleware.sleep_amount_retries = [2, 1]
|
71
|
+
|
72
|
+
assert_raises(Errno::ETIMEDOUT) {
|
73
|
+
retry_middleware.call({})
|
74
|
+
}
|
75
|
+
|
76
|
+
assert_empty retry_middleware.sleep_amount_retries
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_exponential_backoff
|
80
|
+
middleware = Faraday::Request::Retry.new(nil, :max => 5, :interval => 0.1, :backoff_factor => 2)
|
81
|
+
assert_equal middleware.sleep_amount(5), 0.1
|
82
|
+
assert_equal middleware.sleep_amount(4), 0.2
|
83
|
+
assert_equal middleware.sleep_amount(3), 0.4
|
84
|
+
end
|
47
85
|
|
48
|
-
|
49
|
-
|
86
|
+
def test_random_additional_interval_amount
|
87
|
+
middleware = Faraday::Request::Retry.new(nil, :max => 2, :interval => 0.1, :interval_randomness => 1.0)
|
88
|
+
sleep_amount = middleware.sleep_amount(2)
|
89
|
+
assert_operator sleep_amount, :>=, 0.1
|
90
|
+
assert_operator sleep_amount, :<=, 0.2
|
91
|
+
middleware = Faraday::Request::Retry.new(nil, :max => 2, :interval => 0.1, :interval_randomness => 0.5)
|
92
|
+
sleep_amount = middleware.sleep_amount(2)
|
93
|
+
assert_operator sleep_amount, :>=, 0.1
|
94
|
+
assert_operator sleep_amount, :<=, 0.15
|
95
|
+
middleware = Faraday::Request::Retry.new(nil, :max => 2, :interval => 0.1, :interval_randomness => 0.25)
|
96
|
+
sleep_amount = middleware.sleep_amount(2)
|
97
|
+
assert_operator sleep_amount, :>=, 0.1
|
98
|
+
assert_operator sleep_amount, :<=, 0.125
|
99
|
+
end
|
50
100
|
|
51
|
-
|
52
|
-
|
53
|
-
|
101
|
+
def test_custom_exceptions
|
102
|
+
@explode = lambda {|n| raise "boom!" }
|
103
|
+
assert_raises(RuntimeError) {
|
104
|
+
conn(:exceptions => StandardError).post("/unstable")
|
105
|
+
}
|
106
|
+
assert_equal 3, @times_called
|
54
107
|
end
|
55
108
|
end
|
56
109
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
class MiddlewareStackTest < Faraday::TestCase
|
4
4
|
# mock handler classes
|
@@ -75,7 +75,7 @@ class MiddlewareStackTest < Faraday::TestCase
|
|
75
75
|
@conn.get('/')
|
76
76
|
assert @builder.locked?
|
77
77
|
|
78
|
-
assert_raises Faraday::
|
78
|
+
assert_raises Faraday::RackBuilder::StackLocked do
|
79
79
|
@conn.use Orange
|
80
80
|
end
|
81
81
|
end
|
@@ -95,16 +95,16 @@ class MiddlewareStackTest < Faraday::TestCase
|
|
95
95
|
build_stack Apple
|
96
96
|
assert_equal @builder.handlers.first, Apple
|
97
97
|
assert_equal @builder.handlers[0,1], [Apple]
|
98
|
-
assert_equal @builder.handlers.first, Faraday::
|
98
|
+
assert_equal @builder.handlers.first, Faraday::RackBuilder::Handler.new(Apple)
|
99
99
|
end
|
100
100
|
|
101
101
|
def test_unregistered_symbol
|
102
|
-
err =
|
102
|
+
err = assert_raises(Faraday::Error){ build_stack :apple }
|
103
103
|
assert_equal ":apple is not registered on Faraday::Middleware", err.message
|
104
104
|
end
|
105
105
|
|
106
106
|
def test_registered_symbol
|
107
|
-
Faraday.register_middleware :apple => Apple
|
107
|
+
Faraday::Middleware.register_middleware :apple => Apple
|
108
108
|
begin
|
109
109
|
build_stack :apple
|
110
110
|
assert_handlers %w[Apple]
|
@@ -114,7 +114,7 @@ class MiddlewareStackTest < Faraday::TestCase
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def test_registered_symbol_with_proc
|
117
|
-
Faraday.register_middleware :apple => lambda { Apple }
|
117
|
+
Faraday::Middleware.register_middleware :apple => lambda { Apple }
|
118
118
|
begin
|
119
119
|
build_stack :apple
|
120
120
|
assert_handlers %w[Apple]
|
@@ -123,13 +123,14 @@ class MiddlewareStackTest < Faraday::TestCase
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
-
def
|
127
|
-
Faraday.register_middleware
|
126
|
+
def test_registered_symbol_with_array
|
127
|
+
Faraday::Middleware.register_middleware File.expand_path("..", __FILE__),
|
128
|
+
:strawberry => [lambda { Strawberry }, 'strawberry']
|
128
129
|
begin
|
129
|
-
build_stack
|
130
|
-
assert_handlers %w[
|
130
|
+
build_stack :strawberry
|
131
|
+
assert_handlers %w[Strawberry]
|
131
132
|
ensure
|
132
|
-
unregister_middleware Faraday::
|
133
|
+
unregister_middleware Faraday::Middleware, :strawberry
|
133
134
|
end
|
134
135
|
end
|
135
136
|
|
@@ -148,7 +149,7 @@ class MiddlewareStackTest < Faraday::TestCase
|
|
148
149
|
def build_stack(*handlers)
|
149
150
|
@builder.build do |b|
|
150
151
|
handlers.each { |handler| b.use(*handler) }
|
151
|
-
yield
|
152
|
+
yield(b) if block_given?
|
152
153
|
|
153
154
|
b.adapter :test do |stub|
|
154
155
|
stub.get '/' do |env|
|
@@ -0,0 +1,252 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class OptionsTest < Faraday::TestCase
|
4
|
+
class SubOptions < Faraday::Options.new(:sub); end
|
5
|
+
class ParentOptions < Faraday::Options.new(:a, :b, :c)
|
6
|
+
options :c => SubOptions
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_clear
|
10
|
+
options = SubOptions.new(1)
|
11
|
+
assert !options.empty?
|
12
|
+
assert options.clear
|
13
|
+
assert options.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_empty
|
17
|
+
options = SubOptions.new
|
18
|
+
assert options.empty?
|
19
|
+
options.sub = 1
|
20
|
+
assert !options.empty?
|
21
|
+
options.delete(:sub)
|
22
|
+
assert options.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_each_key
|
26
|
+
options = ParentOptions.new(1, 2, 3)
|
27
|
+
enum = options.each_key
|
28
|
+
assert_equal enum.next.to_sym, :a
|
29
|
+
assert_equal enum.next.to_sym, :b
|
30
|
+
assert_equal enum.next.to_sym, :c
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_key?
|
34
|
+
options = SubOptions.new
|
35
|
+
assert !options.key?(:sub)
|
36
|
+
options.sub = 1
|
37
|
+
if RUBY_VERSION >= '1.9'
|
38
|
+
assert options.key?(:sub)
|
39
|
+
else
|
40
|
+
assert options.key?("sub")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_each_value
|
45
|
+
options = ParentOptions.new(1, 2, 3)
|
46
|
+
enum = options.each_value
|
47
|
+
assert_equal enum.next, 1
|
48
|
+
assert_equal enum.next, 2
|
49
|
+
assert_equal enum.next, 3
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_value?
|
53
|
+
options = SubOptions.new
|
54
|
+
assert !options.value?(1)
|
55
|
+
options.sub = 1
|
56
|
+
assert options.value?(1)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_request_proxy_setter
|
60
|
+
options = Faraday::RequestOptions.new
|
61
|
+
assert_nil options.proxy
|
62
|
+
|
63
|
+
assert_raises NoMethodError do
|
64
|
+
options[:proxy] = {:booya => 1}
|
65
|
+
end
|
66
|
+
|
67
|
+
options[:proxy] = {:user => 'user'}
|
68
|
+
assert_kind_of Faraday::ProxyOptions, options.proxy
|
69
|
+
assert_equal 'user', options.proxy.user
|
70
|
+
|
71
|
+
options.proxy = nil
|
72
|
+
assert_nil options.proxy
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_proxy_options_from_string
|
76
|
+
options = Faraday::ProxyOptions.from 'http://user:pass@example.org'
|
77
|
+
assert_equal 'user', options.user
|
78
|
+
assert_equal 'pass', options.password
|
79
|
+
assert_kind_of URI, options.uri
|
80
|
+
assert_equal '', options.path
|
81
|
+
assert_equal 80, options.port
|
82
|
+
assert_equal 'example.org', options.host
|
83
|
+
assert_equal 'http', options.scheme
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_proxy_options_hash_access
|
87
|
+
proxy = Faraday::ProxyOptions.from 'http://a%40b:pw%20d@example.org'
|
88
|
+
assert_equal 'a@b', proxy[:user]
|
89
|
+
assert_equal 'a@b', proxy.user
|
90
|
+
assert_equal 'pw d', proxy[:password]
|
91
|
+
assert_equal 'pw d', proxy.password
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_proxy_options_no_auth
|
95
|
+
proxy = Faraday::ProxyOptions.from 'http://example.org'
|
96
|
+
assert_nil proxy.user
|
97
|
+
assert_nil proxy.password
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_from_options
|
101
|
+
options = ParentOptions.new(1)
|
102
|
+
|
103
|
+
value = ParentOptions.from(options)
|
104
|
+
assert_equal 1, value.a
|
105
|
+
assert_nil value.b
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_from_options_with_sub_object
|
109
|
+
sub = SubOptions.new(1)
|
110
|
+
options = ParentOptions.from :a => 1, :c => sub
|
111
|
+
assert_kind_of ParentOptions, options
|
112
|
+
assert_equal 1, options.a
|
113
|
+
assert_nil options.b
|
114
|
+
assert_kind_of SubOptions, options.c
|
115
|
+
assert_equal 1, options.c.sub
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_from_hash
|
119
|
+
options = ParentOptions.from :a => 1
|
120
|
+
assert_kind_of ParentOptions, options
|
121
|
+
assert_equal 1, options.a
|
122
|
+
assert_nil options.b
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_from_hash_with_sub_object
|
126
|
+
options = ParentOptions.from :a => 1, :c => {:sub => 1}
|
127
|
+
assert_kind_of ParentOptions, options
|
128
|
+
assert_equal 1, options.a
|
129
|
+
assert_nil options.b
|
130
|
+
assert_kind_of SubOptions, options.c
|
131
|
+
assert_equal 1, options.c.sub
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_inheritance
|
135
|
+
subclass = Class.new(ParentOptions)
|
136
|
+
options = subclass.from(:c => {:sub => 'hello'})
|
137
|
+
assert_kind_of SubOptions, options.c
|
138
|
+
assert_equal 'hello', options.c.sub
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_from_deep_hash
|
142
|
+
hash = {:b => 1}
|
143
|
+
options = ParentOptions.from :a => hash
|
144
|
+
assert_equal 1, options.a[:b]
|
145
|
+
|
146
|
+
hash[:b] = 2
|
147
|
+
assert_equal 1, options.a[:b]
|
148
|
+
|
149
|
+
options.a[:b] = 3
|
150
|
+
assert_equal 2, hash[:b]
|
151
|
+
assert_equal 3, options.a[:b]
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_from_nil
|
155
|
+
options = ParentOptions.from(nil)
|
156
|
+
assert_kind_of ParentOptions, options
|
157
|
+
assert_nil options.a
|
158
|
+
assert_nil options.b
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_invalid_key
|
162
|
+
assert_raises NoMethodError do
|
163
|
+
ParentOptions.from :invalid => 1
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_update
|
168
|
+
options = ParentOptions.new(1)
|
169
|
+
assert_equal 1, options.a
|
170
|
+
assert_nil options.b
|
171
|
+
|
172
|
+
updated = options.update :a => 2, :b => 3
|
173
|
+
assert_equal 2, options.a
|
174
|
+
assert_equal 3, options.b
|
175
|
+
assert_equal options, updated
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_delete
|
179
|
+
options = ParentOptions.new(1)
|
180
|
+
assert_equal 1, options.a
|
181
|
+
assert_equal 1, options.delete(:a)
|
182
|
+
assert_nil options.a
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_merge
|
186
|
+
options = ParentOptions.new(1)
|
187
|
+
assert_equal 1, options.a
|
188
|
+
assert_nil options.b
|
189
|
+
|
190
|
+
dup = options.merge :a => 2, :b => 3
|
191
|
+
assert_equal 2, dup.a
|
192
|
+
assert_equal 3, dup.b
|
193
|
+
assert_equal 1, options.a
|
194
|
+
assert_nil options.b
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_env_access_member
|
198
|
+
e = Faraday::Env.new
|
199
|
+
assert_nil e.method
|
200
|
+
e.method = :get
|
201
|
+
assert_equal :get, e.method
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_env_access_symbol_non_member
|
205
|
+
e = Faraday::Env.new
|
206
|
+
assert_nil e[:custom]
|
207
|
+
e[:custom] = :boom
|
208
|
+
assert_equal :boom, e[:custom]
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_env_access_string_non_member
|
212
|
+
e = Faraday::Env.new
|
213
|
+
assert_nil e["custom"]
|
214
|
+
e["custom"] = :boom
|
215
|
+
assert_equal :boom, e["custom"]
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_env_fetch_ignores_false
|
219
|
+
ssl = Faraday::SSLOptions.new
|
220
|
+
ssl.verify = false
|
221
|
+
assert !ssl.fetch(:verify, true)
|
222
|
+
end
|
223
|
+
|
224
|
+
def test_fetch_grabs_value
|
225
|
+
opt = Faraday::SSLOptions.new
|
226
|
+
opt.verify = 1
|
227
|
+
assert_equal 1, opt.fetch(:verify, false) { |k| :blah }
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_fetch_uses_falsey_default
|
231
|
+
opt = Faraday::SSLOptions.new
|
232
|
+
assert_equal false, opt.fetch(:verify, false) { |k| :blah }
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_fetch_accepts_block
|
236
|
+
opt = Faraday::SSLOptions.new
|
237
|
+
assert_equal "yo :verify", opt.fetch(:verify) { |k| "yo #{k.inspect}"}
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_fetch_needs_a_default_if_key_is_missing
|
241
|
+
opt = Faraday::SSLOptions.new
|
242
|
+
assert_raises Faraday::Options.fetch_error_class do
|
243
|
+
opt.fetch :verify
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_fetch_works_with_key
|
248
|
+
opt = Faraday::SSLOptions.new
|
249
|
+
opt.verify = 1
|
250
|
+
assert_equal 1, opt.fetch(:verify)
|
251
|
+
end
|
252
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require File.expand_path(
|
2
|
+
require File.expand_path('../helper', __FILE__)
|
3
3
|
|
4
4
|
Faraday::CompositeReadIO.class_eval { attr_reader :ios }
|
5
5
|
|
@@ -62,6 +62,16 @@ class RequestMiddlewareTest < Faraday::TestCase
|
|
62
62
|
assert_equal expected, Faraday::Utils.parse_nested_query(response.body)
|
63
63
|
end
|
64
64
|
|
65
|
+
def test_url_encoded_non_nested
|
66
|
+
response = @conn.post('/echo', { :dimensions => ['date', 'location']}) do |req|
|
67
|
+
req.options.params_encoder = Faraday::FlatParamsEncoder
|
68
|
+
end
|
69
|
+
assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
|
70
|
+
expected = { 'dimensions' => ['date', 'location'] }
|
71
|
+
assert_equal expected, Faraday::Utils.parse_query(response.body)
|
72
|
+
assert_equal 'dimensions=date&dimensions=location', response.body
|
73
|
+
end
|
74
|
+
|
65
75
|
def test_url_encoded_unicode
|
66
76
|
err = capture_warnings {
|
67
77
|
response = @conn.post('/echo', {:str => "eé cç aã aâ"})
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
class ResponseMiddlewareTest < Faraday::TestCase
|
4
4
|
def setup
|
@@ -19,9 +19,7 @@ class ResponseMiddlewareTest < Faraday::TestCase
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_success
|
22
|
-
|
23
|
-
@conn.get('ok')
|
24
|
-
end
|
22
|
+
assert @conn.get('ok')
|
25
23
|
end
|
26
24
|
|
27
25
|
def test_raises_not_found
|
data/test/strawberry.rb
ADDED
data/test/utils_test.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
class TestUtils < Faraday::TestCase
|
4
|
+
def setup
|
5
|
+
@url = "http://example.com/abc"
|
6
|
+
end
|
4
7
|
|
5
8
|
# emulates ActiveSupport::SafeBuffer#gsub
|
6
9
|
FakeSafeBuffer = Struct.new(:string) do
|
@@ -8,7 +11,7 @@ class TestUtils < Faraday::TestCase
|
|
8
11
|
def gsub(regex)
|
9
12
|
string.gsub(regex) {
|
10
13
|
match, = $&, '' =~ /a/
|
11
|
-
yield
|
14
|
+
yield(match)
|
12
15
|
}
|
13
16
|
end
|
14
17
|
end
|
@@ -18,13 +21,38 @@ class TestUtils < Faraday::TestCase
|
|
18
21
|
assert_equal '%2432%2C000.00', Faraday::Utils.escape(str)
|
19
22
|
end
|
20
23
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
+
def test_parses_with_default
|
25
|
+
with_default_uri_parser(nil) do
|
26
|
+
uri = normalize(@url)
|
27
|
+
assert_equal 'example.com', uri.host
|
28
|
+
end
|
29
|
+
end
|
24
30
|
|
25
|
-
|
31
|
+
def test_parses_with_URI
|
32
|
+
with_default_uri_parser(::URI) do
|
33
|
+
uri = normalize(@url)
|
34
|
+
assert_equal 'example.com', uri.host
|
35
|
+
end
|
36
|
+
end
|
26
37
|
|
27
|
-
|
38
|
+
def test_parses_with_block
|
39
|
+
with_default_uri_parser(lambda {|u| "booya#{"!" * u.size}" }) do
|
40
|
+
assert_equal 'booya!!!!!!!!!!!!!!!!!!!!!!', normalize(@url)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def normalize(url)
|
45
|
+
Faraday::Utils::URI(url)
|
46
|
+
end
|
47
|
+
|
48
|
+
def with_default_uri_parser(parser)
|
49
|
+
old_parser = Faraday::Utils.default_uri_parser
|
50
|
+
begin
|
51
|
+
Faraday::Utils.default_uri_parser = parser
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
Faraday::Utils.default_uri_parser = old_parser
|
55
|
+
end
|
28
56
|
end
|
29
57
|
end
|
30
58
|
|