vcr 2.5.0 → 2.6.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 +8 -8
- data/.travis.yml +0 -3
- data/CHANGELOG.md +32 -3
- data/Gemfile +33 -0
- data/Gemfile.lock +99 -119
- data/README.md +19 -7
- data/Rakefile +5 -9
- data/benchmarks/null_logging.rb +62 -0
- data/features/.nav +0 -1
- data/features/about_these_examples.md +1 -2
- data/features/cassettes/allow_unused_http_interactions.feature +15 -1
- data/features/cassettes/decompress.feature +6 -2
- data/features/cassettes/format.feature +20 -12
- data/features/cassettes/freezing_time.feature +68 -0
- data/features/configuration/cassette_library_dir.feature +5 -0
- data/features/configuration/preserve_exact_body_bytes.feature +5 -0
- data/features/configuration/uri_parser.feature +2 -4
- data/features/http_libraries/net_http.feature +1 -1
- data/features/request_matching/headers.feature +0 -1
- data/features/step_definitions/cli_steps.rb +1 -4
- data/features/test_frameworks/cucumber.feature +59 -0
- data/features/test_frameworks/rspec_metadata.feature +59 -1
- data/gemfiles/typhoeus_old.gemfile +19 -0
- data/gemfiles/typhoeus_old.gemfile.lock +84 -86
- data/lib/vcr.rb +12 -3
- data/lib/vcr/cassette.rb +32 -11
- data/lib/vcr/cassette/http_interaction_list.rb +3 -2
- data/lib/vcr/cassette/migrator.rb +1 -0
- data/lib/vcr/cassette/serializers/json.rb +1 -1
- data/lib/vcr/configuration.rb +17 -9
- data/lib/vcr/library_hooks/typhoeus.rb +3 -2
- data/lib/vcr/library_hooks/webmock.rb +1 -1
- data/lib/vcr/middleware/excon.rb +13 -1
- data/lib/vcr/middleware/faraday.rb +1 -0
- data/lib/vcr/request_handler.rb +1 -1
- data/lib/vcr/structs.rb +19 -4
- data/lib/vcr/test_frameworks/cucumber.rb +2 -2
- data/lib/vcr/test_frameworks/rspec.rb +10 -2
- data/lib/vcr/util/logger.rb +41 -7
- data/lib/vcr/version.rb +1 -1
- data/script/ci.sh +8 -1
- data/spec/acceptance/threading_spec.rb +6 -0
- data/spec/capture_warnings.rb +9 -1
- data/spec/spec_helper.rb +6 -2
- data/spec/support/configuration_stubbing.rb +8 -0
- data/spec/support/http_library_adapters.rb +1 -1
- data/spec/support/limited_uri.rb +1 -0
- data/spec/support/shared_example_groups/excon.rb +23 -1
- data/spec/support/shared_example_groups/hook_into_http_library.rb +12 -12
- data/spec/support/shared_example_groups/request_hooks.rb +1 -1
- data/spec/support/sinatra_app.rb +9 -0
- data/spec/support/vcr_localhost_server.rb +4 -25
- data/spec/support/vcr_stub_helpers.rb +1 -1
- data/spec/vcr/cassette/http_interaction_list_spec.rb +41 -14
- data/spec/vcr/cassette/migrator_spec.rb +1 -1
- data/spec/vcr/cassette/persisters_spec.rb +2 -2
- data/spec/vcr/cassette/serializers_spec.rb +13 -4
- data/spec/vcr/cassette_spec.rb +107 -58
- data/spec/vcr/configuration_spec.rb +23 -23
- data/spec/vcr/deprecations_spec.rb +9 -9
- data/spec/vcr/errors_spec.rb +6 -6
- data/spec/vcr/library_hooks/excon_spec.rb +15 -10
- data/spec/vcr/library_hooks/fakeweb_spec.rb +8 -8
- data/spec/vcr/library_hooks/faraday_spec.rb +1 -1
- data/spec/vcr/library_hooks/typhoeus_0.4_spec.rb +2 -2
- data/spec/vcr/library_hooks/typhoeus_spec.rb +68 -9
- data/spec/vcr/library_hooks/webmock_spec.rb +6 -10
- data/spec/vcr/middleware/faraday_spec.rb +33 -5
- data/spec/vcr/middleware/rack_spec.rb +2 -2
- data/spec/vcr/request_matcher_registry_spec.rb +11 -6
- data/spec/vcr/structs_spec.rb +114 -47
- data/spec/vcr/test_frameworks/cucumber_spec.rb +4 -4
- data/spec/vcr/util/hooks_spec.rb +2 -2
- data/spec/vcr/util/internet_connection_spec.rb +3 -3
- data/spec/vcr/util/version_checker_spec.rb +4 -4
- data/spec/vcr_spec.rb +22 -16
- data/vcr.gemspec +2 -31
- metadata +9 -328
- data/features/test_frameworks/shoulda.feature +0 -64
@@ -40,10 +40,10 @@ describe "WebMock hook", :with_monkey_patches => :webmock do
|
|
40
40
|
|
41
41
|
context "when there'ss a bug and the request does not have the @__typed_vcr_request in the after_request callbacks" do
|
42
42
|
let(:warner) { VCR::LibraryHooks::WebMock }
|
43
|
-
before { warner.
|
43
|
+
before { allow(warner).to receive(:warn) }
|
44
44
|
|
45
45
|
it 'records the HTTP interaction properly' do
|
46
|
-
VCR.
|
46
|
+
expect(VCR).to receive(:record_http_interaction) do |i|
|
47
47
|
expect(i.request.uri).to eq("http://foo.com/")
|
48
48
|
expect(i.response.body).to eq("OK")
|
49
49
|
end
|
@@ -63,7 +63,7 @@ describe "WebMock hook", :with_monkey_patches => :webmock do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'prints a warning' do
|
66
|
-
warner.
|
66
|
+
expect(warner).to receive(:warn).at_least(:once).with(/bug.*after_request/)
|
67
67
|
|
68
68
|
run_after_request_callback
|
69
69
|
end
|
@@ -98,7 +98,7 @@ describe "WebMock hook", :with_monkey_patches => :webmock do
|
|
98
98
|
|
99
99
|
expect {
|
100
100
|
make_http_request(:get, request_url)
|
101
|
-
}.to_not raise_error
|
101
|
+
}.to_not raise_error
|
102
102
|
end
|
103
103
|
|
104
104
|
it 'can allow connections to matching urls' do
|
@@ -107,16 +107,12 @@ describe "WebMock hook", :with_monkey_patches => :webmock do
|
|
107
107
|
|
108
108
|
expect {
|
109
109
|
make_http_request(:get, request_url)
|
110
|
-
}.to_not raise_error
|
110
|
+
}.to_not raise_error
|
111
111
|
end
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
-
it_behaves_like "Excon streaming"
|
117
|
-
before(:each) do
|
118
|
-
pending "waiting on bblimke/webmock#246 for a fix"
|
119
|
-
end
|
120
|
-
end
|
116
|
+
it_behaves_like "Excon streaming"
|
121
117
|
end
|
122
118
|
|
@@ -7,8 +7,7 @@ describe VCR::Middleware::Faraday do
|
|
7
7
|
http_libs.each do |lib|
|
8
8
|
it_behaves_like 'a hook into an HTTP library', :faraday, "faraday (w/ #{lib})",
|
9
9
|
:status_message_not_exposed,
|
10
|
-
:does_not_support_rotating_responses
|
11
|
-
:not_disableable
|
10
|
+
:does_not_support_rotating_responses
|
12
11
|
end
|
13
12
|
|
14
13
|
context 'when performing a multipart upload' do
|
@@ -22,7 +21,7 @@ describe VCR::Middleware::Faraday do
|
|
22
21
|
it 'records the request body correctly' do
|
23
22
|
payload = { :file => Faraday::UploadIO.new(__FILE__, 'text/plain') }
|
24
23
|
|
25
|
-
VCR.
|
24
|
+
expect(VCR).to receive(:record_http_interaction) do |i|
|
26
25
|
expect(i.request.headers['Content-Type'].first).to include("multipart")
|
27
26
|
expect(i.request.body).to include(File.read(__FILE__))
|
28
27
|
end
|
@@ -43,6 +42,35 @@ describe VCR::Middleware::Faraday do
|
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
45
|
+
context 'when extending the response body with an extension module' do
|
46
|
+
let(:connection) { ::Faraday.new("http://localhost:#{VCR::SinatraApp.port}/") }
|
47
|
+
|
48
|
+
def process_response(response)
|
49
|
+
response.body.extend Module.new { attr_accessor :_response }
|
50
|
+
response.body._response = response
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'does not record the body extensions to the cassette' do
|
54
|
+
3.times do |i|
|
55
|
+
VCR.use_cassette("hack", :record => :new_episodes) do
|
56
|
+
response = connection.get("/foo")
|
57
|
+
process_response(response)
|
58
|
+
|
59
|
+
# Do something different after the first time to
|
60
|
+
# ensure new interactions are added to an existing
|
61
|
+
# cassette.
|
62
|
+
if i > 1
|
63
|
+
response = connection.get("/")
|
64
|
+
process_response(response)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
contents = VCR::Cassette.new("hack").send(:raw_cassette_bytes)
|
70
|
+
expect(contents).not_to include("ruby/object:Faraday::Response")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
46
74
|
context 'when making parallel requests' do
|
47
75
|
include VCRStubHelpers
|
48
76
|
let(:connection) { ::Faraday.new { |b| b.adapter :typhoeus } }
|
@@ -102,7 +130,7 @@ describe VCR::Middleware::Faraday do
|
|
102
130
|
|
103
131
|
context 'for a recorded request' do
|
104
132
|
let!(:inserted_cassette) { VCR.insert_cassette('new_cassette') }
|
105
|
-
before(:each) { VCR.
|
133
|
+
before(:each) { expect(VCR).to receive(:record_http_interaction) }
|
106
134
|
it_behaves_like "exclusive library hook"
|
107
135
|
end
|
108
136
|
|
@@ -132,7 +160,7 @@ describe VCR::Middleware::Faraday do
|
|
132
160
|
it 'can be used to eject a cassette after the request is recorded' do
|
133
161
|
VCR.configuration.after_http_request { |request| VCR.eject_cassette }
|
134
162
|
|
135
|
-
VCR.
|
163
|
+
expect(VCR).to receive(:record_http_interaction) do |interaction|
|
136
164
|
expect(VCR.current_cassette).to be(inserted_cassette)
|
137
165
|
end
|
138
166
|
|
@@ -45,8 +45,8 @@ module VCR
|
|
45
45
|
describe '#call' do
|
46
46
|
let(:env_hash) { { :env => :hash } }
|
47
47
|
it 'calls the provided rack app and returns its response' do
|
48
|
-
rack_app =
|
49
|
-
rack_app.
|
48
|
+
rack_app = double
|
49
|
+
expect(rack_app).to receive(:call).with(env_hash).and_return(:response)
|
50
50
|
instance = described_class.new(rack_app) { |c| c.name 'cassette_name' }
|
51
51
|
expect(instance.call(env_hash)).to eq(:response)
|
52
52
|
end
|
@@ -2,11 +2,16 @@ require 'vcr/request_matcher_registry'
|
|
2
2
|
require 'vcr/structs'
|
3
3
|
require 'support/limited_uri'
|
4
4
|
require 'cgi'
|
5
|
+
require 'support/configuration_stubbing'
|
5
6
|
|
6
7
|
module VCR
|
7
8
|
describe RequestMatcherRegistry do
|
8
|
-
|
9
|
-
|
9
|
+
include_context "configuration stubbing"
|
10
|
+
|
11
|
+
before do
|
12
|
+
allow(config).to receive(:uri_parser) { LimitedURI }
|
13
|
+
allow(config).to receive(:query_parser) { CGI.method(:parse) }
|
14
|
+
end
|
10
15
|
|
11
16
|
def request_with(values)
|
12
17
|
VCR::Request.new.tap do |request|
|
@@ -20,23 +25,23 @@ module VCR
|
|
20
25
|
it 'registers a request matcher block that can be used later' do
|
21
26
|
matcher_called = false
|
22
27
|
subject.register(:my_matcher) { |*a| matcher_called = true }
|
23
|
-
subject[:my_matcher].matches?(
|
28
|
+
subject[:my_matcher].matches?(double, double)
|
24
29
|
expect(matcher_called).to be_true
|
25
30
|
end
|
26
31
|
|
27
32
|
context 'when there is already a matcher for the given name' do
|
28
33
|
before(:each) do
|
29
34
|
subject.register(:foo) { |*a| false }
|
30
|
-
subject.
|
35
|
+
allow(subject).to receive :warn
|
31
36
|
end
|
32
37
|
|
33
38
|
it 'overrides the existing matcher' do
|
34
39
|
subject.register(:foo) { |*a| true }
|
35
|
-
expect(subject[:foo].matches?(
|
40
|
+
expect(subject[:foo].matches?(double, double)).to be_true
|
36
41
|
end
|
37
42
|
|
38
43
|
it 'warns that there is a name collision' do
|
39
|
-
subject.
|
44
|
+
expect(subject).to receive(:warn).with(
|
40
45
|
/WARNING: There is already a VCR request matcher registered for :foo\. Overriding it/
|
41
46
|
)
|
42
47
|
|
data/spec/vcr/structs_spec.rb
CHANGED
@@ -8,6 +8,7 @@ require 'vcr/errors'
|
|
8
8
|
require 'zlib'
|
9
9
|
require 'stringio'
|
10
10
|
require 'support/limited_uri'
|
11
|
+
require 'support/configuration_stubbing'
|
11
12
|
|
12
13
|
shared_examples_for "a header normalizer" do
|
13
14
|
let(:instance) do
|
@@ -61,7 +62,8 @@ end
|
|
61
62
|
|
62
63
|
module VCR
|
63
64
|
describe HTTPInteraction do
|
64
|
-
|
65
|
+
include_context "configuration stubbing"
|
66
|
+
before { allow(config).to receive(:uri_parser) { LimitedURI } }
|
65
67
|
|
66
68
|
if ''.respond_to?(:encoding)
|
67
69
|
def body_hash(key, value)
|
@@ -77,7 +79,7 @@ module VCR
|
|
77
79
|
let(:now) { Time.now }
|
78
80
|
|
79
81
|
it 'is initialized to the current time' do
|
80
|
-
Time.
|
82
|
+
allow(Time).to receive(:now).and_return(now)
|
81
83
|
expect(VCR::HTTPInteraction.new.recorded_at).to eq(now)
|
82
84
|
end
|
83
85
|
end
|
@@ -118,6 +120,18 @@ module VCR
|
|
118
120
|
expect(HTTPInteraction.from_hash(hash).recorded_at).to eq(recorded_at)
|
119
121
|
end
|
120
122
|
|
123
|
+
it 'initializes the response adapter_metadata from the hash if it is included' do
|
124
|
+
hash['response']['adapter_metadata'] = { 'foo' => 12 }
|
125
|
+
interaction = HTTPInteraction.from_hash(hash)
|
126
|
+
expect(interaction.response.adapter_metadata).to eq("foo" => 12)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'works when the response adapter_metadata is missing' do
|
130
|
+
expect(hash['response'].keys).not_to include('adapter_metadata')
|
131
|
+
interaction = HTTPInteraction.from_hash(hash)
|
132
|
+
expect(interaction.response.adapter_metadata).to eq({})
|
133
|
+
end
|
134
|
+
|
121
135
|
it 'uses a blank request when the hash lacks one' do
|
122
136
|
hash.delete('request')
|
123
137
|
i = HTTPInteraction.from_hash(hash)
|
@@ -192,7 +206,7 @@ module VCR
|
|
192
206
|
expect(string).to be_valid_encoding
|
193
207
|
hash['request']['body'] = { 'string' => string, 'encoding' => 'ASCII-8BIT' }
|
194
208
|
|
195
|
-
Request.
|
209
|
+
expect(Request).not_to receive(:warn)
|
196
210
|
i = HTTPInteraction.from_hash(hash)
|
197
211
|
expect(i.request.body).to eq(string)
|
198
212
|
expect(i.request.body.bytes.to_a).to eq(string.bytes.to_a)
|
@@ -201,14 +215,12 @@ module VCR
|
|
201
215
|
|
202
216
|
context 'when the string cannot be encoded as the original encoding' do
|
203
217
|
def verify_encoding_error
|
204
|
-
|
205
|
-
expect { "\xFAbc".encode("ISO-8859-1") }.to raise_error(EncodingError)
|
206
|
-
end
|
218
|
+
expect { "\xFAbc".encode("ISO-8859-1") }.to raise_error(EncodingError)
|
207
219
|
end
|
208
220
|
|
209
221
|
before do
|
210
|
-
Request.
|
211
|
-
Response.
|
222
|
+
allow(Request).to receive(:warn)
|
223
|
+
allow(Response).to receive(:warn)
|
212
224
|
|
213
225
|
hash['request']['body'] = { 'string' => "\xFAbc", 'encoding' => 'ISO-8859-1' }
|
214
226
|
hash['response']['body'] = { 'string' => "\xFAbc", 'encoding' => 'ISO-8859-1' }
|
@@ -225,8 +237,8 @@ module VCR
|
|
225
237
|
end
|
226
238
|
|
227
239
|
it 'prints a warning and informs users of the :preserve_exact_body_bytes option' do
|
228
|
-
Request.
|
229
|
-
Response.
|
240
|
+
expect(Request).to receive(:warn).with(/ISO-8859-1.*preserve_exact_body_bytes/)
|
241
|
+
expect(Response).to receive(:warn).with(/ISO-8859-1.*preserve_exact_body_bytes/)
|
230
242
|
|
231
243
|
HTTPInteraction.from_hash(hash)
|
232
244
|
end
|
@@ -235,9 +247,11 @@ module VCR
|
|
235
247
|
end
|
236
248
|
|
237
249
|
describe "#to_hash" do
|
250
|
+
include_context "configuration stubbing"
|
251
|
+
|
238
252
|
before(:each) do
|
239
|
-
|
240
|
-
|
253
|
+
allow(config).to receive(:preserve_exact_body_bytes_for?).and_return(false)
|
254
|
+
allow(config).to receive(:uri_parser).and_return(URI)
|
241
255
|
end
|
242
256
|
|
243
257
|
let(:hash) { interaction.to_hash }
|
@@ -265,8 +279,29 @@ module VCR
|
|
265
279
|
})
|
266
280
|
end
|
267
281
|
|
282
|
+
it 'includes the response adapter metadata when it is not empty' do
|
283
|
+
interaction.response.adapter_metadata['foo'] = 17
|
284
|
+
expect(hash['response']['adapter_metadata']).to eq('foo' => 17)
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'does not include the response adapter metadata when it is empty' do
|
288
|
+
expect(interaction.response.adapter_metadata).to eq({})
|
289
|
+
expect(hash['response'].keys).not_to include('adapter_metadata')
|
290
|
+
end
|
291
|
+
|
292
|
+
context "when the body is extended with a module and some state" do
|
293
|
+
it 'serializes to YAML w/o the extra state' do
|
294
|
+
interaction.request.body.extend Module.new { attr_accessor :foo }
|
295
|
+
interaction.response.body.extend Module.new { attr_accessor :foo }
|
296
|
+
interaction.request.body.foo = 98765
|
297
|
+
interaction.response.body.foo = 98765
|
298
|
+
|
299
|
+
expect(YAML.dump(interaction.to_hash)).not_to include("98765")
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
268
303
|
it 'encodes the body as base64 when the configuration is so set' do
|
269
|
-
|
304
|
+
allow(config).to receive(:preserve_exact_body_bytes_for?).and_return(true)
|
270
305
|
expect(hash['request']['body']).to eq(body_hash('base64_string', Base64.encode64('req body')))
|
271
306
|
expect(hash['response']['body']).to eq(body_hash('base64_string', Base64.encode64('res body')))
|
272
307
|
end
|
@@ -291,19 +326,24 @@ module VCR
|
|
291
326
|
assert_yielded_keys hash['response'], 'status', 'headers', 'body', 'http_version'
|
292
327
|
assert_yielded_keys hash['response']['status'], 'code', 'message'
|
293
328
|
end
|
329
|
+
|
330
|
+
it 'yields `adapter_metadata` if it has any data' do
|
331
|
+
interaction.response.adapter_metadata['foo'] = 17
|
332
|
+
assert_yielded_keys hash['response'], 'status', 'headers', 'body', 'http_version', 'adapter_metadata'
|
333
|
+
end
|
294
334
|
end
|
295
335
|
|
296
336
|
describe "#parsed_uri" do
|
297
337
|
before :each do
|
298
|
-
uri_parser.
|
299
|
-
|
338
|
+
allow(uri_parser).to receive(:parse).and_return(uri)
|
339
|
+
allow(config).to receive(:uri_parser).and_return(uri_parser)
|
300
340
|
end
|
301
341
|
|
302
|
-
let(:uri_parser){
|
303
|
-
let(:uri){
|
342
|
+
let(:uri_parser){ double('parser') }
|
343
|
+
let(:uri){ double('uri').as_null_object }
|
304
344
|
|
305
345
|
it "parses the uri using the current uri_parser" do
|
306
|
-
uri_parser.
|
346
|
+
expect(uri_parser).to receive(:parse).with(request.uri)
|
307
347
|
request.parsed_uri
|
308
348
|
end
|
309
349
|
|
@@ -314,7 +354,11 @@ module VCR
|
|
314
354
|
end
|
315
355
|
|
316
356
|
describe HTTPInteraction::HookAware do
|
317
|
-
|
357
|
+
include_context "configuration stubbing"
|
358
|
+
|
359
|
+
before do
|
360
|
+
allow(config).to receive(:uri_parser) { LimitedURI }
|
361
|
+
end
|
318
362
|
|
319
363
|
let(:response_status) { VCR::ResponseStatus.new(200, "OK foo") }
|
320
364
|
let(:body) { "The body foo this is (foo-Foo)" }
|
@@ -399,14 +443,14 @@ module VCR
|
|
399
443
|
describe Request::Typed do
|
400
444
|
[:uri, :method, :headers, :body].each do |method|
|
401
445
|
it "delegates ##{method} to the request" do
|
402
|
-
request =
|
446
|
+
request = double(method => "delegated value")
|
403
447
|
expect(Request::Typed.new(request, :type).send(method)).to eq("delegated value")
|
404
448
|
end
|
405
449
|
end
|
406
450
|
|
407
451
|
describe "#type" do
|
408
452
|
it 'returns the initialized type' do
|
409
|
-
expect(Request::Typed.new(
|
453
|
+
expect(Request::Typed.new(double, :ignored).type).to be(:ignored)
|
410
454
|
end
|
411
455
|
end
|
412
456
|
|
@@ -414,11 +458,11 @@ module VCR
|
|
414
458
|
valid_types.each do |type|
|
415
459
|
describe "##{type}?" do
|
416
460
|
it "returns true if the type is set to :#{type}" do
|
417
|
-
expect(Request::Typed.new(
|
461
|
+
expect(Request::Typed.new(double, type).send("#{type}?")).to be_true
|
418
462
|
end
|
419
463
|
|
420
464
|
it "returns false if the type is set to :other" do
|
421
|
-
expect(Request::Typed.new(
|
465
|
+
expect(Request::Typed.new(double, :other).send("#{type}?")).to be_false
|
422
466
|
end
|
423
467
|
end
|
424
468
|
end
|
@@ -427,13 +471,13 @@ module VCR
|
|
427
471
|
real_types = [:ignored, :recordable]
|
428
472
|
real_types.each do |type|
|
429
473
|
it "returns true if the type is set to :#{type}" do
|
430
|
-
expect(Request::Typed.new(
|
474
|
+
expect(Request::Typed.new(double, type)).to be_real
|
431
475
|
end
|
432
476
|
end
|
433
477
|
|
434
478
|
(valid_types - real_types).each do |type|
|
435
479
|
it "returns false if the type is set to :#{type}" do
|
436
|
-
expect(Request::Typed.new(
|
480
|
+
expect(Request::Typed.new(double, type)).not_to be_real
|
437
481
|
end
|
438
482
|
end
|
439
483
|
end
|
@@ -442,20 +486,24 @@ module VCR
|
|
442
486
|
stubbed_types = [:externally_stubbed, :stubbed_by_vcr]
|
443
487
|
stubbed_types.each do |type|
|
444
488
|
it "returns true if the type is set to :#{type}" do
|
445
|
-
expect(Request::Typed.new(
|
489
|
+
expect(Request::Typed.new(double, type)).to be_stubbed
|
446
490
|
end
|
447
491
|
end
|
448
492
|
|
449
493
|
(valid_types - stubbed_types).each do |type|
|
450
494
|
it "returns false if the type is set to :#{type}" do
|
451
|
-
expect(Request::Typed.new(
|
495
|
+
expect(Request::Typed.new(double, type)).not_to be_stubbed
|
452
496
|
end
|
453
497
|
end
|
454
498
|
end
|
455
499
|
end
|
456
500
|
|
457
501
|
describe Request do
|
458
|
-
|
502
|
+
include_context "configuration stubbing"
|
503
|
+
|
504
|
+
before do
|
505
|
+
allow(config).to receive(:uri_parser) { LimitedURI }
|
506
|
+
end
|
459
507
|
|
460
508
|
describe '#method' do
|
461
509
|
subject { VCR::Request.new(:get) }
|
@@ -518,7 +566,7 @@ module VCR
|
|
518
566
|
end
|
519
567
|
|
520
568
|
it 'can be cast to a proc' do
|
521
|
-
Fiber.
|
569
|
+
expect(Fiber).to receive(:yield)
|
522
570
|
lambda(&subject).call
|
523
571
|
end
|
524
572
|
end if RUBY_VERSION > '1.9'
|
@@ -549,6 +597,27 @@ module VCR
|
|
549
597
|
end
|
550
598
|
end
|
551
599
|
|
600
|
+
describe "#adapter_metadata" do
|
601
|
+
it 'returns the hash given as the last #initialize argument' do
|
602
|
+
response = Response.new(
|
603
|
+
ResponseStatus.new(200, "OK"),
|
604
|
+
{}, "the body", "1.1",
|
605
|
+
{ "meta" => "value" }
|
606
|
+
)
|
607
|
+
|
608
|
+
expect(response.adapter_metadata).to eq("meta" => "value")
|
609
|
+
end
|
610
|
+
|
611
|
+
it 'returns a blank hash when nil is passed to #initialize' do
|
612
|
+
response = Response.new(
|
613
|
+
ResponseStatus.new(200, "OK"),
|
614
|
+
{}, "the body", "1.1", nil
|
615
|
+
)
|
616
|
+
|
617
|
+
expect(response.adapter_metadata).to eq({})
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
552
621
|
describe '#update_content_length_header' do
|
553
622
|
%w[ content-length Content-Length ].each do |header|
|
554
623
|
context "for the #{header} header" do
|
@@ -625,24 +694,22 @@ module VCR
|
|
625
694
|
end
|
626
695
|
|
627
696
|
it "unzips gzipped response" do
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
expect
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
to([content.bytesize.to_s])
|
645
|
-
end
|
697
|
+
io = StringIO.new
|
698
|
+
|
699
|
+
writer = Zlib::GzipWriter.new(io)
|
700
|
+
writer << content
|
701
|
+
writer.close
|
702
|
+
|
703
|
+
gzipped = io.string
|
704
|
+
resp = instance(gzipped, 'gzip')
|
705
|
+
expect(resp).to be_compressed
|
706
|
+
expect {
|
707
|
+
expect(resp.decompress).to equal(resp)
|
708
|
+
expect(resp).not_to be_compressed
|
709
|
+
expect(resp.body).to eq(content)
|
710
|
+
}.to change { resp.headers['content-length'] }.
|
711
|
+
from([gzipped.bytesize.to_s]).
|
712
|
+
to([content.bytesize.to_s])
|
646
713
|
end
|
647
714
|
|
648
715
|
it "inflates deflated response" do
|