vcr 1.3.3 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/.rspec +2 -0
  2. data/CHANGELOG.md +16 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +23 -4
  5. data/Guardfile +6 -0
  6. data/README.md +5 -4
  7. data/Rakefile +1 -3
  8. data/TODO.md +3 -0
  9. data/cucumber.yml +3 -3
  10. data/features/cassettes/no_cassette.feature +67 -0
  11. data/features/configuration/allow_http_connections_when_no_cassette.feature +54 -0
  12. data/features/configuration/ignore_localhost.feature +2 -2
  13. data/features/configuration/stub_with.feature +40 -16
  14. data/features/http_libraries/em_http_request.feature +217 -0
  15. data/features/middleware/faraday.feature +89 -0
  16. data/features/middleware/rack.feature +95 -0
  17. data/features/step_definitions/cli_steps.rb +7 -0
  18. data/lib/vcr.rb +48 -4
  19. data/lib/vcr/config.rb +11 -2
  20. data/lib/vcr/extensions/net_http.rb +4 -0
  21. data/lib/vcr/http_stubbing_adapters/common.rb +35 -4
  22. data/lib/vcr/http_stubbing_adapters/faraday.rb +80 -0
  23. data/lib/vcr/http_stubbing_adapters/typhoeus.rb +1 -1
  24. data/lib/vcr/http_stubbing_adapters/webmock.rb +18 -16
  25. data/lib/vcr/middleware/cassette_arguments.rb +18 -0
  26. data/lib/vcr/middleware/common.rb +22 -0
  27. data/lib/vcr/middleware/faraday.rb +79 -0
  28. data/lib/vcr/middleware/rack.rb +13 -0
  29. data/lib/vcr/request_matcher.rb +16 -1
  30. data/lib/vcr/version.rb +1 -1
  31. data/spec/config_spec.rb +27 -2
  32. data/spec/fixtures/1.9.1/fake_example.com_responses.yml +0 -29
  33. data/spec/fixtures/1.9.1/match_requests_on.yml +2 -2
  34. data/spec/fixtures/not_1.9.1/fake_example.com_responses.yml +0 -29
  35. data/spec/http_stubbing_adapters/faraday_spec.rb +84 -0
  36. data/spec/middleware/cassette_arguments_spec.rb +32 -0
  37. data/spec/middleware/faraday_spec.rb +52 -0
  38. data/spec/middleware/rack_spec.rb +54 -0
  39. data/spec/monkey_patches.rb +1 -0
  40. data/spec/request_matcher_spec.rb +36 -0
  41. data/spec/spec_helper.rb +10 -0
  42. data/spec/support/http_library_adapters.rb +113 -25
  43. data/spec/support/http_stubbing_adapter.rb +55 -16
  44. data/spec/vcr_spec.rb +92 -4
  45. data/vcr.gemspec +1 -0
  46. metadata +72 -34
@@ -3,6 +3,61 @@ shared_examples_for "an http stubbing adapter" do |supported_http_libraries, sup
3
3
  before(:each) { VCR.stub!(:http_stubbing_adapter).and_return(subject) }
4
4
  subject { described_class }
5
5
 
