faraday 1.0.0 → 2.0.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/CHANGELOG.md +221 -1
- data/LICENSE.md +1 -1
- data/README.md +19 -14
- data/examples/client_spec.rb +36 -4
- data/examples/client_test.rb +43 -4
- data/lib/faraday/adapter/test.rb +61 -43
- data/lib/faraday/adapter.rb +3 -16
- data/lib/faraday/adapter_registry.rb +3 -1
- data/lib/faraday/connection.rb +25 -78
- data/lib/faraday/encoders/flat_params_encoder.rb +9 -2
- data/lib/faraday/encoders/nested_params_encoder.rb +9 -4
- data/lib/faraday/error.rb +23 -8
- data/lib/faraday/logging/formatter.rb +1 -0
- data/lib/faraday/methods.rb +6 -0
- data/lib/faraday/middleware.rb +14 -5
- data/lib/faraday/middleware_registry.rb +15 -79
- data/lib/faraday/options/proxy_options.rb +4 -0
- data/lib/faraday/options.rb +7 -11
- data/lib/faraday/rack_builder.rb +34 -30
- data/lib/faraday/request/authorization.rb +32 -36
- data/lib/faraday/request/instrumentation.rb +2 -0
- data/lib/faraday/request/json.rb +55 -0
- data/lib/faraday/request/url_encoded.rb +5 -1
- data/lib/faraday/request.rb +13 -23
- data/lib/faraday/response/json.rb +54 -0
- data/lib/faraday/response/logger.rb +4 -4
- data/lib/faraday/response/raise_error.rb +20 -1
- data/lib/faraday/response.rb +8 -22
- data/lib/faraday/utils/headers.rb +3 -3
- data/lib/faraday/utils.rb +21 -8
- data/lib/faraday/version.rb +5 -0
- data/lib/faraday.rb +44 -59
- data/spec/faraday/adapter/test_spec.rb +377 -0
- data/spec/faraday/connection_spec.rb +147 -51
- data/spec/faraday/error_spec.rb +15 -0
- data/spec/faraday/middleware_spec.rb +32 -6
- data/spec/faraday/options/env_spec.rb +2 -2
- data/spec/faraday/options/proxy_options_spec.rb +7 -0
- data/spec/faraday/params_encoders/flat_spec.rb +8 -0
- data/spec/faraday/params_encoders/nested_spec.rb +8 -0
- data/spec/faraday/rack_builder_spec.rb +144 -38
- data/spec/faraday/request/authorization_spec.rb +19 -24
- data/spec/faraday/request/instrumentation_spec.rb +5 -7
- data/spec/faraday/request/json_spec.rb +111 -0
- data/spec/faraday/request/url_encoded_spec.rb +13 -1
- data/spec/faraday/request_spec.rb +6 -6
- data/spec/faraday/response/json_spec.rb +117 -0
- data/spec/faraday/response/raise_error_spec.rb +66 -0
- data/spec/faraday/utils_spec.rb +62 -1
- data/spec/support/fake_safe_buffer.rb +1 -1
- data/spec/support/helper_methods.rb +0 -37
- data/spec/support/shared_examples/adapter.rb +2 -2
- data/spec/support/shared_examples/request_method.rb +43 -28
- metadata +16 -48
- data/UPGRADING.md +0 -55
- data/lib/faraday/adapter/em_http.rb +0 -285
- data/lib/faraday/adapter/em_http_ssl_patch.rb +0 -62
- data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +0 -69
- data/lib/faraday/adapter/em_synchrony.rb +0 -150
- data/lib/faraday/adapter/excon.rb +0 -124
- data/lib/faraday/adapter/httpclient.rb +0 -151
- data/lib/faraday/adapter/net_http.rb +0 -209
- data/lib/faraday/adapter/net_http_persistent.rb +0 -91
- data/lib/faraday/adapter/patron.rb +0 -132
- data/lib/faraday/adapter/rack.rb +0 -75
- data/lib/faraday/adapter/typhoeus.rb +0 -15
- data/lib/faraday/autoload.rb +0 -95
- data/lib/faraday/dependency_loader.rb +0 -37
- data/lib/faraday/file_part.rb +0 -128
- data/lib/faraday/param_part.rb +0 -53
- data/lib/faraday/request/basic_authentication.rb +0 -20
- data/lib/faraday/request/multipart.rb +0 -99
- data/lib/faraday/request/retry.rb +0 -239
- data/lib/faraday/request/token_authentication.rb +0 -20
- data/spec/faraday/adapter/em_http_spec.rb +0 -47
- data/spec/faraday/adapter/em_synchrony_spec.rb +0 -16
- data/spec/faraday/adapter/excon_spec.rb +0 -49
- data/spec/faraday/adapter/httpclient_spec.rb +0 -73
- data/spec/faraday/adapter/net_http_persistent_spec.rb +0 -57
- data/spec/faraday/adapter/net_http_spec.rb +0 -64
- data/spec/faraday/adapter/patron_spec.rb +0 -18
- data/spec/faraday/adapter/rack_spec.rb +0 -8
- data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
- data/spec/faraday/composite_read_io_spec.rb +0 -80
- data/spec/faraday/request/multipart_spec.rb +0 -274
- data/spec/faraday/request/retry_spec.rb +0 -242
- data/spec/faraday/response/middleware_spec.rb +0 -52
- data/spec/support/webmock_rack_app.rb +0 -68
@@ -1,5 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
class CustomEncoder
|
4
|
+
def encode(params)
|
5
|
+
params.map { |k, v| "#{k.upcase}-#{v.to_s.upcase}" }.join(',')
|
6
|
+
end
|
7
|
+
|
8
|
+
def decode(params)
|
9
|
+
params.split(',').map { |pair| pair.split('-') }.to_h
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
3
13
|
shared_examples 'initializer with url' do
|
4
14
|
context 'with simple url' do
|
5
15
|
let(:address) { 'http://sushi.com' }
|
@@ -18,6 +28,13 @@ shared_examples 'initializer with url' do
|
|
18
28
|
it { expect(subject.path_prefix).to eq('/fish') }
|
19
29
|
it { expect(subject.params).to eq('a' => '1') }
|
20
30
|
end
|
31
|
+
|
32
|
+
context 'with IPv6 address' do
|
33
|
+
let(:address) { 'http://[::1]:85/' }
|
34
|
+
|
35
|
+
it { expect(subject.host).to eq('[::1]') }
|
36
|
+
it { expect(subject.port).to eq(85) }
|
37
|
+
end
|
21
38
|
end
|
22
39
|
|
23
40
|
shared_examples 'default connection options' do
|
@@ -96,6 +113,12 @@ RSpec.describe Faraday::Connection do
|
|
96
113
|
it { expect(subject.params).to eq('a' => 3, 'b' => '2') }
|
97
114
|
end
|
98
115
|
|
116
|
+
context 'with basic_auth in url' do
|
117
|
+
let(:url) { 'http://Aladdin:open%20sesame@sushi.com/fish' }
|
118
|
+
|
119
|
+
it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') }
|
120
|
+
end
|
121
|
+
|
99
122
|
context 'with custom headers' do
|
100
123
|
let(:options) { { headers: { user_agent: 'Faraday' } } }
|
101
124
|
|
@@ -117,7 +140,7 @@ RSpec.describe Faraday::Connection do
|
|
117
140
|
context 'with block' do
|
118
141
|
let(:conn) do
|
119
142
|
Faraday::Connection.new(params: { 'a' => '1' }) do |faraday|
|
120
|
-
faraday.adapter :
|
143
|
+
faraday.adapter :test
|
121
144
|
faraday.url_prefix = 'http://sushi.com/omnom'
|
122
145
|
end
|
123
146
|
end
|
@@ -128,34 +151,15 @@ RSpec.describe Faraday::Connection do
|
|
128
151
|
end
|
129
152
|
|
130
153
|
describe '#close' do
|
154
|
+
before { Faraday.default_adapter = :test }
|
155
|
+
after { Faraday.default_adapter = nil }
|
156
|
+
|
131
157
|
it 'can close underlying app' do
|
132
158
|
expect(conn.app).to receive(:close)
|
133
159
|
conn.close
|
134
160
|
end
|
135
161
|
end
|
136
162
|
|
137
|
-
describe 'basic_auth' do
|
138
|
-
subject { conn }
|
139
|
-
|
140
|
-
context 'calling the #basic_auth method' do
|
141
|
-
before { subject.basic_auth 'Aladdin', 'open sesame' }
|
142
|
-
|
143
|
-
it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') }
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'adding basic auth info to url' do
|
147
|
-
let(:url) { 'http://Aladdin:open%20sesame@sushi.com/fish' }
|
148
|
-
|
149
|
-
it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') }
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe '#token_auth' do
|
154
|
-
before { subject.token_auth('abcdef', nonce: 'abc') }
|
155
|
-
|
156
|
-
it { expect(subject.headers['Authorization']).to eq('Token nonce="abc", token="abcdef"') }
|
157
|
-
end
|
158
|
-
|
159
163
|
describe '#build_exclusive_url' do
|
160
164
|
context 'with relative path' do
|
161
165
|
subject { conn.build_exclusive_url('sake.html') }
|
@@ -246,6 +250,13 @@ RSpec.describe Faraday::Connection do
|
|
246
250
|
expect(uri.path).to eq('/sake.html')
|
247
251
|
end
|
248
252
|
|
253
|
+
it 'always returns new URI instance' do
|
254
|
+
conn.url_prefix = 'http://sushi.com'
|
255
|
+
uri1 = conn.build_exclusive_url(nil)
|
256
|
+
uri2 = conn.build_exclusive_url(nil)
|
257
|
+
expect(uri1).not_to equal(uri2)
|
258
|
+
end
|
259
|
+
|
249
260
|
context 'with url_prefixed connection' do
|
250
261
|
let(:url) { 'http://sushi.com/sushi/' }
|
251
262
|
|
@@ -270,6 +281,29 @@ RSpec.describe Faraday::Connection do
|
|
270
281
|
expect(uri.to_s).to eq('http://sushi.com/sake/')
|
271
282
|
end
|
272
283
|
end
|
284
|
+
|
285
|
+
context 'with colon in path' do
|
286
|
+
let(:url) { 'http://service.com' }
|
287
|
+
|
288
|
+
it 'joins url to base when used absolute path' do
|
289
|
+
conn = Faraday.new(url: url)
|
290
|
+
uri = conn.build_exclusive_url('/service:search?limit=400')
|
291
|
+
expect(uri.to_s).to eq('http://service.com/service:search?limit=400')
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'joins url to base when used relative path' do
|
295
|
+
conn = Faraday.new(url: url)
|
296
|
+
uri = conn.build_exclusive_url('service:search?limit=400')
|
297
|
+
expect(uri.to_s).to eq('http://service.com/service%3Asearch?limit=400')
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'joins url to base when used with path prefix' do
|
301
|
+
conn = Faraday.new(url: url)
|
302
|
+
conn.path_prefix = '/api'
|
303
|
+
uri = conn.build_exclusive_url('service:search?limit=400')
|
304
|
+
expect(uri.to_s).to eq('http://service.com/api/service%3Asearch?limit=400')
|
305
|
+
end
|
306
|
+
end
|
273
307
|
end
|
274
308
|
|
275
309
|
describe '#build_url' do
|
@@ -412,6 +446,14 @@ RSpec.describe Faraday::Connection do
|
|
412
446
|
end
|
413
447
|
end
|
414
448
|
|
449
|
+
it 'allows when url in no proxy list with url_prefix' do
|
450
|
+
with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do
|
451
|
+
conn = Faraday::Connection.new
|
452
|
+
conn.url_prefix = 'http://example.com'
|
453
|
+
expect(conn.proxy).to be_nil
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
415
457
|
it 'allows when prefixed url is not in no proxy list' do
|
416
458
|
with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do
|
417
459
|
conn = Faraday::Connection.new('http://prefixedexample.com')
|
@@ -511,26 +553,32 @@ RSpec.describe Faraday::Connection do
|
|
511
553
|
end
|
512
554
|
|
513
555
|
context 'performing a request' do
|
514
|
-
|
556
|
+
let(:url) { 'http://example.com' }
|
557
|
+
let(:conn) do
|
558
|
+
Faraday.new do |f|
|
559
|
+
f.adapter :test do |stubs|
|
560
|
+
stubs.get(url) do
|
561
|
+
[200, {}, 'ok']
|
562
|
+
end
|
563
|
+
end
|
564
|
+
end
|
565
|
+
end
|
515
566
|
|
516
567
|
it 'dynamically checks proxy' do
|
517
568
|
with_env 'http_proxy' => 'http://proxy.com:80' do
|
518
|
-
conn = Faraday.new
|
519
569
|
expect(conn.proxy.uri.host).to eq('proxy.com')
|
520
570
|
|
521
|
-
conn.get(
|
571
|
+
conn.get(url) do |req|
|
522
572
|
expect(req.options.proxy.uri.host).to eq('proxy.com')
|
523
573
|
end
|
524
574
|
end
|
525
575
|
|
526
|
-
conn.get(
|
576
|
+
conn.get(url)
|
527
577
|
expect(conn.instance_variable_get('@temp_proxy')).to be_nil
|
528
578
|
end
|
529
579
|
|
530
580
|
it 'dynamically check no proxy' do
|
531
581
|
with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do
|
532
|
-
conn = Faraday.new
|
533
|
-
|
534
582
|
expect(conn.proxy.uri.host).to eq('proxy.com')
|
535
583
|
|
536
584
|
conn.get('http://example.com') do |req|
|
@@ -560,7 +608,6 @@ RSpec.describe Faraday::Connection do
|
|
560
608
|
|
561
609
|
context 'after manual changes' do
|
562
610
|
before do
|
563
|
-
subject.basic_auth('', '')
|
564
611
|
subject.headers['content-length'] = 12
|
565
612
|
subject.params['b'] = '2'
|
566
613
|
subject.options[:open_timeout] = 10
|
@@ -595,14 +642,42 @@ RSpec.describe Faraday::Connection do
|
|
595
642
|
|
596
643
|
it_behaves_like 'default connection options'
|
597
644
|
end
|
645
|
+
|
646
|
+
context 'preserving a user_agent assigned via default_conncetion_options' do
|
647
|
+
around do |example|
|
648
|
+
old = Faraday.default_connection_options
|
649
|
+
Faraday.default_connection_options = { headers: { user_agent: 'My Agent 1.2' } }
|
650
|
+
example.run
|
651
|
+
Faraday.default_connection_options = old
|
652
|
+
end
|
653
|
+
|
654
|
+
context 'when url is a Hash' do
|
655
|
+
let(:conn) { Faraday.new(url: 'http://example.co', headers: { 'CustomHeader' => 'CustomValue' }) }
|
656
|
+
|
657
|
+
it { expect(conn.headers).to eq('CustomHeader' => 'CustomValue', 'User-Agent' => 'My Agent 1.2') }
|
658
|
+
end
|
659
|
+
|
660
|
+
context 'when url is a String' do
|
661
|
+
let(:conn) { Faraday.new('http://example.co', headers: { 'CustomHeader' => 'CustomValue' }) }
|
662
|
+
|
663
|
+
it { expect(conn.headers).to eq('CustomHeader' => 'CustomValue', 'User-Agent' => 'My Agent 1.2') }
|
664
|
+
end
|
665
|
+
end
|
598
666
|
end
|
599
667
|
|
600
668
|
describe 'request params' do
|
601
669
|
context 'with simple url' do
|
602
670
|
let(:url) { 'http://example.com' }
|
603
|
-
let
|
671
|
+
let(:stubs) { Faraday::Adapter::Test::Stubs.new }
|
672
|
+
|
673
|
+
before do
|
674
|
+
conn.adapter(:test, stubs)
|
675
|
+
stubs.get('http://example.com?a=a&p=3') do
|
676
|
+
[200, {}, 'ok']
|
677
|
+
end
|
678
|
+
end
|
604
679
|
|
605
|
-
after {
|
680
|
+
after { stubs.verify_stubbed_calls }
|
606
681
|
|
607
682
|
it 'test_overrides_request_params' do
|
608
683
|
conn.get('?p=2&a=a', p: 3)
|
@@ -624,15 +699,22 @@ RSpec.describe Faraday::Connection do
|
|
624
699
|
context 'with url and extra params' do
|
625
700
|
let(:url) { 'http://example.com?a=1&b=2' }
|
626
701
|
let(:options) { { params: { c: 3 } } }
|
702
|
+
let(:stubs) { Faraday::Adapter::Test::Stubs.new }
|
703
|
+
|
704
|
+
before do
|
705
|
+
conn.adapter(:test, stubs)
|
706
|
+
end
|
627
707
|
|
628
708
|
it 'merges connection and request params' do
|
629
|
-
|
709
|
+
expected = 'http://example.com?a=1&b=2&c=3&limit=5&page=1'
|
710
|
+
stubs.get(expected) { [200, {}, 'ok'] }
|
630
711
|
conn.get('?page=1', limit: 5)
|
631
|
-
|
712
|
+
stubs.verify_stubbed_calls
|
632
713
|
end
|
633
714
|
|
634
715
|
it 'allows to override all params' do
|
635
|
-
|
716
|
+
expected = 'http://example.com?b=b'
|
717
|
+
stubs.get(expected) { [200, {}, 'ok'] }
|
636
718
|
conn.get('?p=1&a=a', p: 2) do |req|
|
637
719
|
expect(req.params[:a]).to eq('a')
|
638
720
|
expect(req.params['c']).to eq(3)
|
@@ -640,47 +722,61 @@ RSpec.describe Faraday::Connection do
|
|
640
722
|
req.params = { b: 'b' }
|
641
723
|
expect(req.params['b']).to eq('b')
|
642
724
|
end
|
643
|
-
|
725
|
+
stubs.verify_stubbed_calls
|
644
726
|
end
|
645
727
|
|
646
728
|
it 'allows to set params_encoder for single request' do
|
647
|
-
encoder =
|
648
|
-
|
649
|
-
|
650
|
-
end
|
651
|
-
stubbed = stub_request(:get, 'http://example.com/?A-1,B-2,C-3,FEELING-BLUE')
|
729
|
+
encoder = CustomEncoder.new
|
730
|
+
expected = 'http://example.com/?A-1,B-2,C-3,FEELING-BLUE'
|
731
|
+
stubs.get(expected) { [200, {}, 'ok'] }
|
652
732
|
|
653
|
-
conn.get('/', feeling: 'blue') do |req|
|
733
|
+
conn.get('/', a: 1, b: 2, c: 3, feeling: 'blue') do |req|
|
654
734
|
req.options.params_encoder = encoder
|
655
735
|
end
|
656
|
-
|
736
|
+
stubs.verify_stubbed_calls
|
657
737
|
end
|
658
738
|
end
|
659
739
|
|
660
740
|
context 'with default params encoder' do
|
661
|
-
let
|
662
|
-
|
741
|
+
let(:stubs) { Faraday::Adapter::Test::Stubs.new }
|
742
|
+
|
743
|
+
before do
|
744
|
+
conn.adapter(:test, stubs)
|
745
|
+
stubs.get('http://example.com?color%5B%5D=blue&color%5B%5D=red') do
|
746
|
+
[200, {}, 'ok']
|
747
|
+
end
|
748
|
+
end
|
749
|
+
|
750
|
+
after { stubs.verify_stubbed_calls }
|
663
751
|
|
664
752
|
it 'supports array params in url' do
|
665
|
-
conn.get('http://example.com?color[]=
|
753
|
+
conn.get('http://example.com?color[]=blue&color[]=red')
|
666
754
|
end
|
667
755
|
|
668
756
|
it 'supports array params in params' do
|
669
|
-
conn.get('http://example.com', color: %w[red
|
757
|
+
conn.get('http://example.com', color: %w[blue red])
|
670
758
|
end
|
671
759
|
end
|
672
760
|
|
673
761
|
context 'with flat params encoder' do
|
674
762
|
let(:options) { { request: { params_encoder: Faraday::FlatParamsEncoder } } }
|
675
|
-
let
|
676
|
-
|
763
|
+
let(:stubs) { Faraday::Adapter::Test::Stubs.new }
|
764
|
+
|
765
|
+
before do
|
766
|
+
conn.adapter(:test, stubs)
|
767
|
+
stubs.get('http://example.com?color=blue&color=red') do
|
768
|
+
[200, {}, 'ok']
|
769
|
+
end
|
770
|
+
end
|
771
|
+
|
772
|
+
after { stubs.verify_stubbed_calls }
|
677
773
|
|
678
774
|
it 'supports array params in params' do
|
679
|
-
conn.get('http://example.com', color: %w[red
|
775
|
+
conn.get('http://example.com', color: %w[blue red])
|
680
776
|
end
|
681
777
|
|
682
778
|
context 'with array param in url' do
|
683
|
-
let(:url) { 'http://example.com?color[]=
|
779
|
+
let(:url) { 'http://example.com?color[]=blue&color[]=red' }
|
684
780
|
|
685
781
|
it do
|
686
782
|
conn.get('/')
|
data/spec/faraday/error_spec.rb
CHANGED
@@ -13,6 +13,7 @@ RSpec.describe Faraday::ClientError do
|
|
13
13
|
it { expect(subject.message).to eq(exception.message) }
|
14
14
|
it { expect(subject.backtrace).to eq(exception.backtrace) }
|
15
15
|
it { expect(subject.inspect).to eq('#<Faraday::ClientError wrapped=#<RuntimeError: test>>') }
|
16
|
+
it { expect(subject.response_status).to be_nil }
|
16
17
|
end
|
17
18
|
|
18
19
|
context 'with response hash' do
|
@@ -22,6 +23,7 @@ RSpec.describe Faraday::ClientError do
|
|
22
23
|
it { expect(subject.response).to eq(exception) }
|
23
24
|
it { expect(subject.message).to eq('the server responded with status 400') }
|
24
25
|
it { expect(subject.inspect).to eq('#<Faraday::ClientError response={:status=>400}>') }
|
26
|
+
it { expect(subject.response_status).to eq(400) }
|
25
27
|
end
|
26
28
|
|
27
29
|
context 'with string' do
|
@@ -31,6 +33,7 @@ RSpec.describe Faraday::ClientError do
|
|
31
33
|
it { expect(subject.response).to be_nil }
|
32
34
|
it { expect(subject.message).to eq('custom message') }
|
33
35
|
it { expect(subject.inspect).to eq('#<Faraday::ClientError #<Faraday::ClientError: custom message>>') }
|
36
|
+
it { expect(subject.response_status).to be_nil }
|
34
37
|
end
|
35
38
|
|
36
39
|
context 'with anything else #to_s' do
|
@@ -40,6 +43,18 @@ RSpec.describe Faraday::ClientError do
|
|
40
43
|
it { expect(subject.response).to be_nil }
|
41
44
|
it { expect(subject.message).to eq('["error1", "error2"]') }
|
42
45
|
it { expect(subject.inspect).to eq('#<Faraday::ClientError #<Faraday::ClientError: ["error1", "error2"]>>') }
|
46
|
+
it { expect(subject.response_status).to be_nil }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'with exception string and response hash' do
|
50
|
+
let(:exception) { 'custom message' }
|
51
|
+
let(:response) { { status: 400 } }
|
52
|
+
|
53
|
+
it { expect(subject.wrapped_exception).to be_nil }
|
54
|
+
it { expect(subject.response).to eq(response) }
|
55
|
+
it { expect(subject.message).to eq('custom message') }
|
56
|
+
it { expect(subject.inspect).to eq('#<Faraday::ClientError response={:status=>400}>') }
|
57
|
+
it { expect(subject.response_status).to eq(400) }
|
43
58
|
end
|
44
59
|
end
|
45
60
|
end
|
@@ -2,23 +2,49 @@
|
|
2
2
|
|
3
3
|
RSpec.describe Faraday::Middleware do
|
4
4
|
subject { described_class.new(app) }
|
5
|
+
let(:app) { double }
|
6
|
+
|
7
|
+
describe 'options' do
|
8
|
+
context 'when options are passed to the middleware' do
|
9
|
+
subject { described_class.new(app, options) }
|
10
|
+
let(:options) { { field: 'value' } }
|
11
|
+
|
12
|
+
it 'accepts options when initialized' do
|
13
|
+
expect(subject.options[:field]).to eq('value')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#on_request' do
|
19
|
+
subject do
|
20
|
+
Class.new(described_class) do
|
21
|
+
def on_request(env)
|
22
|
+
# do nothing
|
23
|
+
end
|
24
|
+
end.new(app)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'is called by #call' do
|
28
|
+
expect(app).to receive(:call).and_return(app)
|
29
|
+
expect(app).to receive(:on_complete)
|
30
|
+
is_expected.to receive(:call).and_call_original
|
31
|
+
is_expected.to receive(:on_request)
|
32
|
+
subject.call(double)
|
33
|
+
end
|
34
|
+
end
|
5
35
|
|
6
36
|
describe '#close' do
|
7
37
|
context "with app that doesn't support \#close" do
|
8
|
-
let(:app) { double }
|
9
|
-
|
10
38
|
it 'should issue warning' do
|
11
|
-
|
39
|
+
is_expected.to receive(:warn)
|
12
40
|
subject.close
|
13
41
|
end
|
14
42
|
end
|
15
43
|
|
16
44
|
context "with app that supports \#close" do
|
17
|
-
let(:app) { double }
|
18
|
-
|
19
45
|
it 'should issue warning' do
|
20
46
|
expect(app).to receive(:close)
|
21
|
-
|
47
|
+
is_expected.to_not receive(:warn)
|
22
48
|
subject.close
|
23
49
|
end
|
24
50
|
end
|
@@ -29,12 +29,12 @@ RSpec.describe Faraday::Env do
|
|
29
29
|
|
30
30
|
it 'retains custom members' do
|
31
31
|
env[:foo] = 'custom 1'
|
32
|
-
env[:bar] = :
|
32
|
+
env[:bar] = :custom2
|
33
33
|
env2 = Faraday::Env.from(env)
|
34
34
|
env2[:baz] = 'custom 3'
|
35
35
|
|
36
36
|
expect(env2[:foo]).to eq('custom 1')
|
37
|
-
expect(env2[:bar]).to eq(:
|
37
|
+
expect(env2[:bar]).to eq(:custom2)
|
38
38
|
expect(env[:baz]).to be_nil
|
39
39
|
end
|
40
40
|
|
@@ -14,6 +14,13 @@ RSpec.describe Faraday::ProxyOptions do
|
|
14
14
|
expect(options.inspect).to match('#<Faraday::ProxyOptions uri=')
|
15
15
|
end
|
16
16
|
|
17
|
+
it 'defaults to http' do
|
18
|
+
options = Faraday::ProxyOptions.from 'example.org'
|
19
|
+
expect(options.port).to eq(80)
|
20
|
+
expect(options.host).to eq('example.org')
|
21
|
+
expect(options.scheme).to eq('http')
|
22
|
+
end
|
23
|
+
|
17
24
|
it 'works with nil' do
|
18
25
|
options = Faraday::ProxyOptions.from nil
|
19
26
|
expect(options).to be_a_kind_of(Faraday::ProxyOptions)
|
@@ -31,4 +31,12 @@ RSpec.describe Faraday::FlatParamsEncoder do
|
|
31
31
|
params = { a: [] }
|
32
32
|
expect(subject.encode(params)).to eq('a=')
|
33
33
|
end
|
34
|
+
|
35
|
+
it 'encodes unsorted when asked' do
|
36
|
+
params = { b: false, a: true }
|
37
|
+
expect(subject.encode(params)).to eq('a=true&b=false')
|
38
|
+
Faraday::FlatParamsEncoder.sort_params = false
|
39
|
+
expect(subject.encode(params)).to eq('b=false&a=true')
|
40
|
+
Faraday::FlatParamsEncoder.sort_params = true
|
41
|
+
end
|
34
42
|
end
|
@@ -94,6 +94,14 @@ RSpec.describe Faraday::NestedParamsEncoder do
|
|
94
94
|
expect(subject.encode(params)).to eq('a%5B%5D=true&a%5B%5D=false')
|
95
95
|
end
|
96
96
|
|
97
|
+
it 'encodes unsorted when asked' do
|
98
|
+
params = { b: false, a: true }
|
99
|
+
expect(subject.encode(params)).to eq('a=true&b=false')
|
100
|
+
Faraday::NestedParamsEncoder.sort_params = false
|
101
|
+
expect(subject.encode(params)).to eq('b=false&a=true')
|
102
|
+
Faraday::NestedParamsEncoder.sort_params = true
|
103
|
+
end
|
104
|
+
|
97
105
|
shared_examples 'a wrong decoding' do
|
98
106
|
it do
|
99
107
|
expect { subject.decode(query) }.to raise_error(TypeError) do |e|
|