oso-cloud 1.8.0 → 1.9.1.pre.vendored.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/.gitignore +0 -1
- data/Gemfile +5 -0
- data/Gemfile.lock +31 -12
- data/README.md +1 -1
- data/lib/oso/api.rb +18 -2
- data/lib/oso/oso.rb +10 -7
- data/lib/oso/version.rb +1 -1
- data/vendor/gems/faraday-2.5.2/CHANGELOG.md +574 -0
- data/vendor/gems/faraday-2.5.2/LICENSE.md +20 -0
- data/vendor/gems/faraday-2.5.2/README.md +55 -0
- data/vendor/gems/faraday-2.5.2/Rakefile +7 -0
- data/vendor/gems/faraday-2.5.2/examples/client_spec.rb +119 -0
- data/vendor/gems/faraday-2.5.2/examples/client_test.rb +144 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/adapter/test.rb +298 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/adapter.rb +102 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/adapter_registry.rb +30 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/connection.rb +561 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/encoders/flat_params_encoder.rb +105 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/encoders/nested_params_encoder.rb +183 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/error.rb +147 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/logging/formatter.rb +106 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/methods.rb +6 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/middleware.rb +30 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/middleware_registry.rb +83 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/options/connection_options.rb +22 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/options/env.rb +199 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/options/proxy_options.rb +32 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/options/request_options.rb +22 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/options/ssl_options.rb +69 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/options.rb +218 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/parameters.rb +5 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/rack_builder.rb +252 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/request/authorization.rb +49 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/request/instrumentation.rb +56 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/request/json.rb +55 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/request/url_encoded.rb +60 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/request.rb +136 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/response/json.rb +54 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/response/logger.rb +33 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/response/raise_error.rb +64 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/response.rb +90 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/utils/headers.rb +139 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/utils/params_hash.rb +61 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/utils.rb +122 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday/version.rb +5 -0
- data/vendor/gems/faraday-2.5.2/lib/faraday.rb +157 -0
- data/vendor/gems/faraday-2.5.2/spec/external_adapters/faraday_specs_setup.rb +14 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/adapter/test_spec.rb +413 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/adapter_registry_spec.rb +28 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/adapter_spec.rb +55 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/connection_spec.rb +793 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/error_spec.rb +60 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/middleware_registry_spec.rb +31 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/middleware_spec.rb +52 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/options/env_spec.rb +76 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/options/options_spec.rb +297 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/options/proxy_options_spec.rb +44 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/options/request_options_spec.rb +19 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/params_encoders/flat_spec.rb +42 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/params_encoders/nested_spec.rb +150 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/rack_builder_spec.rb +317 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/request/authorization_spec.rb +83 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/request/instrumentation_spec.rb +74 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/request/json_spec.rb +111 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/request/url_encoded_spec.rb +93 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/request_spec.rb +110 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/response/json_spec.rb +117 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/response/logger_spec.rb +220 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/response/raise_error_spec.rb +172 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/response_spec.rb +75 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/utils/headers_spec.rb +82 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday/utils_spec.rb +118 -0
- data/vendor/gems/faraday-2.5.2/spec/faraday_spec.rb +37 -0
- data/vendor/gems/faraday-2.5.2/spec/spec_helper.rb +132 -0
- data/vendor/gems/faraday-2.5.2/spec/support/disabling_stub.rb +14 -0
- data/vendor/gems/faraday-2.5.2/spec/support/fake_safe_buffer.rb +15 -0
- data/vendor/gems/faraday-2.5.2/spec/support/helper_methods.rb +96 -0
- data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/adapter.rb +105 -0
- data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/params_encoder.rb +18 -0
- data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/request_method.rb +263 -0
- data/vendor/gems/faraday-2.5.2/spec/support/streaming_response_checker.rb +35 -0
- data/vendor/gems/faraday-net_http-3.0.2/LICENSE.md +21 -0
- data/vendor/gems/faraday-net_http-3.0.2/README.md +57 -0
- data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/adapter/net_http.rb +208 -0
- data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/net_http/version.rb +7 -0
- data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/net_http.rb +10 -0
- data/vendor/gems/faraday-net_http_persistent-2.3.0/LICENSE.md +21 -0
- data/vendor/gems/faraday-net_http_persistent-2.3.0/README.md +66 -0
- data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/adapter/net_http_persistent.rb +234 -0
- data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/net_http_persistent/version.rb +7 -0
- data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/net_http_persistent.rb +18 -0
- data/vendor/gems/faraday-retry-2.0.0/CHANGELOG.md +24 -0
- data/vendor/gems/faraday-retry-2.0.0/LICENSE.md +21 -0
- data/vendor/gems/faraday-retry-2.0.0/README.md +169 -0
- data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retriable_response.rb +8 -0
- data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry/middleware.rb +254 -0
- data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry/version.rb +7 -0
- data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry.rb +13 -0
- data/vendor/gems/net-http-persistent-4.0.5/.autotest +9 -0
- data/vendor/gems/net-http-persistent-4.0.5/.gemtest +0 -0
- data/vendor/gems/net-http-persistent-4.0.5/Gemfile +14 -0
- data/vendor/gems/net-http-persistent-4.0.5/History.txt +460 -0
- data/vendor/gems/net-http-persistent-4.0.5/Manifest.txt +13 -0
- data/vendor/gems/net-http-persistent-4.0.5/README.rdoc +82 -0
- data/vendor/gems/net-http-persistent-4.0.5/Rakefile +25 -0
- data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/connection.rb +41 -0
- data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/pool.rb +65 -0
- data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent.rb +1158 -0
- data/vendor/gems/net-http-persistent-4.0.5/test/test_net_http_persistent.rb +1512 -0
- data/vendor/gems/net-http-persistent-4.0.5/test/test_net_http_persistent_timed_stack_multi.rb +151 -0
- metadata +112 -8
@@ -0,0 +1,413 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Faraday::Adapter::Test do
|
4
|
+
let(:stubs) do
|
5
|
+
described_class::Stubs.new do |stub|
|
6
|
+
stub.get('http://domain.test/hello') do
|
7
|
+
[200, { 'Content-Type' => 'text/html' }, 'domain: hello']
|
8
|
+
end
|
9
|
+
|
10
|
+
stub.get('http://wrong.test/hello') do
|
11
|
+
[200, { 'Content-Type' => 'text/html' }, 'wrong: hello']
|
12
|
+
end
|
13
|
+
|
14
|
+
stub.get('http://wrong.test/bait') do
|
15
|
+
[404, { 'Content-Type' => 'text/html' }]
|
16
|
+
end
|
17
|
+
|
18
|
+
stub.get('/hello') do
|
19
|
+
[200, { 'Content-Type' => 'text/html' }, 'hello']
|
20
|
+
end
|
21
|
+
|
22
|
+
stub.get('/method-echo') do |env|
|
23
|
+
[200, { 'Content-Type' => 'text/html' }, env[:method].to_s]
|
24
|
+
end
|
25
|
+
|
26
|
+
stub.get(%r{\A/resources/\d+(?:\?|\z)}) do
|
27
|
+
[200, { 'Content-Type' => 'text/html' }, 'show']
|
28
|
+
end
|
29
|
+
|
30
|
+
stub.get(%r{\A/resources/(specified)\z}) do |_env, meta|
|
31
|
+
[200, { 'Content-Type' => 'text/html' }, "show #{meta[:match_data][1]}"]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:connection) do
|
37
|
+
Faraday.new do |builder|
|
38
|
+
builder.adapter :test, stubs
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:response) { connection.get('/hello') }
|
43
|
+
|
44
|
+
context 'with simple path sets status' do
|
45
|
+
subject { response.status }
|
46
|
+
|
47
|
+
it { is_expected.to eq 200 }
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'with simple path sets headers' do
|
51
|
+
subject { response.headers['Content-Type'] }
|
52
|
+
|
53
|
+
it { is_expected.to eq 'text/html' }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with simple path sets body' do
|
57
|
+
subject { response.body }
|
58
|
+
|
59
|
+
it { is_expected.to eq 'hello' }
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'with host points to the right stub' do
|
63
|
+
subject { connection.get('http://domain.test/hello').body }
|
64
|
+
|
65
|
+
it { is_expected.to eq 'domain: hello' }
|
66
|
+
end
|
67
|
+
|
68
|
+
describe 'can be called several times' do
|
69
|
+
subject { connection.get('/hello').body }
|
70
|
+
|
71
|
+
it { is_expected.to eq 'hello' }
|
72
|
+
end
|
73
|
+
|
74
|
+
describe 'can handle regular expression path' do
|
75
|
+
subject { connection.get('/resources/1').body }
|
76
|
+
|
77
|
+
it { is_expected.to eq 'show' }
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'can handle single parameter block' do
|
81
|
+
subject { connection.get('/method-echo').body }
|
82
|
+
|
83
|
+
it { is_expected.to eq 'get' }
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'can handle regular expression path with captured result' do
|
87
|
+
subject { connection.get('/resources/specified').body }
|
88
|
+
|
89
|
+
it { is_expected.to eq 'show specified' }
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'with get params' do
|
93
|
+
subject { connection.get('/param?a=1').body }
|
94
|
+
|
95
|
+
before do
|
96
|
+
stubs.get('/param?a=1') { [200, {}, 'a'] }
|
97
|
+
end
|
98
|
+
|
99
|
+
it { is_expected.to eq 'a' }
|
100
|
+
end
|
101
|
+
|
102
|
+
describe 'ignoring unspecified get params' do
|
103
|
+
before do
|
104
|
+
stubs.get('/optional?a=1') { [200, {}, 'a'] }
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'with multiple params' do
|
108
|
+
subject { connection.get('/optional?a=1&b=1').body }
|
109
|
+
|
110
|
+
it { is_expected.to eq 'a' }
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'with single param' do
|
114
|
+
subject { connection.get('/optional?a=1').body }
|
115
|
+
|
116
|
+
it { is_expected.to eq 'a' }
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'without params' do
|
120
|
+
subject(:request) { connection.get('/optional') }
|
121
|
+
|
122
|
+
it do
|
123
|
+
expect { request }.to raise_error(
|
124
|
+
Faraday::Adapter::Test::Stubs::NotFound
|
125
|
+
)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'with http headers' do
|
131
|
+
before do
|
132
|
+
stubs.get('/yo', 'X-HELLO' => 'hello') { [200, {}, 'a'] }
|
133
|
+
stubs.get('/yo') { [200, {}, 'b'] }
|
134
|
+
end
|
135
|
+
|
136
|
+
context 'with header' do
|
137
|
+
subject do
|
138
|
+
connection.get('/yo') { |env| env.headers['X-HELLO'] = 'hello' }.body
|
139
|
+
end
|
140
|
+
|
141
|
+
it { is_expected.to eq 'a' }
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'without header' do
|
145
|
+
subject do
|
146
|
+
connection.get('/yo').body
|
147
|
+
end
|
148
|
+
|
149
|
+
it { is_expected.to eq 'b' }
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'different outcomes for the same request' do
|
154
|
+
def make_request
|
155
|
+
connection.get('/foo')
|
156
|
+
end
|
157
|
+
|
158
|
+
subject(:request) { make_request.body }
|
159
|
+
|
160
|
+
before do
|
161
|
+
stubs.get('/foo') { [200, { 'Content-Type' => 'text/html' }, 'hello'] }
|
162
|
+
stubs.get('/foo') { [200, { 'Content-Type' => 'text/html' }, 'world'] }
|
163
|
+
end
|
164
|
+
|
165
|
+
context 'the first request' do
|
166
|
+
it { is_expected.to eq 'hello' }
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'the second request' do
|
170
|
+
before do
|
171
|
+
make_request
|
172
|
+
end
|
173
|
+
|
174
|
+
it { is_expected.to eq 'world' }
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe 'yielding env to stubs' do
|
179
|
+
subject { connection.get('http://foo.com/foo?a=1').body }
|
180
|
+
|
181
|
+
before do
|
182
|
+
stubs.get '/foo' do |env|
|
183
|
+
expect(env[:url].path).to eq '/foo'
|
184
|
+
expect(env[:url].host).to eq 'foo.com'
|
185
|
+
expect(env[:params]['a']).to eq '1'
|
186
|
+
expect(env[:request_headers]['Accept']).to eq 'text/plain'
|
187
|
+
[200, {}, 'a']
|
188
|
+
end
|
189
|
+
|
190
|
+
connection.headers['Accept'] = 'text/plain'
|
191
|
+
end
|
192
|
+
|
193
|
+
it { is_expected.to eq 'a' }
|
194
|
+
end
|
195
|
+
|
196
|
+
describe 'params parsing' do
|
197
|
+
subject { connection.get('http://foo.com/foo?a[b]=1').body }
|
198
|
+
|
199
|
+
context 'with default encoder' do
|
200
|
+
before do
|
201
|
+
stubs.get '/foo' do |env|
|
202
|
+
expect(env[:params]['a']['b']).to eq '1'
|
203
|
+
[200, {}, 'a']
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
it { is_expected.to eq 'a' }
|
208
|
+
end
|
209
|
+
|
210
|
+
context 'with nested encoder' do
|
211
|
+
before do
|
212
|
+
stubs.get '/foo' do |env|
|
213
|
+
expect(env[:params]['a']['b']).to eq '1'
|
214
|
+
[200, {}, 'a']
|
215
|
+
end
|
216
|
+
|
217
|
+
connection.options.params_encoder = Faraday::NestedParamsEncoder
|
218
|
+
end
|
219
|
+
|
220
|
+
it { is_expected.to eq 'a' }
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'with flat encoder' do
|
224
|
+
before do
|
225
|
+
stubs.get '/foo' do |env|
|
226
|
+
expect(env[:params]['a[b]']).to eq '1'
|
227
|
+
[200, {}, 'a']
|
228
|
+
end
|
229
|
+
|
230
|
+
connection.options.params_encoder = Faraday::FlatParamsEncoder
|
231
|
+
end
|
232
|
+
|
233
|
+
it { is_expected.to eq 'a' }
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
describe 'raising an error if no stub was found' do
|
238
|
+
describe 'for request' do
|
239
|
+
subject(:request) { connection.get('/invalid') { [200, {}, []] } }
|
240
|
+
|
241
|
+
it { expect { request }.to raise_error described_class::Stubs::NotFound }
|
242
|
+
end
|
243
|
+
|
244
|
+
describe 'for specified host' do
|
245
|
+
subject(:request) { connection.get('http://domain.test/bait') }
|
246
|
+
|
247
|
+
it { expect { request }.to raise_error described_class::Stubs::NotFound }
|
248
|
+
end
|
249
|
+
|
250
|
+
describe 'for request without specified header' do
|
251
|
+
subject(:request) { connection.get('/yo') }
|
252
|
+
|
253
|
+
before do
|
254
|
+
stubs.get('/yo', 'X-HELLO' => 'hello') { [200, {}, 'a'] }
|
255
|
+
end
|
256
|
+
|
257
|
+
it { expect { request }.to raise_error described_class::Stubs::NotFound }
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
describe 'for request with non default params encoder' do
|
262
|
+
let(:connection) do
|
263
|
+
Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) do |builder|
|
264
|
+
builder.adapter :test, stubs
|
265
|
+
end
|
266
|
+
end
|
267
|
+
let(:stubs) do
|
268
|
+
described_class::Stubs.new do |stubs|
|
269
|
+
stubs.get('/path?a=x&a=y&a=z') { [200, {}, 'a'] }
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
context 'when all flat param values are correctly set' do
|
274
|
+
subject(:request) { connection.get('/path?a=x&a=y&a=z') }
|
275
|
+
|
276
|
+
it { expect(request.status).to eq 200 }
|
277
|
+
end
|
278
|
+
|
279
|
+
shared_examples 'raise NotFound when params do not satisfy the flat param values' do |params|
|
280
|
+
subject(:request) { connection.get('/path', params) }
|
281
|
+
|
282
|
+
context "with #{params.inspect}" do
|
283
|
+
it { expect { request }.to raise_error described_class::Stubs::NotFound }
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { a: %w[x] }
|
288
|
+
it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { a: %w[x y] }
|
289
|
+
it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { a: %w[x z y] } # NOTE: The order of the value is also compared.
|
290
|
+
it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { b: %w[x y z] }
|
291
|
+
end
|
292
|
+
|
293
|
+
describe 'strict_mode' do
|
294
|
+
let(:stubs) do
|
295
|
+
described_class::Stubs.new(strict_mode: true) do |stubs|
|
296
|
+
stubs.get('/strict?a=12&b=xy', 'Authorization' => 'Bearer m_ck', 'X-C' => 'hello') { [200, {}, 'a'] }
|
297
|
+
stubs.get('/with_user_agent?a=12&b=xy', authorization: 'Bearer m_ck', 'User-Agent' => 'My Agent') { [200, {}, 'a'] }
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
context 'when params and headers are exactly set' do
|
302
|
+
subject(:request) { connection.get('/strict', { a: '12', b: 'xy' }, { authorization: 'Bearer m_ck', x_c: 'hello' }) }
|
303
|
+
|
304
|
+
it { expect(request.status).to eq 200 }
|
305
|
+
end
|
306
|
+
|
307
|
+
context 'when params and headers are exactly set with a custom user agent' do
|
308
|
+
subject(:request) { connection.get('/with_user_agent', { a: '12', b: 'xy' }, { authorization: 'Bearer m_ck', 'User-Agent' => 'My Agent' }) }
|
309
|
+
|
310
|
+
it { expect(request.status).to eq 200 }
|
311
|
+
end
|
312
|
+
|
313
|
+
shared_examples 'raise NotFound when params do not satisfy the strict check' do |params|
|
314
|
+
subject(:request) { connection.get('/strict', params, { 'Authorization' => 'Bearer m_ck', 'X-C' => 'hello' }) }
|
315
|
+
|
316
|
+
context "with #{params.inspect}" do
|
317
|
+
it { expect { request }.to raise_error described_class::Stubs::NotFound }
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '12' }
|
322
|
+
it_behaves_like 'raise NotFound when params do not satisfy the strict check', { b: 'xy' }
|
323
|
+
it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '123', b: 'xy' }
|
324
|
+
it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '12', b: 'xyz' }
|
325
|
+
it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '12', b: 'xy', c: 'hello' }
|
326
|
+
it_behaves_like 'raise NotFound when params do not satisfy the strict check', { additional: 'special', a: '12', b: 'xy', c: 'hello' }
|
327
|
+
|
328
|
+
shared_examples 'raise NotFound when headers do not satisfy the strict check' do |path, headers|
|
329
|
+
subject(:request) { connection.get(path, { a: 12, b: 'xy' }, headers) }
|
330
|
+
|
331
|
+
context "with #{headers.inspect}" do
|
332
|
+
it { expect { request }.to raise_error described_class::Stubs::NotFound }
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck' }
|
337
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { 'X-C' => 'hello' }
|
338
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'Hi' }
|
339
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Basic m_ck', 'x-c': 'hello' }
|
340
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello', x_special: 'special' }
|
341
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck' }
|
342
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'Unknown' }
|
343
|
+
it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent', x_special: 'special' }
|
344
|
+
|
345
|
+
context 'when strict_mode is disabled' do
|
346
|
+
before do
|
347
|
+
stubs.strict_mode = false
|
348
|
+
end
|
349
|
+
|
350
|
+
shared_examples 'does not raise NotFound even when params do not satisfy the strict check' do |params|
|
351
|
+
subject(:request) { connection.get('/strict', params, { 'Authorization' => 'Bearer m_ck', 'X-C' => 'hello' }) }
|
352
|
+
|
353
|
+
context "with #{params.inspect}" do
|
354
|
+
it { expect(request.status).to eq 200 }
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
it_behaves_like 'does not raise NotFound even when params do not satisfy the strict check', { a: '12', b: 'xy' }
|
359
|
+
it_behaves_like 'does not raise NotFound even when params do not satisfy the strict check', { a: '12', b: 'xy', c: 'hello' }
|
360
|
+
it_behaves_like 'does not raise NotFound even when params do not satisfy the strict check', { additional: 'special', a: '12', b: 'xy', c: 'hello' }
|
361
|
+
|
362
|
+
shared_examples 'does not raise NotFound even when headers do not satisfy the strict check' do |path, headers|
|
363
|
+
subject(:request) { connection.get(path, { a: 12, b: 'xy' }, headers) }
|
364
|
+
|
365
|
+
context "with #{headers.inspect}" do
|
366
|
+
it { expect(request.status).to eq 200 }
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello' }
|
371
|
+
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello', x_special: 'special' }
|
372
|
+
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello', user_agent: 'Special Agent' }
|
373
|
+
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent' }
|
374
|
+
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent', x_special: 'special' }
|
375
|
+
end
|
376
|
+
|
377
|
+
describe 'body_match?' do
|
378
|
+
let(:stubs) do
|
379
|
+
described_class::Stubs.new do |stubs|
|
380
|
+
stubs.post('/no_check') { [200, {}, 'ok'] }
|
381
|
+
stubs.post('/with_string', 'abc') { [200, {}, 'ok'] }
|
382
|
+
stubs.post(
|
383
|
+
'/with_proc',
|
384
|
+
->(request_body) { JSON.parse(request_body, symbolize_names: true) == { x: '!', a: [{ m: [{ a: true }], n: 123 }] } },
|
385
|
+
{ content_type: 'application/json' }
|
386
|
+
) do
|
387
|
+
[200, {}, 'ok']
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
392
|
+
context 'when trying without any args for body' do
|
393
|
+
subject(:without_body) { connection.post('/no_check') }
|
394
|
+
|
395
|
+
it { expect(without_body.status).to eq 200 }
|
396
|
+
end
|
397
|
+
|
398
|
+
context 'when trying with string body stubs' do
|
399
|
+
subject(:with_string) { connection.post('/with_string', 'abc') }
|
400
|
+
|
401
|
+
it { expect(with_string.status).to eq 200 }
|
402
|
+
end
|
403
|
+
|
404
|
+
context 'when trying with proc body stubs' do
|
405
|
+
subject(:with_proc) do
|
406
|
+
connection.post('/with_proc', JSON.dump(a: [{ n: 123, m: [{ a: true }] }], x: '!'), { 'Content-Type' => 'application/json' })
|
407
|
+
end
|
408
|
+
|
409
|
+
it { expect(with_proc.status).to eq 200 }
|
410
|
+
end
|
411
|
+
end
|
412
|
+
end
|
413
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Faraday::AdapterRegistry do
|
4
|
+
describe '#initialize' do
|
5
|
+
subject(:registry) { described_class.new }
|
6
|
+
|
7
|
+
it { expect { registry.get(:FinFangFoom) }.to raise_error(NameError) }
|
8
|
+
it { expect { registry.get('FinFangFoom') }.to raise_error(NameError) }
|
9
|
+
|
10
|
+
it 'looks up class by string name' do
|
11
|
+
expect(registry.get('Faraday::Connection')).to eq(Faraday::Connection)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'looks up class by symbol name' do
|
15
|
+
expect(registry.get(:Faraday)).to eq(Faraday)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'caches lookups with implicit name' do
|
19
|
+
registry.set :symbol
|
20
|
+
expect(registry.get('symbol')).to eq(:symbol)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'caches lookups with explicit name' do
|
24
|
+
registry.set 'string', :name
|
25
|
+
expect(registry.get(:name)).to eq('string')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Faraday::Adapter do
|
4
|
+
let(:adapter) { Faraday::Adapter.new }
|
5
|
+
let(:request) { {} }
|
6
|
+
|
7
|
+
context '#request_timeout' do
|
8
|
+
it 'gets :read timeout' do
|
9
|
+
expect(timeout(:read)).to eq(nil)
|
10
|
+
|
11
|
+
request[:timeout] = 5
|
12
|
+
request[:write_timeout] = 1
|
13
|
+
|
14
|
+
expect(timeout(:read)).to eq(5)
|
15
|
+
|
16
|
+
request[:read_timeout] = 2
|
17
|
+
|
18
|
+
expect(timeout(:read)).to eq(2)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'gets :open timeout' do
|
22
|
+
expect(timeout(:open)).to eq(nil)
|
23
|
+
|
24
|
+
request[:timeout] = 5
|
25
|
+
request[:write_timeout] = 1
|
26
|
+
|
27
|
+
expect(timeout(:open)).to eq(5)
|
28
|
+
|
29
|
+
request[:open_timeout] = 2
|
30
|
+
|
31
|
+
expect(timeout(:open)).to eq(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'gets :write timeout' do
|
35
|
+
expect(timeout(:write)).to eq(nil)
|
36
|
+
|
37
|
+
request[:timeout] = 5
|
38
|
+
request[:read_timeout] = 1
|
39
|
+
|
40
|
+
expect(timeout(:write)).to eq(5)
|
41
|
+
|
42
|
+
request[:write_timeout] = 2
|
43
|
+
|
44
|
+
expect(timeout(:write)).to eq(2)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'attempts unknown timeout type' do
|
48
|
+
expect { timeout(:unknown) }.to raise_error(ArgumentError)
|
49
|
+
end
|
50
|
+
|
51
|
+
def timeout(type)
|
52
|
+
adapter.send(:request_timeout, type, request)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|