6
+ describe '.ignore_localhost?' do
7
+ [true, false].each do |val|
8
+ it "returns #{val} when ignore_localhost is set to #{val}" do
9
+ subject.ignore_localhost = val
10
+ subject.ignore_localhost?.should == val
11
+ end
12
+ end
13
+
14
+ it "returns false when ignore_localhost is set to nil" do
15
+ subject.ignore_localhost = nil
16
+ subject.ignore_localhost?.should == false
17
+ end
18
+ end
19
+
20
+ describe '.set_http_connections_allowed_to_default' do
21
+ [true, false].each do |default|
22
+ context "when VCR::Config.allow_http_connections_when_no_cassette is #{default}" do
23
+ before(:each) { VCR::Config.allow_http_connections_when_no_cassette = default }
24
+
25
+ it "sets http_connections_allowed to #{default}" do
26
+ subject.http_connections_allowed = !default
27
+ expect {
28
+ subject.set_http_connections_allowed_to_default
29
+ }.to change { subject.http_connections_allowed? }.from(!default).to(default)
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '.exclusively_enabled' do
36
+ def adapter_enabled?(adapter)
37
+ enabled = nil
38
+ subject.exclusively_enabled { enabled = adapter.enabled? }
39
+ enabled
40
+ end
41
+
42
+ VCR::HttpStubbingAdapters::Common.adapters.each do |adapter|
43
+ if adapter == described_class
44
+ it "yields with #{adapter} enabled" do
45
+ adapter_enabled?(adapter).should == true
46
+ end
47
+ else
48
+ it "yields without #{adapter} enabled" do
49
+ adapter_enabled?(adapter).should == false
50
+ end
51
+ end
52
+ end
53
+
54
+ it 're-enables all adapters afterwards' do
55
+ VCR::HttpStubbingAdapters::Common.adapters.all? { |a| a.should be_enabled }
56
+ subject.exclusively_enabled { }
57
+ VCR::HttpStubbingAdapters::Common.adapters.all? { |a| a.should be_enabled }
58
+ end
59
+ end
60
+
6
61
  if other.include?(:needs_net_http_extension)
7
62
  describe '#request_uri' do
8
63
  it 'returns the uri for the given http request' do
@@ -18,23 +73,7 @@ shared_examples_for "an http stubbing adapter" do |supported_http_libraries, sup
18
73
  subject.request_uri(net_http, request).should == 'http://user:pass@example.com:80/auth.txt'
19
74
  end
20
75
  end
21
- end
22
76
 
23
- describe '.ignore_localhost?' do
24
- [true, false].each do |val|
25
- it "returns #{val} when ignore_localhost is set to #{val}" do
26
- subject.ignore_localhost = val
27
- subject.ignore_localhost?.should == val
28
- end
29
- end
30
-
31
- it "returns false when ignore_localhost is set to nil" do
32
- subject.ignore_localhost = nil
33
- subject.ignore_localhost?.should == false
34
- end
35
- end
36
-
37
- if other.include?(:needs_net_http_extension)
38
77
  describe '#request_stubbed? using specific match_attributes' do
39
78
  let(:interactions) { YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'fixtures', YAML_SERIALIZATION_VERSION, 'match_requests_on.yml'))) }
40
79
 
data/spec/vcr_spec.rb CHANGED
@@ -49,6 +49,19 @@ describe VCR do
49
49
  yielded.should be_true
50
50
  end
51
51
 
52
+ it 'yields the cassette instance if the block expects an argument' do
53
+ VCR.use_cassette('name', :record => :new_episodes) do |cassette|
54
+ cassette.should equal(VCR.current_cassette)
55
+ end
56
+ end
57
+
58
+ it 'yields the cassette instance if the block expects a variable number of args' do
59
+ VCR.use_cassette('name', :record => :new_episodes) do |*args|
60
+ args.size.should == 1
61
+ args.first.should equal(VCR.current_cassette)
62
+ end
63
+ end
64
+
52
65
  it 'ejects the cassette' do
53
66
  VCR.should_receive(:eject_cassette)
54
67
  VCR.use_cassette(:cassette_test) { }
@@ -75,9 +88,9 @@ describe VCR do
75
88
  yielded_object.should == VCR::Config
76
89
  end
77
90
 
78
- it "disallows http connections" do
79
- VCR.http_stubbing_adapter.should respond_to(:http_connections_allowed=)
80
- VCR.http_stubbing_adapter.should_receive(:http_connections_allowed=).with(false)
91
+ it "sets http_stubbing_adapter.http_connections_allowed to the configured default" do
92
+ VCR.http_stubbing_adapter.should respond_to(:set_http_connections_allowed_to_default)
93
+ VCR.http_stubbing_adapter.should_receive(:set_http_connections_allowed_to_default)
81
94
  VCR.config { }
82
95
  end
83
96
 
@@ -125,7 +138,8 @@ describe VCR do
125
138
 
