faraday 0.7.4 → 1.0.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.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +276 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +40 -153
  5. data/Rakefile +4 -139
  6. data/examples/client_spec.rb +65 -0
  7. data/examples/client_test.rb +79 -0
  8. data/lib/faraday/adapter/em_http.rb +286 -0
  9. data/lib/faraday/adapter/em_http_ssl_patch.rb +62 -0
  10. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +69 -0
  11. data/lib/faraday/adapter/em_synchrony.rb +120 -36
  12. data/lib/faraday/adapter/excon.rb +108 -12
  13. data/lib/faraday/adapter/httpclient.rb +152 -0
  14. data/lib/faraday/adapter/net_http.rb +187 -43
  15. data/lib/faraday/adapter/net_http_persistent.rb +91 -0
  16. data/lib/faraday/adapter/patron.rb +106 -10
  17. data/lib/faraday/adapter/rack.rb +75 -0
  18. data/lib/faraday/adapter/test.rb +160 -61
  19. data/lib/faraday/adapter/typhoeus.rb +7 -46
  20. data/lib/faraday/adapter.rb +105 -33
  21. data/lib/faraday/adapter_registry.rb +30 -0
  22. data/lib/faraday/autoload.rb +95 -0
  23. data/lib/faraday/connection.rb +525 -157
  24. data/lib/faraday/dependency_loader.rb +37 -0
  25. data/lib/faraday/encoders/flat_params_encoder.rb +98 -0
  26. data/lib/faraday/encoders/nested_params_encoder.rb +171 -0
  27. data/lib/faraday/error.rb +122 -30
  28. data/lib/faraday/file_part.rb +128 -0
  29. data/lib/faraday/logging/formatter.rb +105 -0
  30. data/lib/faraday/middleware.rb +14 -22
  31. data/lib/faraday/middleware_registry.rb +129 -0
  32. data/lib/faraday/options/connection_options.rb +22 -0
  33. data/lib/faraday/options/env.rb +181 -0
  34. data/lib/faraday/options/proxy_options.rb +28 -0
  35. data/lib/faraday/options/request_options.rb +22 -0
  36. data/lib/faraday/options/ssl_options.rb +59 -0
  37. data/lib/faraday/options.rb +222 -0
  38. data/lib/faraday/param_part.rb +53 -0
  39. data/lib/faraday/parameters.rb +5 -0
  40. data/lib/faraday/rack_builder.rb +248 -0
  41. data/lib/faraday/request/authorization.rb +55 -0
  42. data/lib/faraday/request/basic_authentication.rb +20 -0
  43. data/lib/faraday/request/instrumentation.rb +54 -0
  44. data/lib/faraday/request/multipart.rb +84 -48
  45. data/lib/faraday/request/retry.rb +239 -0
  46. data/lib/faraday/request/token_authentication.rb +20 -0
  47. data/lib/faraday/request/url_encoded.rb +46 -27
  48. data/lib/faraday/request.rb +112 -50
  49. data/lib/faraday/response/logger.rb +24 -25
  50. data/lib/faraday/response/raise_error.rb +40 -11
  51. data/lib/faraday/response.rb +44 -35
  52. data/lib/faraday/utils/headers.rb +139 -0
  53. data/lib/faraday/utils/params_hash.rb +61 -0
  54. data/lib/faraday/utils.rb +72 -117
  55. data/lib/faraday.rb +142 -64
  56. data/spec/external_adapters/faraday_specs_setup.rb +14 -0
  57. data/spec/faraday/adapter/em_http_spec.rb +47 -0
  58. data/spec/faraday/adapter/em_synchrony_spec.rb +16 -0
  59. data/spec/faraday/adapter/excon_spec.rb +49 -0
  60. data/spec/faraday/adapter/httpclient_spec.rb +73 -0
  61. data/spec/faraday/adapter/net_http_persistent_spec.rb +57 -0
  62. data/spec/faraday/adapter/net_http_spec.rb +64 -0
  63. data/spec/faraday/adapter/patron_spec.rb +18 -0
  64. data/spec/faraday/adapter/rack_spec.rb +8 -0
  65. data/spec/faraday/adapter/typhoeus_spec.rb +7 -0
  66. data/spec/faraday/adapter_registry_spec.rb +28 -0
  67. data/spec/faraday/adapter_spec.rb +55 -0
  68. data/spec/faraday/composite_read_io_spec.rb +80 -0
  69. data/spec/faraday/connection_spec.rb +691 -0
  70. data/spec/faraday/error_spec.rb +45 -0
  71. data/spec/faraday/middleware_spec.rb +26 -0
  72. data/spec/faraday/options/env_spec.rb +70 -0
  73. data/spec/faraday/options/options_spec.rb +297 -0
  74. data/spec/faraday/options/proxy_options_spec.rb +37 -0
  75. data/spec/faraday/options/request_options_spec.rb +19 -0
  76. data/spec/faraday/params_encoders/flat_spec.rb +34 -0
  77. data/spec/faraday/params_encoders/nested_spec.rb +134 -0
  78. data/spec/faraday/rack_builder_spec.rb +196 -0
  79. data/spec/faraday/request/authorization_spec.rb +88 -0
  80. data/spec/faraday/request/instrumentation_spec.rb +76 -0
  81. data/spec/faraday/request/multipart_spec.rb +274 -0
  82. data/spec/faraday/request/retry_spec.rb +242 -0
  83. data/spec/faraday/request/url_encoded_spec.rb +83 -0
  84. data/spec/faraday/request_spec.rb +109 -0
  85. data/spec/faraday/response/logger_spec.rb +220 -0
  86. data/spec/faraday/response/middleware_spec.rb +68 -0
  87. data/spec/faraday/response/raise_error_spec.rb +106 -0
  88. data/spec/faraday/response_spec.rb +75 -0
  89. data/spec/faraday/utils/headers_spec.rb +82 -0
  90. data/spec/faraday/utils_spec.rb +56 -0
  91. data/spec/faraday_spec.rb +37 -0
  92. data/spec/spec_helper.rb +132 -0
  93. data/spec/support/disabling_stub.rb +14 -0
  94. data/spec/support/fake_safe_buffer.rb +15 -0
  95. data/spec/support/helper_methods.rb +133 -0
  96. data/spec/support/shared_examples/adapter.rb +104 -0
  97. data/spec/support/shared_examples/params_encoder.rb +18 -0
  98. data/spec/support/shared_examples/request_method.rb +234 -0
  99. data/spec/support/streaming_response_checker.rb +35 -0
  100. data/spec/support/webmock_rack_app.rb +68 -0
  101. metadata +126 -126
  102. data/Gemfile +0 -29
  103. data/config.ru +0 -6
  104. data/faraday.gemspec +0 -92
  105. data/lib/faraday/adapter/action_dispatch.rb +0 -29
  106. data/lib/faraday/builder.rb +0 -160
  107. data/lib/faraday/request/json.rb +0 -35
  108. data/lib/faraday/upload_io.rb +0 -23
  109. data/test/adapters/live_test.rb +0 -205
  110. data/test/adapters/logger_test.rb +0 -37
  111. data/test/adapters/net_http_test.rb +0 -33
  112. data/test/adapters/test_middleware_test.rb +0 -70
  113. data/test/connection_test.rb +0 -254
  114. data/test/env_test.rb +0 -158
  115. data/test/helper.rb +0 -41
  116. data/test/live_server.rb +0 -45
  117. data/test/middleware_stack_test.rb +0 -118
  118. data/test/request_middleware_test.rb +0 -116
  119. data/test/response_middleware_test.rb +0 -74
