211 lines
6.2 KiB
Ruby
211 lines
6.2 KiB
Ruby
|
require File.expand_path('../helper', __FILE__)
|
||
|
|
||
|
class EnvTest < Faraday::TestCase
|
||
|
def setup
|
||
|
@conn = Faraday.new :url => 'http://sushi.com/api',
|
||
|
:headers => {'Mime-Version' => '1.0'},
|
||
|
:request => {:oauth => {:consumer_key => 'anonymous'}}
|
||
|
|
||
|
@conn.options.timeout = 3
|
||
|
@conn.options.open_timeout = 5
|
||
|
@conn.ssl.verify = false
|
||
|
@conn.proxy 'http://proxy.com'
|
||
|
end
|
||
|
|
||
|
def test_request_create_stores_method
|
||
|
env = make_env(:get)
|
||
|
assert_equal :get, env.method
|
||
|
end
|
||
|
|
||
|
def test_request_create_stores_uri
|
||
|
env = make_env do |req|
|
||
|
req.url 'foo.json', 'a' => 1
|
||
|
end
|
||
|
assert_equal 'http://sushi.com/api/foo.json?a=1', env.url.to_s
|
||
|
end
|
||
|
|
||
|
def test_request_create_stores_headers
|
||
|
env = make_env do |req|
|
||
|
req['Server'] = 'Faraday'
|
||
|
end
|
||
|
headers = env.request_headers
|
||
|
assert_equal '1.0', headers['mime-version']
|
||
|
assert_equal 'Faraday', headers['server']
|
||
|
end
|
||
|
|
||
|
def test_request_create_stores_body
|
||
|
env = make_env do |req|
|
||
|
req.body = 'hi'
|
||
|
end
|
||
|
assert_equal 'hi', env.body
|
||
|
end
|
||
|
|
||
|
def test_global_request_options
|
||
|
env = make_env
|
||
|
assert_equal 3, env.request.timeout
|
||
|
assert_equal 5, env.request.open_timeout
|
||
|
end
|
||
|
|
||
|
def test_per_request_options
|
||
|
env = make_env do |req|
|
||
|
req.options.timeout = 10
|
||
|
req.options.boundary = 'boo'
|
||
|
req.options.oauth[:consumer_secret] = 'xyz'
|
||
|
end
|
||
|
assert_equal 10, env.request.timeout
|
||
|
assert_equal 5, env.request.open_timeout
|
||
|
assert_equal 'boo', env.request.boundary
|
||
|
|
||
|
oauth_expected = {:consumer_secret => 'xyz', :consumer_key => 'anonymous'}
|
||
|
assert_equal oauth_expected, env.request.oauth
|
||
|
end
|
||
|
|
||
|
def test_request_create_stores_ssl_options
|
||
|
env = make_env
|
||
|
assert_equal false, env.ssl.verify
|
||
|
end
|
||
|
|
||
|
def test_request_create_stores_proxy_options
|
||
|
env = make_env
|
||
|
assert_equal 'proxy.com', env.request.proxy.host
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def make_env(method = :get, connection = @conn, &block)
|
||
|
request = connection.build_request(method, &block)
|
||
|
request.to_env(connection)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class HeadersTest < Faraday::TestCase
|
||
|
def setup
|
||
|
@headers = Faraday::Utils::Headers.new
|
||
|
end
|
||
|
|
||
|
def test_normalizes_different_capitalizations
|
||
|
@headers['Content-Type'] = 'application/json'
|
||
|
assert_equal ['Content-Type'], @headers.keys
|
||
|
assert_equal 'application/json', @headers['Content-Type']
|
||
|
assert_equal 'application/json', @headers['CONTENT-TYPE']
|
||
|
assert_equal 'application/json', @headers['content-type']
|
||
|
assert @headers.include?('content-type')
|
||
|
|
||
|
@headers['content-type'] = 'application/xml'
|
||
|
assert_equal ['Content-Type'], @headers.keys
|
||
|
assert_equal 'application/xml', @headers['Content-Type']
|
||
|
assert_equal 'application/xml', @headers['CONTENT-TYPE']
|
||
|
assert_equal 'application/xml', @headers['content-type']
|
||
|
end
|
||
|
|
||
|
def test_fetch_key
|
||
|
@headers['Content-Type'] = 'application/json'
|
||
|
block_called = false
|
||
|
assert_equal 'application/json', @headers.fetch('content-type') { block_called = true }
|
||
|
assert_equal 'application/json', @headers.fetch('Content-Type')
|
||
|
assert_equal 'application/json', @headers.fetch('CONTENT-TYPE')
|
||
|
assert_equal 'application/json', @headers.fetch(:content_type)
|
||
|
assert_equal false, block_called
|
||
|
|
||
|
assert_equal 'default', @headers.fetch('invalid', 'default')
|
||
|
assert_equal false, @headers.fetch('invalid', false)
|
||
|
assert_nil @headers.fetch('invalid', nil)
|
||
|
|
||
|
assert_equal 'Invalid key', @headers.fetch('Invalid') { |key| "#{key} key" }
|
||
|
|
||
|
expected_error = defined?(KeyError) ? KeyError : IndexError
|
||
|
assert_raises(expected_error) { @headers.fetch('invalid') }
|
||
|
end
|
||
|
|
||
|
def test_delete_key
|
||
|
@headers['Content-Type'] = 'application/json'
|
||
|
assert_equal 1, @headers.size
|
||
|
assert @headers.include?('content-type')
|
||
|
assert_equal 'application/json', @headers.delete('content-type')
|
||
|
assert_equal 0, @headers.size
|
||
|
assert !@headers.include?('content-type')
|
||
|
assert_equal nil, @headers.delete('content-type')
|
||
|
end
|
||
|
|
||
|
def test_parse_response_headers_leaves_http_status_line_out
|
||
|
@headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
|
||
|
assert_equal %w(Content-Type), @headers.keys
|
||
|
end
|
||
|
|
||
|
def test_parse_response_headers_parses_lower_cased_header_name_and_value
|
||
|
@headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
|
||
|
assert_equal 'text/html', @headers['content-type']
|
||
|
end
|
||
|
|
||
|
def test_parse_response_headers_parses_lower_cased_header_name_and_value_with_colon
|
||
|
@headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLocation: http://sushi.com/\r\n\r\n")
|
||
|
assert_equal 'http://sushi.com/', @headers['location']
|
||
|
end
|
||
|
|
||
|
def test_parse_response_headers_parses_blank_lines
|
||
|
@headers.parse("HTTP/1.1 200 OK\r\n\r\nContent-Type: text/html\r\n\r\n")
|
||
|
assert_equal 'text/html', @headers['content-type']
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class ResponseTest < Faraday::TestCase
|
||
|
def setup
|
||
|
@env = Faraday::Env.from \
|
||
|
:status => 404, :body => 'yikes',
|
||
|
:response_headers => {'Content-Type' => 'text/plain'}
|
||
|
@response = Faraday::Response.new @env
|
||
|
end
|
||
|
|
||
|
def test_finished
|
||
|
assert @response.finished?
|
||
|
end
|
||
|
|
||
|
def test_error_on_finish
|
||
|
assert_raises RuntimeError do
|
||
|
@response.finish({})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def test_not_success
|
||
|
assert !@response.success?
|
||
|
end
|
||
|
|
||
|
def test_status
|
||
|
assert_equal 404, @response.status
|
||
|
end
|
||
|
|
||
|
def test_body
|
||
|
assert_equal 'yikes', @response.body
|
||
|
end
|
||
|
|
||
|
def test_headers
|
||
|
assert_equal 'text/plain', @response.headers['Content-Type']
|
||
|
assert_equal 'text/plain', @response['content-type']
|
||
|
end
|
||
|
|
||
|
def test_apply_request
|
||
|
@response.apply_request :body => 'a=b', :method => :post
|
||
|
assert_equal 'yikes', @response.body
|
||
|
assert_equal :post, @response.env[:method]
|
||
|
end
|
||
|
|
||
|
def test_marshal
|
||
|
@response = Faraday::Response.new
|
||
|
@response.on_complete { }
|
||
|
@response.finish @env.merge(:params => 'moo')
|
||
|
|
||
|
loaded = Marshal.load Marshal.dump(@response)
|
||
|
assert_nil loaded.env[:params]
|
||
|
assert_equal %w[body response_headers status], loaded.env.keys.map { |k| k.to_s }.sort
|
||
|
end
|
||
|
|
||
|
def test_hash
|
||
|
hash = @response.to_hash
|
||
|
assert_kind_of Hash, hash
|
||
|
assert_equal @env.to_hash, hash
|
||
|
assert_equal hash[:status], @response.status
|
||
|
assert_equal hash[:response_headers], @response.headers
|
||
|
assert_equal hash[:body], @response.body
|
||
|
end
|
||
|
end
|