126
139
  {
127
140
  :fakeweb => VCR::HttpStubbingAdapters::FakeWeb,
128
- :webmock => VCR::HttpStubbingAdapters::WebMock
141
+ :webmock => VCR::HttpStubbingAdapters::WebMock,
142
+ :faraday => VCR::HttpStubbingAdapters::Faraday
129
143
  }.each do |symbol, klass|
130
144
  it "returns #{klass} for :#{symbol}" do
131
145
  VCR::Config.stub_with symbol
@@ -213,4 +227,78 @@ describe VCR do
213
227
  end
214
228
  end
215
229
  end
230
+
231
+ describe '.turn_off!' do
232
+ before(:each) { VCR.http_stubbing_adapter.http_connections_allowed = false }
233
+
234
+ it 'indicates it is turned off' do
235
+ VCR.turn_off!
236
+ VCR.should_not be_turned_on
237
+ end
238
+
239
+ it 'allows http requests' do
240
+ expect {
241
+ VCR.turn_off!
242
+ }.to change {
243
+ VCR.http_stubbing_adapter.http_connections_allowed?
244
+ }.from(false).to(true)
245
+ end
246
+
247
+ it 'raises an error if a cassette is in use' do
248
+ VCR.insert_cassette('foo')
249
+ expect {
250
+ VCR.turn_off!
251
+ }.to raise_error(VCR::CassetteInUseError)
252
+ end
253
+
254
+ it 'causes an error to be raised if you insert a cassette while VCR is turned off' do
255
+ VCR.turn_off!
256
+ expect {
257
+ VCR.insert_cassette('foo')
258
+ }.to raise_error(VCR::TurnedOffError)
259
+ end
260
+ end
261
+
262
+ describe '.turn_on!' do
263
+ before(:each) { VCR.turn_off! }
264
+
265
+ it 'indicates it is turned on' do
266
+ VCR.turn_on!
267
+ VCR.should be_turned_on
268
+ end
269
+
270
+ it 'sets http_connections_allowed to the default' do
271
+ VCR.http_stubbing_adapter.should respond_to(:set_http_connections_allowed_to_default)
272
+ VCR.http_stubbing_adapter.should_receive(:set_http_connections_allowed_to_default)
273
+ VCR.turn_on!
274
+ end
275
+ end
276
+
277
+ describe '.turned_off' do
278
+ it 'yields with VCR turned off' do
279
+ VCR.should be_turned_on
280
+ yielded = false
281
+
282
+ VCR.turned_off do
283
+ yielded = true
284
+ VCR.should_not be_turned_on
285
+ end
286
+
287
+ yielded.should == true
288
+ VCR.should be_turned_on
289
+ end
290
+ end
291
+
292
+ describe '.turned_on?' do
293
+ it 'is on by default' do
294
+ # clear internal state
295
+ VCR.instance_eval do
296
+ instance_variables.each do |var|
297
+ remove_instance_variable(var)
298
+ end
299
+ end
300
+
301
+ VCR.should be_turned_on
302
+ end
303
+ end
216
304
  end
data/vcr.gemspec CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  'fakeweb' => '~> 1.3.0',
30
30
  'webmock' => '~> 1.6.0',
31
31
 
32
+ 'faraday' => '~> 0.5.3',
32
33
  'httpclient' => '~> 2.1.5.2',
33
34
 
34
35
  'timecop' => '~> 0.3.5',
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 3
9
- - 3
10
- version: 1.3.3
8
+ - 4
9
+ - 0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Myron Marston
@@ -15,11 +15,27 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-21 00:00:00 -08:00
18
+ date: 2010-12-03 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ hash: 13
28
+ segments:
29
+ - 0
30
+ - 5
31
+ - 3
32
+ version: 0.5.3
33
+ type: :development
34
+ name: faraday
35
+ prerelease: false
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ requirement: &id002 !ruby/object:Gem::Requirement
23
39
  none: false
24
40
  requirements:
25
41
  - - ~>
@@ -33,9 +49,9 @@ dependencies:
33
49
  type: :development