data/test/env_test.rb DELETED
@@ -1,158 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
-
3
- class EnvTest < Faraday::TestCase
4
- def setup
5
- @conn = Faraday.new :url => 'http://sushi.com/api',
6
- :headers => {'Mime-Version' => '1.0'},
7
- :request => {:oauth => {:consumer_key => 'anonymous'}}
8
-
9
- @conn.options[:timeout] = 3
10
- @conn.options[:open_timeout] = 5
11
- @conn.ssl[:verify] = false
12
- @conn.proxy 'http://proxy.com'
13
- end
14
-
15
- def test_request_create_stores_method
16
- env = make_env(:get)
17
- assert_equal :get, env[:method]
18
- end
19
-
20
- def test_request_create_stores_addressable_uri
21
- env = make_env do |req|
22
- req.url 'foo.json', 'a' => 1
23
- end
24
- assert_equal 'http://sushi.com/api/foo.json?a=1', env[:url].to_s
25
- end
26
-
27
- def test_request_create_stores_headers
28
- env = make_env do |req|
29
- req['Server'] = 'Faraday'
30
- end
31
- headers = env[:request_headers]
32
- assert_equal '1.0', headers['mime-version']
33
- assert_equal 'Faraday', headers['server']
34
- end
35
-
36
- def test_request_create_stores_body
37
- env = make_env do |req|
38
- req.body = 'hi'
39
- end
40
- assert_equal 'hi', env[:body]
41
- end
42
-
43
- def test_global_request_options
44
- env = make_env
45
- assert_equal 3, env[:request][:timeout]
46
- assert_equal 5, env[:request][:open_timeout]
47
- end
48
-
49
- def test_per_request_options
50
- env = make_env do |req|
51
- req.options[:timeout] = 10
52
- req.options[:custom] = true
53
- req.options[:oauth] = {:consumer_secret => 'xyz'}
54
- end
55
- assert_equal 10, env[:request][:timeout]
56
- assert_equal 5, env[:request][:open_timeout]
57
- assert_equal true, env[:request][:custom]
58
-
59
- oauth_expected = {:consumer_secret => 'xyz', :consumer_key => 'anonymous'}
60
- assert_equal oauth_expected, env[:request][:oauth]
61
- end
62
-
63
- def test_request_create_stores_ssl_options
64
- env = make_env
65
- assert_equal false, env[:ssl][:verify]
66
- end
67
-
68
- def test_request_create_stores_proxy_options
69
- env = make_env
70
- assert_equal 'proxy.com', env[:request][:proxy][:uri].host
71
- end
72
-
73
- private
74
-
75
- def make_env(method = :get, connection = @conn, &block)
76
- request = Faraday::Request.create(method, &block)
77
- request.to_env(connection)
78
- end
79
- end
80
-
81
- class HeadersTest < Faraday::TestCase
82
- def setup
83
- @headers = Faraday::Utils::Headers.new
84
- end
85
-
86
- def test_parse_response_headers_leaves_http_status_line_out
87
- @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
88
- assert_equal %w(Content-Type), @headers.keys
89
- end
90
-
91
- def test_parse_response_headers_parses_lower_cased_header_name_and_value
92
- @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
93
- assert_equal 'text/html', @headers['content-type']
94
- end
95
-
96
- def test_parse_response_headers_parses_lower_cased_header_name_and_value_with_colon
97
- @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLocation: http://sushi.com/\r\n\r\n")
98
- assert_equal 'http://sushi.com/', @headers['location']
99
- end
100
-
101
- def test_parse_response_headers_parses_blank_lines
102
- @headers.parse("HTTP/1.1 200 OK\r\n\r\nContent-Type: text/html\r\n\r\n")
103
- assert_equal 'text/html', @headers['content-type']
104
- end
105
- end
106
-
107
- class ResponseTest < Faraday::TestCase
108
- def setup
109
- @env = {
110
- :status => 404, :body => 'yikes',
111
- :response_headers => Faraday::Utils::Headers.new('Content-Type' => 'text/plain')
112
- }
113
- @response = Faraday::Response.new @env
114
- end
115
-
116
- def test_finished
117
- assert @response.finished?
118
- end
119
-
120
- def test_error_on_finish
121
- assert_raises RuntimeError do
122
- @response.finish({})
123
- end
124
- end
125
-
126
- def test_not_success
127
- assert !@response.success?
128
- end
129
-
130
- def test_status
131
- assert_equal 404, @response.status
132
- end
133
-
134
- def test_body
135
- assert_equal 'yikes', @response.body
136
- end
137
-
138
- def test_headers
139
- assert_equal 'text/plain', @response.headers['Content-Type']
140
- assert_equal 'text/plain', @response['content-type']
141
- end
142
-
143
- def test_apply_request
144
- @response.apply_request :body => 'a=b', :method => :post
145
- assert_equal 'yikes', @response.body
146
- assert_equal :post, @response.env[:method]
147
- end
148
-
149
- def test_marshal
150
- @response = Faraday::Response.new
151
- @response.on_complete { }
152
- @response.finish @env.merge(:custom => 'moo')
153
-
154
- loaded = Marshal.load Marshal.dump(@response)
155
- assert_nil loaded.env[:custom]
156
- assert_equal %w[body response_headers status], loaded.env.keys.map { |k| k.to_s }.sort
157
- end
158
- end
data/test/helper.rb DELETED
@@ -1,41 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
-
4
- if ENV['LEFTRIGHT']
5
- begin
6
- require 'leftright'
7
- rescue LoadError
8
- puts "Run `gem install leftright` to install leftright."
9
- end
10
- end
11
-
12
- unless $LOAD_PATH.include? 'lib'
13
- $LOAD_PATH.unshift(File.dirname(__FILE__))
14
- $LOAD_PATH.unshift(File.join($LOAD_PATH.first, '..', 'lib'))
15
- end
16
- require 'faraday'
17
-
18
- begin
19
- require 'ruby-debug'
20
- rescue LoadError
21
- # ignore
22
- else
23
- Debugger.start
24
- end
25
-
26
- module Faraday
27
- class TestCase < Test::Unit::TestCase
28
- LIVE_SERVER = case ENV['LIVE']
29
- when /^http/ then ENV['LIVE']
30
- when nil then nil
31
- else 'http://localhost:4567'
32
- end
33
-
34
- def test_default
35
- assert true
36
- end unless defined? ::MiniTest
37
- end
38
- end
39
-
40
- require 'webmock/test_unit'
41
- WebMock.disable_net_connect!(:allow => Faraday::TestCase::LIVE_SERVER)
data/test/live_server.rb DELETED
@@ -1,45 +0,0 @@
1
- require 'sinatra'
2
- set :logging, false
3
-
4
- get '/hello_world' do
5
- 'hello world'
6
- end
7
-
8
- get '/json' do
9
- content_type 'application/json'
10
- "[1,2,3]"
11
- end
12
-
13
- post '/file' do
14
- if params[:uploaded_file].respond_to? :each_key
15
- "file %s %s" % [
16
- params[:uploaded_file][:filename],
17
- params[:uploaded_file][:type]]
18
- else
19
- status 400
20
- end
21
- end
22
-
23
- [:get, :post].each do |method|
24
- send(method, '/hello') do
25
- "hello #{params[:name]}"
26
- end
27
- end
28
-
29
- %w[POST PUT PATCH].each do |http_method|
30
- settings.send(:route, http_method, '/echo_name') do
31
- params[:name].inspect
32
- end
33
- end
34
-
35
- options '/options' do
36
- 'hi'
37
- end
38
-
39
- delete '/delete_with_json' do
40
- %/{"deleted":true}/
41
- end
42
-
43
- get '/multi' do
44
- [200, { 'Set-Cookie' => %w[ one two ] }, '']
45
- end
@@ -1,118 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
-
3
- class MiddlewareStackTest < Faraday::TestCase
4
- # mock handler classes
5
- class Handler < Struct.new(:app)
6
- def call(env)
7
- (env[:request_headers]['X-Middleware'] ||= '') << ":#{self.class.name.split('::').last}"
8
- app.call(env)
9
- end
10
- end
11
- class Apple < Handler; end
12
- class Orange < Handler; end
13
- class Banana < Handler; end
14
-
15
- def setup
16
- @conn = Faraday::Connection.new
17
- @builder = @conn.builder
18
- end
19
-
20
- def test_sets_default_adapter_if_none_set
21
- default_middleware = Faraday::Request.lookup_module :url_encoded
22
- default_adapter_klass = Faraday::Adapter.lookup_module Faraday.default_adapter
23
- assert @builder[0] == default_middleware
24
- assert @builder[1] == default_adapter_klass
25
- end
26
-
27
- def test_allows_rebuilding
28
- build_stack Apple
29
- build_stack Orange
30
- assert_handlers %w[Orange]
31
- end
32
-
33
- def test_allows_extending
34
- build_stack Apple
35
- @conn.use Orange
36
- assert_handlers %w[Apple Orange]
37
- end
38
-
39
- def test_builder_is_passed_to_new_faraday_connection
40
- new_conn = Faraday::Connection.new :builder => @builder
41
- assert_equal @builder, new_conn.builder
42
- end
43
-
44
- def test_insert_before
45
- build_stack Apple, Orange
46
- @builder.insert_before Apple, Banana
47
- assert_handlers %w[Banana Apple Orange]
48
- end
49
-
50
- def test_insert_after
51
- build_stack Apple, Orange
52
- @builder.insert_after Apple, Banana
53
- assert_handlers %w[Apple Banana Orange]
54
- end
55
-
56
- def test_swap_handlers
57
- build_stack Apple, Orange
58
- @builder.swap Apple, Banana
59
- assert_handlers %w[Banana Orange]
60
- end
61
-
62
- def test_delete_handler
63
- build_stack Apple, Orange
64
- @builder.delete Apple
65
- assert_handlers %w[Orange]
66
- end
67
-
68
- def test_stack_is_locked_after_making_requests
69
- build_stack Apple
70
- assert !@builder.locked?
71
- @conn.get('/')
72
- assert @builder.locked?
73
-
74
- assert_raises Faraday::Builder::StackLocked do
75
- @conn.use Orange
76
- end
77
- end
78
-
79
- def test_duped_stack_is_unlocked
80
- build_stack Apple
81
- assert !@builder.locked?
82
- @builder.lock!
83
- assert @builder.locked?
84
-
85
- duped_connection = @conn.dup
86
- assert_equal @builder, duped_connection.builder
87
- assert !duped_connection.builder.locked?
88
- end
89
-
90
- def test_handler_comparison
91
- build_stack Apple
92
- assert_equal @builder.handlers.first, Apple
93
- assert_equal @builder.handlers[0,1], [Apple]
94
- assert_equal @builder.handlers.first, Faraday::Builder::Handler.new(Apple)
95
- end
96
-
97
- private
98
-
99
- # make a stack with test adapter that reflects the order of middleware
100
- def build_stack(*handlers)
101
- @builder.build do |b|
102
- handlers.each { |handler| b.use(*handler) }
103
-
104
- b.adapter :test do |stub|
105
- stub.get '/' do |env|
106
- # echo the "X-Middleware" request header in the body
107
- [200, {}, env[:request_headers]['X-Middleware'].to_s]
108
- end
109
- end
110
- end
111
- end
112
-
113
- def assert_handlers(list)
114
- echoed_list = @conn.get('/').body.to_s.split(':')
115
- echoed_list.shift if echoed_list.first == ''
116
- assert_equal list, echoed_list
117
- end
118
- end
@@ -1,116 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
- require 'rack/utils'
3
-
4
- Faraday::CompositeReadIO.send :attr_reader, :ios
5
-
6
- class RequestMiddlewareTest < Faraday::TestCase
7
- def setup
8
- @conn = Faraday.new do |b|
9
- b.request :multipart
10
- b.request :url_encoded
11
- b.request :json
12
- b.adapter :test do |stub|
13
- stub.post('/echo') do |env|
14
- posted_as = env[:request_headers]['Content-Type']
15
- [200, {'Content-Type' => posted_as}, env[:body]]
16
- end
17
- end
18
- end
19
- end
20
-
21
- def test_does_nothing_without_payload
22
- response = @conn.post('/echo')
23
- assert_nil response.headers['Content-Type']
24
- assert response.body.empty?
25
- end
26
-
27
- def test_ignores_custom_content_type
28
- response = @conn.post('/echo', { :some => 'data' }, 'content-type' => 'application/x-foo')
29
- assert_equal 'application/x-foo', response.headers['Content-Type']
30
- assert_equal({ :some => 'data' }, response.body)
31
- end
32
-
33
- def test_json_encodes_hash
34
- response = @conn.post('/echo', { :fruit => %w[apples oranges] }, 'content-type' => 'application/json')
35
- assert_equal 'application/json', response.headers['Content-Type']
36
- assert_equal '{"fruit":["apples","oranges"]}', response.body
37
- end
38
-
39
- def test_json_skips_encoding_for_strings
40
- response = @conn.post('/echo', '{"a":"b"}', 'content-type' => 'application/json')
41
- assert_equal 'application/json', response.headers['Content-Type']
42
- assert_equal '{"a":"b"}', response.body
43
- end
44
-
45
- def test_json_fails_with_useful_message_when_no_json_adapter_available
46
- without_json_adapter do
47
- expected_msg = "No JSON adapter available. Install either activesupport or yajl-ruby."
48
- # assert_raise doesn't work to check the message (at least on 1.8.7)
49
- begin
50
- @conn.post('/echo', { :fruit => %w[apples oranges] }, 'content-type' => 'application/json')
51
- fail "Exception not raised"
52
- rescue Faraday::Error::MissingDependency => e
53
- assert_equal expected_msg, e.message
54
- end
55
- end
56
- end
57
-
58
- def test_url_encoded_does_not_fail_when_no_json_adapter_available
59
- without_json_adapter do
60
- assert_nothing_raised {
61
- @conn.post('/echo', { :fruit => %w[apples oranges] })
62
- }
63
- end
64
- end
65
-
66
- def without_json_adapter
67
- original_adapter = Faraday::Request::JSON.adapter
68
- Faraday::Request::JSON.adapter = nil
69
- begin
70
- yield
71
- ensure
72
- Faraday::Request::JSON.adapter = original_adapter
73
- end
74
- end
75
-
76
- def test_url_encoded_no_header
77
- response = @conn.post('/echo', { :fruit => %w[apples oranges] })
78
- assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
79
- assert_equal 'fruit[]=apples&fruit[]=oranges', response.body
80
- end
81
-
82
- def test_url_encoded_with_header
83
- response = @conn.post('/echo', {'a'=>123}, 'content-type' => 'application/x-www-form-urlencoded')
84
- assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
85
- assert_equal 'a=123', response.body
86
- end
87
-
88
- def test_url_encoded_nested
89
- response = @conn.post('/echo', { :user => {:name => 'Mislav', :web => 'mislav.net'} })
90
- assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
91
- expected = { 'user' => {'name' => 'Mislav', 'web' => 'mislav.net'} }
92
- assert_equal expected, Rack::Utils.parse_nested_query(response.body)
93
- end
94
-
95
- def test_multipart
96
- # assume params are out of order
97
- regexes = [
98
- /name\=\"a\"/,
99
- /name=\"b\[c\]\"\; filename\=\"request_middleware_test\.rb\"/,
100
- /name=\"b\[d\]\"/]
101
-
102
- payload = {:a => 1, :b => {:c => Faraday::UploadIO.new(__FILE__, 'text/x-ruby'), :d => 2}}
103
- response = @conn.post('/echo', payload)
104
-
105
- assert_kind_of Faraday::CompositeReadIO, response.body
106
- assert_equal "multipart/form-data;boundary=%s" % Faraday::Request::Multipart::DEFAULT_BOUNDARY,
107
- response.headers['Content-Type']
108
-
109
- response.body.send(:ios).map{|io| io.read}.each do |io|
110
- if re = regexes.detect { |r| io =~ r }
111
- regexes.delete re
112
- end
113
- end
114
- assert_equal [], regexes
115
- end
116
- end
@@ -1,74 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
-
3
- class ResponseMiddlewareTest < Faraday::TestCase
4
- def setup
5
- @conn = Faraday.new do |b|
6
- b.response :raise_error
7
- b.adapter :test do |stub|
8
- stub.get('ok') { [200, {'Content-Type' => 'text/html'}, '<body></body>'] }
9
- stub.get('not-found') { [404, {'X-Reason' => 'because'}, 'keep looking'] }
10
- stub.get('error') { [500, {'X-Error' => 'bailout'}, 'fail'] }
11
- end
12
- end
13
- end
14
-
15
- class ResponseUpcaser < Faraday::Response::Middleware
16
- def parse(body)
17
- body.upcase
18
- end
19
- end
20
-
21
- def test_success
22
- assert_nothing_raised do
23
- @conn.get('ok')
24
- end
25
- end
26
-
27
- def test_raises_not_found
28
- error = assert_raises Faraday::Error::ResourceNotFound do
29
- @conn.get('not-found')
30
- end
31
- assert_equal 'the server responded with status 404', error.message
32
- assert_equal 'because', error.response[:headers]['X-Reason']
33
- end
34
-
35
- def test_raises_error
36
- error = assert_raises Faraday::Error::ClientError do
37
- @conn.get('error')
38
- end
39
- assert_equal 'the server responded with status 500', error.message
40
- assert_equal 'bailout', error.response[:headers]['X-Error']
41
- end
42
-
43
- def test_upcase
44
- @conn.builder.insert(0, ResponseUpcaser)
45
- assert_equal '<BODY></BODY>', @conn.get('ok').body
46
- end
47
- end
48
-
49
- class ResponseNoBodyMiddleWareTest < Faraday::TestCase
50
- def setup
51
- @conn = Faraday.new do |b|
52
- b.response :raise_error
53
- b.adapter :test do |stub|
54
- stub.get('not modified') { [304, nil, nil] }
55
- stub.get('no content') { [204, nil, nil] }
56
- end
57
- end
58
- @conn.builder.insert(0, NotCalled)
59
- end
60
-
61
- class NotCalled < Faraday::Response::Middleware
62
- def parse(body)
63
- raise "this should not be called"
64
- end
65
- end
66
-
67
- def test_204
68
- assert_equal nil, @conn.get('no content').body
69
- end
70
-
71
- def test_304
72
- assert_equal nil, @conn.get('not modified').body
73
- end
74
- end