1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
# frozen_string_literal: true
RSpec.describe Faraday::Utils do
describe 'headers parsing' do
let(:multi_response_headers) do
"HTTP/1.x 500 OK\r\nContent-Type: text/html; charset=UTF-8\r\n" \
"HTTP/1.x 200 OK\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n"
end
it 'parse headers for aggregated responses' do
headers = Faraday::Utils::Headers.new
headers.parse(multi_response_headers)
result = headers.to_hash
expect(result['Content-Type']).to eq('application/json; charset=UTF-8')
end
end
describe 'URI parsing' do
let(:url) { 'http://example.com/abc' }
it 'escapes safe buffer' do
str = FakeSafeBuffer.new('$32,000.00')
expect(Faraday::Utils.escape(str)).to eq('%2432%2C000.00')
end
it 'parses with default parser' do
with_default_uri_parser(nil) do
uri = normalize(url)
expect(uri.host).to eq('example.com')
end
end
it 'parses with URI' do
with_default_uri_parser(::URI) do
uri = normalize(url)
expect(uri.host).to eq('example.com')
end
end
it 'parses with block' do
with_default_uri_parser(->(u) { "booya#{'!' * u.size}" }) do
expect(normalize(url)).to eq('booya!!!!!!!!!!!!!!!!!!!!!!')
end
end
it 'replaces headers hash' do
headers = Faraday::Utils::Headers.new('authorization' => 't0ps3cr3t!')
expect(headers).to have_key('authorization')
headers.replace('content-type' => 'text/plain')
expect(headers).not_to have_key('authorization')
end
end
describe '.deep_merge!' do
let(:connection_options) { Faraday::ConnectionOptions.new }
let(:url) do
{
url: 'http://example.com/abc',
headers: { 'Mime-Version' => '1.0' },
request: { oauth: { consumer_key: 'anonymous' } },
ssl: { version: '2' }
}
end
it 'recursively merges the headers' do
connection_options.headers = { user_agent: 'My Agent 1.0' }
deep_merge = Faraday::Utils.deep_merge!(connection_options, url)
expect(deep_merge.headers).to eq('Mime-Version' => '1.0', user_agent: 'My Agent 1.0')
end
context 'when a target hash has an Options Struct value' do
let(:request) do
{
params_encoder: nil,
proxy: nil,
bind: nil,
timeout: nil,
open_timeout: nil,
read_timeout: nil,
write_timeout: nil,
boundary: nil,
oauth: { consumer_key: 'anonymous' },
context: nil,
on_data: nil
}
end
let(:ssl) do
{
verify: nil,
ca_file: nil,
ca_path: nil,
verify_mode: nil,
cert_store: nil,
client_cert: nil,
client_key: nil,
certificate: nil,
private_key: nil,
verify_depth: nil,
version: '2',
min_version: nil,
max_version: nil,
verify_hostname: nil,
hostname: nil,
ciphers: nil
}
end
it 'does not overwrite an Options Struct value' do
deep_merge = Faraday::Utils.deep_merge!(connection_options, url)
expect(deep_merge.request.to_h).to eq(request)
expect(deep_merge.ssl.to_h).to eq(ssl)
end
end
end
end
|