34
50
  name: fakeweb
35
51
  prerelease: false
36
- version_requirements: *id001
52
+ version_requirements: *id002
37
53
  - !ruby/object:Gem::Dependency
38
- requirement: &id002 !ruby/object:Gem::Requirement
54
+ requirement: &id003 !ruby/object:Gem::Requirement
39
55
  none: false
40
56
  requirements:
41
57
  - - ~>
@@ -50,9 +66,9 @@ dependencies:
50
66
  type: :development
51
67
  name: httpclient
52
68
  prerelease: false
53
- version_requirements: *id002
69
+ version_requirements: *id003
54
70
  - !ruby/object:Gem::Dependency
55
- requirement: &id003 !ruby/object:Gem::Requirement
71
+ requirement: &id004 !ruby/object:Gem::Requirement
56
72
  none: false
57
73
  requirements:
58
74
  - - ~>
@@ -66,9 +82,9 @@ dependencies:
66
82
  type: :development
67
83
  name: rake
68
84
  prerelease: false
69
- version_requirements: *id003
85
+ version_requirements: *id004
70
86
  - !ruby/object:Gem::Dependency
71
- requirement: &id004 !ruby/object:Gem::Requirement
87
+ requirement: &id005 !ruby/object:Gem::Requirement
72
88
  none: false
73
89
  requirements:
74
90
  - - ~>
@@ -82,9 +98,9 @@ dependencies:
82
98
  type: :development
83
99
  name: timecop
84
100
  prerelease: false
85
- version_requirements: *id004
101
+ version_requirements: *id005
86
102
  - !ruby/object:Gem::Dependency
87
- requirement: &id005 !ruby/object:Gem::Requirement
103
+ requirement: &id006 !ruby/object:Gem::Requirement
88
104
  none: false
89
105
  requirements:
90
106
  - - ~>
@@ -98,9 +114,9 @@ dependencies:
98
114
  type: :development
99
115
  name: rspec
100
116
  prerelease: false
101
- version_requirements: *id005
117
+ version_requirements: *id006
102
118
  - !ruby/object:Gem::Dependency
103
- requirement: &id006 !ruby/object:Gem::Requirement
119
+ requirement: &id007 !ruby/object:Gem::Requirement
104
120
  none: false
105
121
  requirements:
106
122
  - - "="
@@ -114,9 +130,9 @@ dependencies:
114
130
  type: :development
115
131
  name: rack
116
132
  prerelease: false
117
- version_requirements: *id006
133
+ version_requirements: *id007
118
134
  - !ruby/object:Gem::Dependency
119
- requirement: &id007 !ruby/object:Gem::Requirement
135
+ requirement: &id008 !ruby/object:Gem::Requirement
120
136
  none: false
121
137
  requirements:
122
138
  - - ~>
@@ -130,9 +146,9 @@ dependencies:
130
146
  type: :development
131
147
  name: aruba
132
148
  prerelease: false
133
- version_requirements: *id007
149
+ version_requirements: *id008
134
150
  - !ruby/object:Gem::Dependency
135
- requirement: &id008 !ruby/object:Gem::Requirement
151
+ requirement: &id009 !ruby/object:Gem::Requirement
136
152
  none: false
137
153
  requirements:
138
154
  - - ~>
@@ -146,9 +162,9 @@ dependencies:
146
162
  type: :development
147
163
  name: sinatra
148
164
  prerelease: false
149
- version_requirements: *id008
165
+ version_requirements: *id009
150
166
  - !ruby/object:Gem::Dependency
151
- requirement: &id009 !ruby/object:Gem::Requirement
167
+ requirement: &id010 !ruby/object:Gem::Requirement
152
168
  none: false
153
169
  requirements:
154
170
  - - ~>
@@ -162,9 +178,9 @@ dependencies:
162
178
  type: :development
163
179
  name: bundler
164
180
  prerelease: false
165
- version_requirements: *id009
181
+ version_requirements: *id010
166
182
  - !ruby/object:Gem::Dependency
