vcr 3.0.3 → 4.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/lib/vcr.rb +18 -1
- data/lib/vcr/cassette.rb +11 -3
- data/lib/vcr/cassette/persisters/file_system.rb +1 -1
- data/lib/vcr/configuration.rb +3 -5
- data/lib/vcr/deprecations.rb +0 -62
- data/lib/vcr/errors.rb +16 -0
- data/lib/vcr/library_hooks/typhoeus.rb +37 -8
- data/lib/vcr/middleware/faraday.rb +5 -1
- data/lib/vcr/structs.rb +1 -1
- data/lib/vcr/util/hooks.rb +1 -0
- data/lib/vcr/version.rb +1 -1
- metadata +9 -249
- data/features/CHANGELOG.md +0 -710
- data/features/CONTRIBUTING.md +0 -26
- data/features/LICENSE.md +0 -20
- data/features/README.md +0 -339
- data/features/Upgrade.md +0 -289
- data/features/about_these_examples.md +0 -18
- data/features/cassettes/allow_unused_http_interactions.feature +0 -100
- data/features/cassettes/automatic_re_recording.feature +0 -72
- data/features/cassettes/decompress.feature +0 -74
- data/features/cassettes/dynamic_erb.feature +0 -100
- data/features/cassettes/exclusive.feature +0 -126
- data/features/cassettes/format.feature +0 -411
- data/features/cassettes/freezing_time.feature +0 -68
- data/features/cassettes/naming.feature +0 -28
- data/features/cassettes/no_cassette.feature +0 -152
- data/features/cassettes/update_content_length_header.feature +0 -112
- data/features/configuration/allow_http_connections_when_no_cassette.feature +0 -55
- data/features/configuration/cassette_library_dir.feature +0 -31
- data/features/configuration/debug_logging.feature +0 -58
- data/features/configuration/default_cassette_options.feature +0 -100
- data/features/configuration/filter_sensitive_data.feature +0 -153
- data/features/configuration/hook_into.feature +0 -172
- data/features/configuration/ignore_request.feature +0 -192
- data/features/configuration/preserve_exact_body_bytes.feature +0 -108
- data/features/configuration/query_parser.feature +0 -84
- data/features/configuration/uri_parser.feature +0 -93
- data/features/getting_started.md +0 -82
- data/features/hooks/after_http_request.feature +0 -58
- data/features/hooks/around_http_request.feature +0 -57
- data/features/hooks/before_http_request.feature +0 -63
- data/features/hooks/before_playback.feature +0 -184
- data/features/hooks/before_record.feature +0 -172
- data/features/http_libraries/em_http_request.feature +0 -250
- data/features/http_libraries/net_http.feature +0 -179
- data/features/middleware/faraday.feature +0 -56
- data/features/middleware/rack.feature +0 -92
- data/features/record_modes/all.feature +0 -82
- data/features/record_modes/new_episodes.feature +0 -79
- data/features/record_modes/none.feature +0 -72
- data/features/record_modes/once.feature +0 -95
- data/features/request_matching/README.md +0 -30
- data/features/request_matching/body.feature +0 -91
- data/features/request_matching/body_as_json.feature +0 -90
- data/features/request_matching/custom_matcher.feature +0 -135
- data/features/request_matching/headers.feature +0 -85
- data/features/request_matching/host.feature +0 -95
- data/features/request_matching/identical_request_sequence.feature +0 -89
- data/features/request_matching/method.feature +0 -96
- data/features/request_matching/path.feature +0 -96
- data/features/request_matching/playback_repeats.feature +0 -98
- data/features/request_matching/query.feature +0 -97
- data/features/request_matching/uri.feature +0 -94
- data/features/request_matching/uri_without_param.feature +0 -101
- data/features/step_definitions/cli_steps.rb +0 -199
- data/features/support/env.rb +0 -46
- data/features/support/http_lib_filters.rb +0 -46
- data/features/test_frameworks/cucumber.feature +0 -211
- data/features/test_frameworks/rspec_macro.feature +0 -81
- data/features/test_frameworks/rspec_metadata.feature +0 -150
- data/features/test_frameworks/test_unit.feature +0 -49
- data/lib/vcr/extensions/net_http_response.rb +0 -36
- data/lib/vcr/library_hooks/fakeweb.rb +0 -197
- data/spec/acceptance/concurrency_spec.rb +0 -51
- data/spec/acceptance/threading_spec.rb +0 -34
- data/spec/fixtures/cassette_spec/1_x_cassette.yml +0 -110
- data/spec/fixtures/cassette_spec/empty.yml +0 -0
- data/spec/fixtures/cassette_spec/example.yml +0 -111
- data/spec/fixtures/cassette_spec/with_localhost_requests.yml +0 -111
- data/spec/fixtures/fake_example_responses.yml +0 -110
- data/spec/fixtures/match_requests_on.yml +0 -187
- data/spec/lib/vcr/cassette/erb_renderer_spec.rb +0 -53
- data/spec/lib/vcr/cassette/http_interaction_list_spec.rb +0 -295
- data/spec/lib/vcr/cassette/migrator_spec.rb +0 -196
- data/spec/lib/vcr/cassette/persisters/file_system_spec.rb +0 -75
- data/spec/lib/vcr/cassette/persisters_spec.rb +0 -39
- data/spec/lib/vcr/cassette/serializers_spec.rb +0 -182
- data/spec/lib/vcr/cassette_spec.rb +0 -618
- data/spec/lib/vcr/configuration_spec.rb +0 -326
- data/spec/lib/vcr/deprecations_spec.rb +0 -85
- data/spec/lib/vcr/errors_spec.rb +0 -178
- data/spec/lib/vcr/extensions/net_http_response_spec.rb +0 -86
- data/spec/lib/vcr/library_hooks/excon_spec.rb +0 -104
- data/spec/lib/vcr/library_hooks/fakeweb_spec.rb +0 -169
- data/spec/lib/vcr/library_hooks/faraday_spec.rb +0 -68
- data/spec/lib/vcr/library_hooks/typhoeus_0.4_spec.rb +0 -36
- data/spec/lib/vcr/library_hooks/typhoeus_spec.rb +0 -162
- data/spec/lib/vcr/library_hooks/webmock_spec.rb +0 -117
- data/spec/lib/vcr/library_hooks_spec.rb +0 -51
- data/spec/lib/vcr/middleware/faraday_spec.rb +0 -181
- data/spec/lib/vcr/middleware/rack_spec.rb +0 -115
- data/spec/lib/vcr/request_ignorer_spec.rb +0 -70
- data/spec/lib/vcr/request_matcher_registry_spec.rb +0 -345
- data/spec/lib/vcr/structs_spec.rb +0 -732
- data/spec/lib/vcr/test_frameworks/cucumber_spec.rb +0 -107
- data/spec/lib/vcr/test_frameworks/rspec_spec.rb +0 -94
- data/spec/lib/vcr/util/hooks_spec.rb +0 -158
- data/spec/lib/vcr/util/internet_connection_spec.rb +0 -37
- data/spec/lib/vcr/util/version_checker_spec.rb +0 -31
- data/spec/lib/vcr/version_spec.rb +0 -27
- data/spec/lib/vcr_spec.rb +0 -354
- data/spec/monkey_patches.rb +0 -186
- data/spec/spec_helper.rb +0 -63
- data/spec/support/configuration_stubbing.rb +0 -8
- data/spec/support/cucumber_helpers.rb +0 -39
- data/spec/support/fixnum_extension.rb +0 -10
- data/spec/support/http_library_adapters.rb +0 -289
- data/spec/support/limited_uri.rb +0 -21
- data/spec/support/ruby_interpreter.rb +0 -7
- data/spec/support/shared_example_groups/excon.rb +0 -63
- data/spec/support/shared_example_groups/hook_into_http_library.rb +0 -594
- data/spec/support/shared_example_groups/request_hooks.rb +0 -59
- data/spec/support/sinatra_app.rb +0 -86
- data/spec/support/vcr_localhost_server.rb +0 -76
- data/spec/support/vcr_stub_helpers.rb +0 -17
data/spec/lib/vcr_spec.rb
DELETED
@@ -1,354 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe VCR do
|
4
|
-
def insert_cassette(name = :cassette_test)
|
5
|
-
VCR.insert_cassette(name)
|
6
|
-
end
|
7
|
-
|
8
|
-
describe '.insert_cassette' do
|
9
|
-
it 'creates a new cassette' do
|
10
|
-
expect(insert_cassette).to be_instance_of(VCR::Cassette)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'takes over as the #current_cassette' do
|
14
|
-
orig_cassette = VCR.current_cassette
|
15
|
-
new_cassette = insert_cassette
|
16
|
-
expect(new_cassette).not_to eq(orig_cassette)
|
17
|
-
expect(VCR.current_cassette).to eq(new_cassette)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'raises an error if the stack of inserted cassettes already contains a cassette with the same name' do
|
21
|
-
insert_cassette(:foo)
|
22
|
-
expect {
|
23
|
-
insert_cassette(:foo)
|
24
|
-
}.to raise_error(/There is already a cassette with the same name/)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe '.eject_cassette' do
|
29
|
-
it 'ejects the current cassette' do
|
30
|
-
cassette = insert_cassette
|
31
|
-
expect(cassette).to receive(:eject)
|
32
|
-
VCR.eject_cassette
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'forwards the given options to `Cassette#eject`' do
|
36
|
-
cassette = insert_cassette
|
37
|
-
expect(cassette).to receive(:eject).with(:some => :options)
|
38
|
-
VCR.eject_cassette(:some => :options)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'returns the ejected cassette' do
|
42
|
-
cassette = insert_cassette
|
43
|
-
expect(VCR.eject_cassette).to eq(cassette)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'returns the #current_cassette to the previous one' do
|
47
|
-
cassette1, cassette2 = insert_cassette(:foo1), insert_cassette(:foo2)
|
48
|
-
expect { VCR.eject_cassette }.to change(VCR, :current_cassette).from(cassette2).to(cassette1)
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'keeps the cassette as the current one until after #eject has finished' do
|
52
|
-
cassette = insert_cassette
|
53
|
-
current = nil
|
54
|
-
allow(cassette).to receive(:eject) { current = VCR.current_cassette }
|
55
|
-
|
56
|
-
VCR.eject_cassette
|
57
|
-
|
58
|
-
expect(current).to be(cassette)
|
59
|
-
expect(VCR.current_cassette).not_to be(cassette)
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'properly pops the cassette off the stack even if an error occurs' do
|
63
|
-
cassette = insert_cassette
|
64
|
-
allow(cassette).to receive(:eject) { raise "boom" }
|
65
|
-
expect { VCR.eject_cassette }.to raise_error("boom")
|
66
|
-
expect(VCR.current_cassette).to be_nil
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe '.use_cassette' do
|
71
|
-
it 'inserts a new cassette' do
|
72
|
-
new_cassette = VCR::Cassette.new(:use_cassette_test)
|
73
|
-
expect(VCR).to receive(:insert_cassette).and_return(new_cassette)
|
74
|
-
VCR.use_cassette(:cassette_test) { }
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'yields' do
|
78
|
-
yielded = false
|
79
|
-
VCR.use_cassette(:cassette_test, &lambda { yielded = true })
|
80
|
-
expect(yielded).to be true
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'yields the cassette instance if the block expects an argument' do
|
84
|
-
VCR.use_cassette('name', :record => :new_episodes, &lambda do |cassette|
|
85
|
-
expect(cassette).to equal(VCR.current_cassette)
|
86
|
-
end)
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'yields the cassette instance if the block expects a variable number of args' do
|
90
|
-
VCR.use_cassette('name', :record => :new_episodes) do |*args|
|
91
|
-
expect(args.size).to eq(1)
|
92
|
-
expect(args.first).to equal(VCR.current_cassette)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'ejects the cassette' do
|
97
|
-
expect(VCR).to receive(:eject_cassette)
|
98
|
-
VCR.use_cassette(:cassette_test) { }
|
99
|
-
end
|
100
|
-
|
101
|
-
it 'ejects the cassette even if there is an error' do
|
102
|
-
expect(VCR).to receive(:eject_cassette)
|
103
|
-
test_error = Class.new(StandardError)
|
104
|
-
expect { VCR.use_cassette(:cassette_test) { raise test_error } }.to raise_error(test_error)
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'does not eject a cassette if there was an error inserting it' do
|
108
|
-
expect(VCR).to receive(:insert_cassette).and_raise(StandardError.new('Boom!'))
|
109
|
-
expect(VCR).not_to receive(:eject_cassette)
|
110
|
-
expect { VCR.use_cassette(:test) { } }.to raise_error(StandardError, 'Boom!')
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'raises a helpful error if no block is given' do
|
114
|
-
expect {
|
115
|
-
VCR.use_cassette(:test)
|
116
|
-
}.to raise_error(/requires a block/)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
describe '.http_interactions' do
|
121
|
-
it 'returns the current_cassette.http_interactions when there is a current cassette' do
|
122
|
-
cassette = VCR.insert_cassette("a cassette")
|
123
|
-
expect(VCR.http_interactions).to be(cassette.http_interactions)
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'returns a null list when there is no current cassette' do
|
127
|
-
expect(VCR.current_cassette).to be_nil
|
128
|
-
expect(VCR.http_interactions).to be(VCR::Cassette::HTTPInteractionList::NullList)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe '.real_http_connections_allowed?' do
|
133
|
-
context 'when a cassette is inserted' do
|
134
|
-
it 'returns true if the cassette is recording' do
|
135
|
-
VCR.insert_cassette('foo', :record => :all)
|
136
|
-
expect(VCR.current_cassette).to be_recording
|
137
|
-
expect(VCR.real_http_connections_allowed?).to be true
|
138
|
-
end
|
139
|
-
|
140
|
-
it 'returns false if the cassette is not recording' do
|
141
|
-
VCR.insert_cassette('foo', :record => :none)
|
142
|
-
expect(VCR.current_cassette).not_to be_recording
|
143
|
-
expect(VCR.real_http_connections_allowed?).to be false
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
context 'when no cassette is inserted' do
|
148
|
-
before(:each) do
|
149
|
-
expect(VCR.current_cassette).to be_nil
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'returns true if the allow_http_connections_when_no_cassette option is set to true' do
|
153
|
-
expect(VCR).to be_turned_on
|
154
|
-
VCR.configure { |c| c.allow_http_connections_when_no_cassette = true }
|
155
|
-
expect(VCR.real_http_connections_allowed?).to be true
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'returns true if VCR is turned off' do
|
159
|
-
VCR.turn_off!
|
160
|
-
VCR.configure { |c| c.allow_http_connections_when_no_cassette = false }
|
161
|
-
expect(VCR.real_http_connections_allowed?).to be true
|
162
|
-
end
|
163
|
-
|
164
|
-
it 'returns false if the allow_http_connections_when_no_cassette option is set to false and VCR is turned on' do
|
165
|
-
expect(VCR).to be_turned_on
|
166
|
-
VCR.configure { |c| c.allow_http_connections_when_no_cassette = false }
|
167
|
-
expect(VCR.real_http_connections_allowed?).to be false
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
describe '.request_matchers' do
|
173
|
-
it 'always returns the same memoized request matcher registry instance' do
|
174
|
-
expect(VCR.request_matchers).to be_a(VCR::RequestMatcherRegistry)
|
175
|
-
expect(VCR.request_matchers).to be(VCR.request_matchers)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
describe '.request_ignorer' do
|
180
|
-
it 'always returns the same memoized request ignorer instance' do
|
181
|
-
expect(VCR.request_ignorer).to be_a(VCR::RequestIgnorer)
|
182
|
-
expect(VCR.request_ignorer).to be(VCR.request_ignorer)
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
describe '.library_hooks' do
|
187
|
-
it 'always returns the same memoized LibraryHooks instance' do
|
188
|
-
expect(VCR.library_hooks).to be_a(VCR::LibraryHooks)
|
189
|
-
expect(VCR.library_hooks).to be(VCR.library_hooks)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
describe '.cassette_serializers' do
|
194
|
-
it 'always returns the same memoized cassette serializers instance' do
|
195
|
-
expect(VCR.cassette_serializers).to be_a(VCR::Cassette::Serializers)
|
196
|
-
expect(VCR.cassette_serializers).to be(VCR.cassette_serializers)
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
describe ".cassette_persisters" do
|
201
|
-
it "always returns the same memoized Cassette::Persisters instance" do
|
202
|
-
expect(VCR.cassette_persisters).to be_a(VCR::Cassette::Persisters)
|
203
|
-
expect(VCR.cassette_persisters).to be(VCR.cassette_persisters)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
describe '.configuration' do
|
208
|
-
it 'returns the configuration object' do
|
209
|
-
expect(VCR.configuration).to be_a(VCR::Configuration)
|
210
|
-
end
|
211
|
-
|
212
|
-
it 'memoizes the instance' do
|
213
|
-
expect(VCR.configuration).to be(VCR.configuration)
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
describe '.configure' do
|
218
|
-
it 'yields the configuration object' do
|
219
|
-
yielded_object = nil
|
220
|
-
VCR.configure do |obj|
|
221
|
-
yielded_object = obj
|
222
|
-
end
|
223
|
-
expect(yielded_object).to eq(VCR.configuration)
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
describe '.cucumber_tags' do
|
228
|
-
it 'yields a cucumber tags object' do
|
229
|
-
yielded_object = nil
|
230
|
-
VCR.cucumber_tags do |obj|
|
231
|
-
yielded_object = obj
|
232
|
-
end
|
233
|
-
expect(yielded_object).to be_instance_of(VCR::CucumberTags)
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
describe '.record_http_interaction' do
|
238
|
-
before(:each) { allow(VCR).to receive(:current_cassette).and_return(current_cassette) }
|
239
|
-
let(:interaction) { double(:request => double) }
|
240
|
-
|
241
|
-
context 'when there is not a current cassette' do
|
242
|
-
let(:current_cassette) { nil }
|
243
|
-
|
244
|
-
it 'does not record a request' do
|
245
|
-
# we can't set a message expectation on nil, but there is no place to record it to...
|
246
|
-
# this mostly tests that there is no error.
|
247
|
-
VCR.record_http_interaction(interaction)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
context 'when there is a current cassette' do
|
252
|
-
let(:current_cassette) { double('current cassette') }
|
253
|
-
|
254
|
-
it 'records the request when it should not be ignored' do
|
255
|
-
allow(VCR.request_ignorer).to receive(:ignore?).with(interaction.request).and_return(false)
|
256
|
-
expect(current_cassette).to receive(:record_http_interaction).with(interaction)
|
257
|
-
VCR.record_http_interaction(interaction)
|
258
|
-
end
|
259
|
-
|
260
|
-
it 'does not record the request when it should be ignored' do
|
261
|
-
allow(VCR.request_ignorer).to receive(:ignore?).with(interaction.request).and_return(true)
|
262
|
-
expect(current_cassette).not_to receive(:record_http_interaction)
|
263
|
-
VCR.record_http_interaction(interaction)
|
264
|
-
end
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|
268
|
-
describe '.turn_off!' do
|
269
|
-
it 'indicates it is turned off' do
|
270
|
-
VCR.turn_off!
|
271
|
-
expect(VCR).not_to be_turned_on
|
272
|
-
end
|
273
|
-
|
274
|
-
it 'raises an error if a cassette is in use' do
|
275
|
-
VCR.insert_cassette('foo')
|
276
|
-
expect {
|
277
|
-
VCR.turn_off!
|
278
|
-
}.to raise_error(VCR::CassetteInUseError, /foo/)
|
279
|
-
end
|
280
|
-
|
281
|
-
it 'causes an error to be raised if you insert a cassette while VCR is turned off' do
|
282
|
-
VCR.turn_off!
|
283
|
-
expect {
|
284
|
-
VCR.insert_cassette('foo')
|
285
|
-
}.to raise_error(VCR::TurnedOffError)
|
286
|
-
end
|
287
|
-
|
288
|
-
it 'raises an ArgumentError when given an invalid option' do
|
289
|
-
expect {
|
290
|
-
VCR.turn_off!(:invalid_option => true)
|
291
|
-
}.to raise_error(ArgumentError)
|
292
|
-
end
|
293
|
-
|
294
|
-
it 'sets ignore_cassettes to false' do
|
295
|
-
VCR.turn_off!
|
296
|
-
expect(VCR.send(:ignore_cassettes?)).to equal(false)
|
297
|
-
end
|
298
|
-
|
299
|
-
context 'when `:ignore_cassettes => true` is passed' do
|
300
|
-
before(:each) { VCR.turn_off!(:ignore_cassettes => true) }
|
301
|
-
|
302
|
-
it 'ignores cassette insertions' do
|
303
|
-
VCR.insert_cassette('foo')
|
304
|
-
expect(VCR.current_cassette).to be_nil
|
305
|
-
end
|
306
|
-
|
307
|
-
it 'still runs a block passed to use_cassette' do
|
308
|
-
yielded = false
|
309
|
-
|
310
|
-
VCR.use_cassette('foo') do
|
311
|
-
yielded = true
|
312
|
-
expect(VCR.current_cassette).to be_nil
|
313
|
-
end
|
314
|
-
|
315
|
-
expect(yielded).to be true
|
316
|
-
end
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
describe '.turn_on!' do
|
321
|
-
before(:each) { VCR.turn_off! }
|
322
|
-
|
323
|
-
it 'indicates it is turned on' do
|
324
|
-
VCR.turn_on!
|
325
|
-
expect(VCR).to be_turned_on
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
describe '.turned_off' do
|
330
|
-
it 'yields with VCR turned off' do
|
331
|
-
expect(VCR).to be_turned_on
|
332
|
-
yielded = false
|
333
|
-
|
334
|
-
VCR.turned_off do
|
335
|
-
yielded = true
|
336
|
-
expect(VCR).not_to be_turned_on
|
337
|
-
end
|
338
|
-
|
339
|
-
expect(yielded).to eq(true)
|
340
|
-
expect(VCR).to be_turned_on
|
341
|
-
end
|
342
|
-
|
343
|
-
it 'passes options through to .turn_off!' do
|
344
|
-
expect(VCR).to receive(:turn_off!).with(:ignore_cassettes => true)
|
345
|
-
VCR.turned_off(:ignore_cassettes => true) { }
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
describe '.turned_on?' do
|
350
|
-
it 'is on by default' do
|
351
|
-
expect(VCR).to be_turned_on
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
data/spec/monkey_patches.rb
DELETED
@@ -1,186 +0,0 @@
|
|
1
|
-
module MonkeyPatches
|
2
|
-
extend self
|
3
|
-
|
4
|
-
NET_HTTP_SINGLETON = class << Net::HTTP; self; end
|
5
|
-
|
6
|
-
NET_HTTP_MONKEY_PATCHES = [
|
7
|
-
[Net::BufferedIO, :initialize],
|
8
|
-
[Net::HTTP, :request],
|
9
|
-
[Net::HTTP, :connect],
|
10
|
-
[NET_HTTP_SINGLETON, :socket_type]
|
11
|
-
]
|
12
|
-
|
13
|
-
ALL_MONKEY_PATCHES = NET_HTTP_MONKEY_PATCHES.dup
|
14
|
-
|
15
|
-
def enable!(scope)
|
16
|
-
case scope
|
17
|
-
when :fakeweb
|
18
|
-
realias_net_http :with_fakeweb
|
19
|
-
enable!(:vcr) # fakeweb hook relies upon VCR's Net::HTTP monkey patch
|
20
|
-
when :webmock
|
21
|
-
::WebMock.reset!
|
22
|
-
::WebMock::HttpLibAdapters::NetHttpAdapter.enable!
|
23
|
-
::WebMock::HttpLibAdapters::TyphoeusAdapter.enable! if defined?(::Typhoeus)
|
24
|
-
::WebMock::HttpLibAdapters::ExconAdapter.enable! if defined?(::Excon)
|
25
|
-
$original_webmock_callbacks.each do |cb|
|
26
|
-
::WebMock::CallbackRegistry.add_callback(cb[:options], cb[:block])
|
27
|
-
end
|
28
|
-
when :typhoeus
|
29
|
-
$original_typhoeus_global_hooks.each do |hook|
|
30
|
-
::Typhoeus.on_complete << hook
|
31
|
-
end
|
32
|
-
::Typhoeus.before.clear
|
33
|
-
$original_typhoeus_before_hooks.each do |hook|
|
34
|
-
::Typhoeus.before << hook
|
35
|
-
end
|
36
|
-
when :typhoeus_0_4
|
37
|
-
::Typhoeus::Hydra.global_hooks = $original_typhoeus_global_hooks
|
38
|
-
::Typhoeus::Hydra.stub_finders.clear
|
39
|
-
$original_typhoeus_stub_finders.each do |finder|
|
40
|
-
::Typhoeus::Hydra.stub_finders << finder
|
41
|
-
end
|
42
|
-
when :excon
|
43
|
-
VCR::LibraryHooks::Excon.configure_middleware
|
44
|
-
when :vcr
|
45
|
-
realias Net::HTTP, :request, :with_vcr
|
46
|
-
else raise ArgumentError.new("Unexpected scope: #{scope}")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def disable_all!
|
51
|
-
realias_all :without_monkeypatches
|
52
|
-
|
53
|
-
if defined?(::WebMock::HttpLibAdapters)
|
54
|
-
::WebMock::HttpLibAdapters::NetHttpAdapter.disable!
|
55
|
-
::WebMock::HttpLibAdapters::TyphoeusAdapter.disable! if defined?(::Typhoeus)
|
56
|
-
::WebMock::HttpLibAdapters::ExconAdapter.disable! if defined?(::Excon)
|
57
|
-
::WebMock::CallbackRegistry.reset
|
58
|
-
::WebMock::StubRegistry.instance.request_stubs = []
|
59
|
-
end
|
60
|
-
|
61
|
-
if defined?(::Typhoeus.before)
|
62
|
-
::Typhoeus.on_complete.clear
|
63
|
-
::Typhoeus.before.clear
|
64
|
-
elsif defined?(::Typhoeus::Hydra)
|
65
|
-
::Typhoeus::Hydra.clear_global_hooks
|
66
|
-
::Typhoeus::Hydra.stub_finders.clear
|
67
|
-
end
|
68
|
-
|
69
|
-
if defined?(::Excon)
|
70
|
-
::Excon.defaults[:middlewares].delete(VCR::Middleware::Excon::Request)
|
71
|
-
::Excon.defaults[:middlewares].delete(VCR::Middleware::Excon::Response)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def init
|
76
|
-
# capture the monkey patched definitions so we can realias to them in the future
|
77
|
-
ALL_MONKEY_PATCHES.each do |mp|
|
78
|
-
capture_method_definition(mp.first, mp.last, false)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
|
84
|
-
def capture_method_definition(klass, method, original)
|
85
|
-
klass.class_eval do
|
86
|
-
monkeypatch_methods = [:vcr, :fakeweb].select { |m| method_defined?(:"#{method}_with_#{m}") }
|
87
|
-
|
88
|
-
if original
|
89
|
-
if monkeypatch_methods.size > 0
|
90
|
-
raise "The following monkeypatch methods have already been defined #{method}: #{monkey_patch_methods.inspect}"
|
91
|
-
end
|
92
|
-
alias_name = :"#{method}_without_monkeypatches"
|
93
|
-
else
|
94
|
-
if monkeypatch_methods.size == 0
|
95
|
-
raise "No monkey patch methods have been defined for #{method}"
|
96
|
-
end
|
97
|
-
alias_name = :"#{method}_with_monkeypatches"
|
98
|
-
end
|
99
|
-
|
100
|
-
alias_method alias_name, method
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
# capture the original method definitions before the monkey patches have been defined
|
105
|
-
# so we can realias to the originals in the future
|
106
|
-
ALL_MONKEY_PATCHES.each do |mp|
|
107
|
-
capture_method_definition(mp.first, mp.last, true)
|
108
|
-
end
|
109
|
-
|
110
|
-
def realias(klass, method, alias_extension)
|
111
|
-
klass.class_eval do
|
112
|
-
old_verbose, $VERBOSE = $VERBOSE, nil
|
113
|
-
alias_method method, :"#{method}_#{alias_extension}"
|
114
|
-
$VERBOSE = old_verbose
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def realias_all(alias_extension)
|
119
|
-
ALL_MONKEY_PATCHES.each do |mp|
|
120
|
-
realias mp.first, mp.last, alias_extension
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def realias_net_http(alias_extension)
|
125
|
-
NET_HTTP_MONKEY_PATCHES.each do |mp|
|
126
|
-
realias mp.first, mp.last, alias_extension
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# Require all the HTTP libraries--these must be required before WebMock
|
132
|
-
# for WebMock to work with them.
|
133
|
-
require 'httpclient'
|
134
|
-
|
135
|
-
if RUBY_INTERPRETER == :mri
|
136
|
-
require 'typhoeus'
|
137
|
-
begin
|
138
|
-
require 'patron'
|
139
|
-
require 'em-http-request'
|
140
|
-
require 'curb'
|
141
|
-
rescue LoadError
|
142
|
-
# these are not always available, depending on the Gemfile used
|
143
|
-
warn $!.message
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
if defined?(::Typhoeus.before)
|
148
|
-
require 'vcr/library_hooks/typhoeus'
|
149
|
-
$typhoeus_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].last
|
150
|
-
$original_typhoeus_global_hooks = Typhoeus.on_complete.dup
|
151
|
-
$original_typhoeus_before_hooks = Typhoeus.before.dup
|
152
|
-
elsif defined?(::Typhoeus::Hydra.global_hooks)
|
153
|
-
require 'vcr/library_hooks/typhoeus'
|
154
|
-
$typhoeus_0_4_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].first
|
155
|
-
$typhoeus_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].last
|
156
|
-
$original_typhoeus_global_hooks = Typhoeus::Hydra.global_hooks.dup
|
157
|
-
$original_typhoeus_stub_finders = Typhoeus::Hydra.stub_finders.dup
|
158
|
-
end
|
159
|
-
|
160
|
-
require 'vcr/library_hooks/fakeweb'
|
161
|
-
$fakeweb_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].last
|
162
|
-
|
163
|
-
# All Net::HTTP monkey patches have now been loaded, so capture the
|
164
|
-
# appropriate method definitions so we can disable them later.
|
165
|
-
MonkeyPatches.init
|
166
|
-
|
167
|
-
# Disable FakeWeb/VCR Net::HTTP patches before WebMock
|
168
|
-
# subclasses Net::HTTP and inherits them...
|
169
|
-
MonkeyPatches.disable_all!
|
170
|
-
|
171
|
-
require 'vcr/library_hooks/webmock'
|
172
|
-
$original_webmock_callbacks = ::WebMock::CallbackRegistry.callbacks
|
173
|
-
|
174
|
-
require 'vcr/library_hooks/excon'
|
175
|
-
$excon_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].last
|
176
|
-
|
177
|
-
# disable all by default; we'll enable specific ones when we need them
|
178
|
-
MonkeyPatches.disable_all!
|
179
|
-
|
180
|
-
RSpec.configure do |config|
|
181
|
-
[:fakeweb, :webmock, :vcr, :typhoeus, :typhoeus_0_4, :excon].each do |scope|
|
182
|
-
config.before(:all, :with_monkey_patches => scope) { MonkeyPatches.enable!(scope) }
|
183
|
-
config.after(:all, :with_monkey_patches => scope) { MonkeyPatches.disable_all! }
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|