167
- requirement: &id010 !ruby/object:Gem::Requirement
183
+ requirement: &id011 !ruby/object:Gem::Requirement
168
184
  none: false
169
185
  requirements:
170
186
  - - ~>
@@ -178,9 +194,9 @@ dependencies:
178
194
  type: :development
179
195
  name: cucumber
180
196
  prerelease: false
181
- version_requirements: *id010
197
+ version_requirements: *id011
182
198
  - !ruby/object:Gem::Dependency
183
- requirement: &id011 !ruby/object:Gem::Requirement
199
+ requirement: &id012 !ruby/object:Gem::Requirement
184
200
  none: false
185
201
  requirements:
186
202
  - - ~>
@@ -194,9 +210,9 @@ dependencies:
194
210
  type: :development
195
211
  name: webmock
196
212
  prerelease: false
197
- version_requirements: *id011
213
+ version_requirements: *id012
198
214
  - !ruby/object:Gem::Dependency
199
- requirement: &id012 !ruby/object:Gem::Requirement
215
+ requirement: &id013 !ruby/object:Gem::Requirement
200
216
  none: false
201
217
  requirements:
202
218
  - - ~>
@@ -210,9 +226,9 @@ dependencies:
210
226
  type: :development
211
227
  name: curb
212
228
  prerelease: false
213
- version_requirements: *id012
229
+ version_requirements: *id013
214
230
  - !ruby/object:Gem::Dependency
215
- requirement: &id013 !ruby/object:Gem::Requirement
231
+ requirement: &id014 !ruby/object:Gem::Requirement
216
232
  none: false
217
233
  requirements:
218
234
  - - ~>
@@ -226,9 +242,9 @@ dependencies:
226
242
  type: :development
227
243
  name: patron
228
244
  prerelease: false
229
- version_requirements: *id013
245
+ version_requirements: *id014
230
246
  - !ruby/object:Gem::Dependency
231
- requirement: &id014 !ruby/object:Gem::Requirement
247
+ requirement: &id015 !ruby/object:Gem::Requirement
232
248
  none: false
233
249
  requirements:
234
250
  - - ~>
@@ -242,9 +258,9 @@ dependencies:
242
258
  type: :development
243
259
  name: em-http-request
244
260
  prerelease: false
245
- version_requirements: *id014
261
+ version_requirements: *id015
246
262
  - !ruby/object:Gem::Dependency
247
- requirement: &id015 !ruby/object:Gem::Requirement
263
+ requirement: &id016 !ruby/object:Gem::Requirement
248
264
  none: false
249
265
  requirements:
250
266
  - - ~>
@@ -258,7 +274,7 @@ dependencies:
258
274
  type: :development
259
275
  name: typhoeus
260
276
  prerelease: false
261
- version_requirements: *id015
277
+ version_requirements: *id016
262
278
  description: VCR provides helpers to record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. It works with any ruby testing framework, and provides built-in support for cucumber.
263
279
  email: myron.marston@gmail.com
264
280
  executables: []
@@ -271,6 +287,7 @@ files:
271
287
  - .document
272
288
  - .gitignore
273
289
  - .gitmodules
290
+ - .rspec
274
291
  - CHANGELOG.md
275
292
  - Gemfile
276
293
  - Gemfile.lock
@@ -290,11 +307,15 @@ files:
290
307
  - features/cassettes/record_modes/new_episodes.feature
291
308
  - features/cassettes/record_modes/none.feature
292
309
  - features/cassettes/request_matching.feature
310
+ - features/configuration/allow_http_connections_when_no_cassette.feature
293
311
  - features/configuration/cassette_library_dir.feature
294
312
  - features/configuration/default_cassette_options.feature
295
313
  - features/configuration/ignore_localhost.feature
296
314
  - features/configuration/stub_with.feature
315
+ - features/http_libraries/em_http_request.feature
297
316
  - features/http_libraries/net_http.feature
317
+ - features/middleware/faraday.feature
318
+ - features/middleware/rack.feature
298
319
  - features/step_definitions/cli_steps.rb
299
320
  - features/support/aruba_workaround/aruba_patches.rb
300
321
  - features/support/aruba_workaround/background_process.rb
@@ -315,10 +336,15 @@ files:
315
336
  - lib/vcr/extensions/net_http_response.rb
316
337
  - lib/vcr/http_stubbing_adapters/common.rb
317
338
  - lib/vcr/http_stubbing_adapters/fakeweb.rb
339
+ - lib/vcr/http_stubbing_adapters/faraday.rb
318
340
  - lib/vcr/http_stubbing_adapters/multi_object_proxy.rb
319
341
  - lib/vcr/http_stubbing_adapters/typhoeus.rb
320
342
  - lib/vcr/http_stubbing_adapters/webmock.rb
321
343
  - lib/vcr/internet_connection.rb
344
+ - lib/vcr/middleware/cassette_arguments.rb
345
+ - lib/vcr/middleware/common.rb
346
+ - lib/vcr/middleware/faraday.rb
347
+ - lib/vcr/middleware/rack.rb
322
348
  - lib/vcr/ping.rb
323
349
  - lib/vcr/request_matcher.rb
324
350
  - lib/vcr/rspec.rb
@@ -353,10 +379,14 @@ files:
353
379
  - spec/fixtures/not_1.9.1/fake_example.com_responses.yml
354
380
  - spec/fixtures/not_1.9.1/match_requests_on.yml
355
381
  - spec/http_stubbing_adapters/fakeweb_spec.rb
382
+ - spec/http_stubbing_adapters/faraday_spec.rb
356
383
  - spec/http_stubbing_adapters/multi_object_proxy_spec.rb
357
384
  - spec/http_stubbing_adapters/typhoeus_spec.rb
358
385
  - spec/http_stubbing_adapters/webmock_spec.rb
359
386
  - spec/internet_connection_spec.rb
387
+ - spec/middleware/cassette_arguments_spec.rb
388
+ - spec/middleware/faraday_spec.rb
389
+ - spec/middleware/rack_spec.rb
360
390
  - spec/monkey_patches.rb
361
391
  - spec/request_matcher_spec.rb
362
392
  - spec/rspec_spec.rb
@@ -423,11 +453,15 @@ test_files:
423
453
  - features/cassettes/record_modes/new_episodes.feature
424
454
  - features/cassettes/record_modes/none.feature
425
455
  - features/cassettes/request_matching.feature
456
+ - features/configuration/allow_http_connections_when_no_cassette.feature
426
457
  - features/configuration/cassette_library_dir.feature
427
458
  - features/configuration/default_cassette_options.feature
428
459
  - features/configuration/ignore_localhost.feature
429
460
  - features/configuration/stub_with.feature
461
+ - features/http_libraries/em_http_request.feature
430
462
  - features/http_libraries/net_http.feature
463
+ - features/middleware/faraday.feature
464
+ - features/middleware/rack.feature
431
465
  - features/step_definitions/cli_steps.rb
432
466
  - features/support/aruba_workaround/aruba_patches.rb
433
467
  - features/support/aruba_workaround/background_process.rb
@@ -465,10 +499,14 @@ test_files:
465
499
  - spec/fixtures/not_1.9.1/fake_example.com_responses.yml
466
500
  - spec/fixtures/not_1.9.1/match_requests_on.yml
467
501
  - spec/http_stubbing_adapters/fakeweb_spec.rb
502
+ - spec/http_stubbing_adapters/faraday_spec.rb
468
503
  - spec/http_stubbing_adapters/multi_object_proxy_spec.rb
469
504
  - spec/http_stubbing_adapters/typhoeus_spec.rb
470
505
  - spec/http_stubbing_adapters/webmock_spec.rb
471
506
  - spec/internet_connection_spec.rb
507
+ - spec/middleware/cassette_arguments_spec.rb
508
+ - spec/middleware/faraday_spec.rb
509
+ - spec/middleware/rack_spec.rb
472
510
  - spec/monkey_patches.rb
473
511
  - spec/request_matcher_spec.rb
474
512
  - spec/rspec_spec.rb