vcr 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +3 -0
  3. data/.travis.yml +2 -0
  4. data/CHANGELOG.md +31 -0
  5. data/Gemfile +1 -2
  6. data/Gemfile.lock +63 -46
  7. data/README.md +5 -2
  8. data/features/cassettes/allow_unused_http_interactions.feature +1 -1
  9. data/features/cassettes/automatic_re_recording.feature +1 -1
  10. data/features/cassettes/decompress.feature +3 -3
  11. data/features/cassettes/dynamic_erb.feature +2 -2
  12. data/features/cassettes/exclusive.feature +1 -1
  13. data/features/cassettes/naming.feature +1 -1
  14. data/features/cassettes/no_cassette.feature +6 -3
  15. data/features/cassettes/persistence.feature +1 -1
  16. data/features/cassettes/update_content_length_header.feature +1 -1
  17. data/features/configuration/allow_http_connections_when_no_cassette.feature +1 -1
  18. data/features/configuration/cassette_library_dir.feature +1 -1
  19. data/features/configuration/debug_logging.feature +5 -5
  20. data/features/configuration/filter_sensitive_data.feature +2 -2
  21. data/features/configuration/hook_into.feature +4 -7
  22. data/features/getting_started.md +2 -2
  23. data/features/hooks/before_playback.feature +5 -5
  24. data/features/hooks/before_record.feature +5 -5
  25. data/features/middleware/rack.feature +2 -2
  26. data/features/record_modes/all.feature +1 -1
  27. data/features/record_modes/new_episodes.feature +1 -1
  28. data/features/record_modes/none.feature +1 -1
  29. data/features/record_modes/once.feature +1 -1
  30. data/features/request_matching/custom_matcher.feature +1 -1
  31. data/features/request_matching/headers.feature +0 -2
  32. data/features/request_matching/playback_repeats.feature +1 -1
  33. data/features/request_matching/uri_without_param.feature +1 -1
  34. data/features/support/env.rb +1 -0
  35. data/features/test_frameworks/cucumber.feature +8 -8
  36. data/features/test_frameworks/rspec_macro.feature +2 -2
  37. data/features/test_frameworks/rspec_metadata.feature +1 -1
  38. data/gemfiles/typhoeus_old.gemfile +1 -1
  39. data/gemfiles/typhoeus_old.gemfile.lock +31 -57
  40. data/lib/vcr/cassette/migrator.rb +8 -1
  41. data/lib/vcr/configuration.rb +9 -2
  42. data/lib/vcr/library_hooks/excon.rb +2 -184
  43. data/lib/vcr/library_hooks/typhoeus.rb +1 -1
  44. data/lib/vcr/library_hooks/typhoeus_0.4.rb +4 -0
  45. data/lib/vcr/library_hooks/webmock.rb +1 -1
  46. data/lib/vcr/middleware/excon.rb +226 -0
  47. data/lib/vcr/version.rb +1 -1
  48. data/spec/acceptance/threading_spec.rb +28 -0
  49. data/spec/monkey_patches.rb +3 -7
  50. data/spec/quality_spec.rb +1 -1
  51. data/spec/spec_helper.rb +7 -4
  52. data/spec/support/http_library_adapters.rb +4 -3
  53. data/spec/support/shared_example_groups/excon.rb +22 -0
  54. data/spec/support/shared_example_groups/hook_into_http_library.rb +46 -46
  55. data/spec/support/shared_example_groups/request_hooks.rb +8 -8
  56. data/spec/vcr/cassette/erb_renderer_spec.rb +5 -5
  57. data/spec/vcr/cassette/http_interaction_list_spec.rb +52 -40
  58. data/spec/vcr/cassette/migrator_spec.rb +11 -11
  59. data/spec/vcr/cassette/persisters/file_system_spec.rb +11 -11
  60. data/spec/vcr/cassette/persisters_spec.rb +2 -2
  61. data/spec/vcr/cassette/serializers_spec.rb +13 -12
  62. data/spec/vcr/cassette_spec.rb +58 -58
  63. data/spec/vcr/configuration_spec.rb +43 -31
  64. data/spec/vcr/deprecations_spec.rb +3 -3
  65. data/spec/vcr/errors_spec.rb +25 -25
  66. data/spec/vcr/extensions/net_http_response_spec.rb +7 -7
  67. data/spec/vcr/library_hooks/excon_spec.rb +7 -85
  68. data/spec/vcr/library_hooks/fakeweb_spec.rb +15 -13
  69. data/spec/vcr/library_hooks/faraday_spec.rb +4 -4
  70. data/spec/vcr/library_hooks/typhoeus_0.4_spec.rb +5 -0
  71. data/spec/vcr/library_hooks/typhoeus_spec.rb +3 -3
  72. data/spec/vcr/library_hooks/webmock_spec.rb +13 -5
  73. data/spec/vcr/library_hooks_spec.rb +9 -9
  74. data/spec/vcr/middleware/faraday_spec.rb +10 -10
  75. data/spec/vcr/middleware/rack_spec.rb +20 -15
  76. data/spec/vcr/request_ignorer_spec.rb +3 -3
  77. data/spec/vcr/request_matcher_registry_spec.rb +88 -61
  78. data/spec/vcr/structs_spec.rb +85 -85
  79. data/spec/vcr/test_frameworks/cucumber_spec.rb +7 -7
  80. data/spec/vcr/test_frameworks/rspec_spec.rb +10 -10
  81. data/spec/vcr/util/hooks_spec.rb +20 -20
  82. data/spec/vcr/util/internet_connection_spec.rb +2 -2
  83. data/spec/vcr_spec.rb +50 -48
  84. data/vcr.gemspec +4 -4
  85. metadata +308 -372
@@ -11,9 +11,9 @@ describe VCR::Cassette do
11
11
  describe '#file' do
12
12
  it 'delegates the file resolution to the FileSystem persister' do
13
13
  fs = VCR::Cassette::Persisters::FileSystem
14
- fs.should respond_to(:absolute_path_to_file).with(1).argument
14
+ expect(fs).to respond_to(:absolute_path_to_file).with(1).argument
15
15
  fs.should_receive(:absolute_path_to_file).with("cassette name.yml") { "f.yml" }
16
- VCR::Cassette.new("cassette name").file.should eq("f.yml")
16
+ expect(VCR::Cassette.new("cassette name").file).to eq("f.yml")
17
17
  end
18
18
 
19
19
  it 'raises a NotImplementedError when a different persister is used' do
@@ -25,15 +25,15 @@ describe VCR::Cassette do
25
25
 
26
26
  describe '#tags' do
27
27
  it 'returns a blank array if no tag has been set' do
28
- VCR::Cassette.new("name").tags.should eq([])
28
+ expect(VCR::Cassette.new("name").tags).to eq([])
29
29
  end
30
30
 
31
31
  it 'converts a single :tag to an array' do
32
- VCR::Cassette.new("name", :tag => :foo).tags.should eq([:foo])
32
+ expect(VCR::Cassette.new("name", :tag => :foo).tags).to eq([:foo])
33
33
  end
34
34
 
35
35
  it 'accepts an array as the :tags option' do
36
- VCR::Cassette.new("name", :tags => [:foo]).tags.should eq([:foo])
36
+ expect(VCR::Cassette.new("name", :tags => [:foo]).tags).to eq([:foo])
37
37
  end
38
38
  end
39
39
 
@@ -42,9 +42,9 @@ describe VCR::Cassette do
42
42
 
43
43
  it 'adds the interaction to #new_recorded_interactions' do
44
44
  cassette = VCR::Cassette.new(:test_cassette)
45
- cassette.new_recorded_interactions.should eq([])
45
+ expect(cassette.new_recorded_interactions).to eq([])
46
46
  cassette.record_http_interaction(the_interaction)
47
- cassette.new_recorded_interactions.should eq([the_interaction])
47
+ expect(cassette.new_recorded_interactions).to eq([the_interaction])
48
48
  end
49
49
  end
50
50
 
@@ -65,11 +65,11 @@ describe VCR::Cassette do
65
65
  it 'includes the hash form of all recorded interactions' do
66
66
  interaction_1.stub(:to_hash => { "i" => 1, 'body' => '' })
67
67
  interaction_2.stub(:to_hash => { "i" => 2, 'body' => '' })
68
- subject.serializable_hash.should include('http_interactions' => [{ "i" => 1, 'body' => '' }, { "i" => 2, 'body' => '' }])
68
+ expect(subject.serializable_hash).to include('http_interactions' => [{ "i" => 1, 'body' => '' }, { "i" => 2, 'body' => '' }])
69
69
  end
70
70
 
71
71
  it 'includes additional metadata about the cassette' do
72
- metadata.should eq("recorded_with" => "VCR #{VCR.version}")
72
+ expect(metadata).to eq("recorded_with" => "VCR #{VCR.version}")
73
73
  end
74
74
  end
75
75
 
@@ -77,13 +77,13 @@ describe VCR::Cassette do
77
77
  [:all, :new_episodes].each do |mode|
78
78
  it "returns true when the record mode is :#{mode}" do
79
79
  cassette = VCR::Cassette.new("foo", :record => mode)
80
- cassette.should be_recording
80
+ expect(cassette).to be_recording
81
81
  end
82
82
  end
83
83
 
84
84
  it "returns false when the record mode is :none" do
85
85
  cassette = VCR::Cassette.new("foo", :record => :none)
86
- cassette.should_not be_recording
86
+ expect(cassette).not_to be_recording
87
87
  end
88
88
 
89
89
  context 'when the record mode is :once' do
@@ -93,22 +93,22 @@ describe VCR::Cassette do
93
93
 
94
94
  it 'returns false when there is an existing cassette file with content' do
95
95
  cassette = VCR::Cassette.new("example", :record => :once)
96
- File.should exist(cassette.file)
97
- File.size?(cassette.file).should be_true
98
- cassette.should_not be_recording
96
+ expect(File).to exist(cassette.file)
97
+ expect(File.size?(cassette.file)).to be_true
98
+ expect(cassette).not_to be_recording
99
99
  end
100
100
 
101
101
  it 'returns true when there is an empty existing cassette file' do
102
102
  cassette = VCR::Cassette.new("empty", :record => :once)
103
- File.should exist(cassette.file)
104
- File.size?(cassette.file).should be_false
105
- cassette.should be_recording
103
+ expect(File).to exist(cassette.file)
104
+ expect(File.size?(cassette.file)).to be_false
105
+ expect(cassette).to be_recording
106
106
  end
107
107
 
108
108
  it 'returns true when there is no existing cassette file' do
109
109
  cassette = VCR::Cassette.new("non_existant_file", :record => :once)
110
- File.should_not exist(cassette.file)
111
- cassette.should be_recording
110
+ expect(File).not_to exist(cassette.file)
111
+ expect(cassette).to be_recording
112
112
  end
113
113
  end
114
114
  end
@@ -118,12 +118,12 @@ describe VCR::Cassette do
118
118
 
119
119
  it "returns the provided options" do
120
120
  c = VCR::Cassette.new('example', :match_requests_on => [:uri])
121
- c.match_requests_on.should eq([:uri])
121
+ expect(c.match_requests_on).to eq([:uri])
122
122
  end
123
123
 
124
124
  it "returns a the default #match_requests_on when it has not been specified for the cassette" do
125
125
  c = VCR::Cassette.new('example')
126
- c.match_requests_on.should eq([:uri, :method])
126
+ expect(c.match_requests_on).to eq([:uri, :method])
127
127
  end
128
128
  end
129
129
 
@@ -184,7 +184,7 @@ describe VCR::Cassette do
184
184
 
185
185
  it 'does not raise an error in the case of an empty file' do
186
186
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
187
- VCR::Cassette.new('empty', :record => :none).send(:previously_recorded_interactions).should eq([])
187
+ expect(VCR::Cassette.new('empty', :record => :none).send(:previously_recorded_interactions)).to eq([])
188
188
  end
189
189
 
190
190
  let(:custom_persister) { stub("custom persister") }
@@ -204,7 +204,7 @@ describe VCR::Cassette do
204
204
 
205
205
  it "defaults the record mode to #{record_mode} when VCR.configuration.default_cassette_options[:record] is #{record_mode}" do
206
206
  cassette = VCR::Cassette.new(:test)
207
- cassette.record_mode.should eq(record_mode)
207
+ expect(cassette.record_mode).to eq(record_mode)
208
208
  end
209
209
  end
210
210
 
@@ -249,7 +249,7 @@ describe VCR::Cassette do
249
249
  before(:each) { File.stub(:exist?).with(file_name).and_return(false) }
250
250
 
251
251
  it "has :#{record_mode} for the record mode" do
252
- subject.record_mode.should eq(record_mode)
252
+ expect(subject.record_mode).to eq(record_mode)
253
253
  end
254
254
  end
255
255
 
@@ -273,7 +273,7 @@ describe VCR::Cassette do
273
273
  ] end
274
274
 
275
275
  it "has :#{record_mode} for the record mode" do
276
- subject.record_mode.should eq(record_mode)
276
+ expect(subject.record_mode).to eq(record_mode)
277
277
  end
278
278
  end
279
279
 
@@ -286,12 +286,12 @@ describe VCR::Cassette do
286
286
 
287
287
  it "has :all for the record mode when there is an internet connection available" do
288
288
  VCR::InternetConnection.stub(:available? => true)
289
- subject.record_mode.should eq(:all)
289
+ expect(subject.record_mode).to eq(:all)
290
290
  end
291
291
 
292
292
  it "has :#{record_mode} for the record mode when there is no internet connection available" do
293
293
  VCR::InternetConnection.stub(:available? => false)
294
- subject.record_mode.should eq(record_mode)
294
+ expect(subject.record_mode).to eq(record_mode)
295
295
  end
296
296
  end
297
297
  end
@@ -305,35 +305,35 @@ describe VCR::Cassette do
305
305
 
306
306
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
307
307
  cassette = VCR::Cassette.new('with_localhost_requests', :record => record_mode)
308
- cassette.send(:previously_recorded_interactions).map { |i| URI.parse(i.request.uri).host }.should eq(%w[example.com])
308
+ expect(cassette.send(:previously_recorded_interactions).map { |i| URI.parse(i.request.uri).host }).to eq(%w[example.com])
309
309
  end
310
310
 
311
311
  it "loads the recorded interactions from the library yml file" do
312
312
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
313
313
  cassette = VCR::Cassette.new('example', :record => record_mode)
314
314
 
315
- cassette.should have(3).previously_recorded_interactions
315
+ expect(cassette).to have(3).previously_recorded_interactions
316
316
 
317
317
  i1, i2, i3 = *cassette.send(:previously_recorded_interactions)
318
318
 
319
- i1.request.method.should eq(:get)
320
- i1.request.uri.should eq('http://example.com/')
321
- i1.response.body.should =~ /You have reached this web page by typing.+example\.com/
319
+ expect(i1.request.method).to eq(:get)
320
+ expect(i1.request.uri).to eq('http://example.com/')
321
+ expect(i1.response.body).to match(/You have reached this web page by typing.+example\.com/)
322
322
 
323
- i2.request.method.should eq(:get)
324
- i2.request.uri.should eq('http://example.com/foo')
325
- i2.response.body.should =~ /foo was not found on this server/
323
+ expect(i2.request.method).to eq(:get)
324
+ expect(i2.request.uri).to eq('http://example.com/foo')
325
+ expect(i2.response.body).to match(/foo was not found on this server/)
326
326
 
327
- i3.request.method.should eq(:get)
328
- i3.request.uri.should eq('http://example.com/')
329
- i3.response.body.should =~ /Another example\.com response/
327
+ expect(i3.request.method).to eq(:get)
328
+ expect(i3.request.uri).to eq('http://example.com/')
329
+ expect(i3.response.body).to match(/Another example\.com response/)
330
330
  end
331
331
 
332
332
  [true, false].each do |value|
333
333
  it "instantiates the http_interactions with allow_playback_repeats = #{value} if given :allow_playback_repeats => #{value}" do
334
334
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
335
335
  cassette = VCR::Cassette.new('example', :record => record_mode, :allow_playback_repeats => value)
336
- cassette.http_interactions.allow_playback_repeats.should eq(value)
336
+ expect(cassette.http_interactions.allow_playback_repeats).to eq(value)
337
337
  end
338
338
  end
339
339
 
@@ -341,14 +341,14 @@ describe VCR::Cassette do
341
341
  VCR.stub(:http_interactions => stub)
342
342
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
343
343
  cassette = VCR::Cassette.new('example', :record => record_mode, :exclusive => true)
344
- cassette.http_interactions.parent_list.should be(VCR::Cassette::HTTPInteractionList::NullList)
344
+ expect(cassette.http_interactions.parent_list).to be(VCR::Cassette::HTTPInteractionList::NullList)
345
345
  end
346
346
 
347
347
  it "instantiates the http_interactions with parent_list set to VCR.http_interactions if given :exclusive => false" do
348
348
  VCR.stub(:http_interactions => stub)
349
349
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
350
350
  cassette = VCR::Cassette.new('example', :record => record_mode, :exclusive => false)
351
- cassette.http_interactions.parent_list.should be(VCR.http_interactions)
351
+ expect(cassette.http_interactions.parent_list).to be(VCR.http_interactions)
352
352
  end
353
353
 
354
354
  if stub_requests
@@ -360,7 +360,7 @@ describe VCR::Cassette do
360
360
  ).exactly(3).times
361
361
 
362
362
  cassette = VCR::Cassette.new('example', :record => record_mode)
363
- cassette.should have(3).previously_recorded_interactions
363
+ expect(cassette).to have(3).previously_recorded_interactions
364
364
  end
365
365
 
366
366
  it 'does not playback any interactions that are ignored in a before_playback hook' do
@@ -370,21 +370,21 @@ describe VCR::Cassette do
370
370
 
371
371
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
372
372
  cassette = VCR::Cassette.new('example', :record => record_mode)
373
- cassette.should have(2).previously_recorded_interactions
373
+ expect(cassette).to have(2).previously_recorded_interactions
374
374
  end
375
375
 
376
376
  it 'instantiates the http_interactions with the loaded interactions and the request matchers' do
377
377
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
378
378
  cassette = VCR::Cassette.new('example', :record => record_mode, :match_requests_on => [:body, :headers])
379
- cassette.http_interactions.interactions.should have(3).interactions
380
- cassette.http_interactions.request_matchers.should eq([:body, :headers])
379
+ expect(cassette.http_interactions.interactions).to have(3).interactions
380
+ expect(cassette.http_interactions.request_matchers).to eq([:body, :headers])
381
381
  end
382
382
  else
383
383
  it 'instantiates the http_interactions with the no interactions and the request matchers' do
384
384
  VCR.configuration.cassette_library_dir = "#{VCR::SPEC_ROOT}/fixtures/cassette_spec"
385
385
  cassette = VCR::Cassette.new('example', :record => record_mode, :match_requests_on => [:body, :headers])
386
- cassette.http_interactions.interactions.should have(0).interactions
387
- cassette.http_interactions.request_matchers.should eq([:body, :headers])
386
+ expect(cassette.http_interactions.interactions).to have(0).interactions
387
+ expect(cassette.http_interactions.request_matchers).to eq([:body, :headers])
388
388
  end
389
389
  end
390
390
  end
@@ -398,7 +398,7 @@ describe VCR::Cassette do
398
398
  cassette = VCR.insert_cassette("foo", :allow_unused_http_interactions => false)
399
399
 
400
400
  interaction_list = cassette.http_interactions
401
- interaction_list.should respond_to(:assert_no_unused_interactions!).with(0).arguments
401
+ expect(interaction_list).to respond_to(:assert_no_unused_interactions!).with(0).arguments
402
402
  interaction_list.should_receive(:assert_no_unused_interactions!)
403
403
 
404
404
  cassette.eject
@@ -408,7 +408,7 @@ describe VCR::Cassette do
408
408
  cassette = VCR.insert_cassette("foo", :allow_unused_http_interactions => true)
409
409
 
410
410
  interaction_list = cassette.http_interactions
411
- interaction_list.should respond_to(:assert_no_unused_interactions!)
411
+ expect(interaction_list).to respond_to(:assert_no_unused_interactions!)
412
412
  interaction_list.should_not_receive(:assert_no_unused_interactions!)
413
413
 
414
414
  cassette.eject
@@ -428,12 +428,12 @@ describe VCR::Cassette do
428
428
  it "writes the serializable_hash to disk as yaml" do
429
429
  cassette = VCR::Cassette.new(:eject_test)
430
430
  cassette.record_http_interaction http_interaction # so it has one
431
- cassette.should respond_to(:serializable_hash)
431
+ expect(cassette).to respond_to(:serializable_hash)
432
432
  cassette.stub(:serializable_hash => { "http_interactions" => [1, 3, 5] })
433
433
 
434
434
  expect { cassette.eject }.to change { File.exist?(cassette.file) }.from(false).to(true)
435
435
  saved_stuff = YAML.load_file(cassette.file)
436
- saved_stuff.should eq("http_interactions" => [1, 3, 5])
436
+ expect(saved_stuff).to eq("http_interactions" => [1, 3, 5])
437
437
  end
438
438
 
439
439
  it 'invokes the appropriately tagged before_record hooks' do
@@ -471,7 +471,7 @@ describe VCR::Cassette do
471
471
  cassette.eject
472
472
 
473
473
  saved_recorded_interactions = ::YAML.load_file(cassette.file)
474
- saved_recorded_interactions["http_interactions"].should eq([interaction_2.to_hash])
474
+ expect(saved_recorded_interactions["http_interactions"]).to eq([interaction_2.to_hash])
475
475
  end
476
476
 
477
477
  it 'does not write the cassette to disk if all interactions have been ignored' do
@@ -485,7 +485,7 @@ describe VCR::Cassette do
485
485
  cassette.stub!(:new_recorded_interactions).and_return([interaction_1])
486
486
  cassette.eject
487
487
 
488
- File.should_not exist(cassette.file)
488
+ expect(File).not_to exist(cassette.file)
489
489
  end
490
490
 
491
491
  it "writes the recorded interactions to a subdirectory if the cassette name includes a directory" do
@@ -495,7 +495,7 @@ describe VCR::Cassette do
495
495
 
496
496
  expect { cassette.eject }.to change { File.exist?(cassette.file) }.from(false).to(true)
497
497
  saved_recorded_interactions = YAML.load_file(cassette.file)
498
- saved_recorded_interactions["http_interactions"].should eq(recorded_interactions.map(&:to_hash))
498
+ expect(saved_recorded_interactions["http_interactions"]).to eq(recorded_interactions.map(&:to_hash))
499
499
  end
500
500
 
501
501
  [:all, :none, :new_episodes].each do |record_mode|
@@ -540,16 +540,16 @@ describe VCR::Cassette do
540
540
 
541
541
  if record_mode == :all
542
542
  it 'replaces previously recorded interactions with new ones when the requests match' do
543
- saved_recorded_interactions.first.should eq(interaction_foo_2)
544
- saved_recorded_interactions.should_not include(interaction_foo_1)
543
+ expect(saved_recorded_interactions.first).to eq(interaction_foo_2)
544
+ expect(saved_recorded_interactions).not_to include(interaction_foo_1)
545
545
  end
546
546
 
547
547
  it 'appends new recorded interactions that do not match existing ones' do
548
- saved_recorded_interactions.last.should eq(interaction_bar)
548
+ expect(saved_recorded_interactions.last).to eq(interaction_bar)
549
549
  end
550
550
  else
551
551
  it 'appends new recorded interactions after existing ones' do
552
- saved_recorded_interactions.should eq([interaction_foo_1, interaction_foo_2, interaction_bar])
552
+ expect(saved_recorded_interactions).to eq([interaction_foo_1, interaction_foo_2, interaction_bar])
553
553
  end
554
554
  end
555
555
  end
@@ -17,13 +17,13 @@ describe VCR::Configuration do
17
17
  relative_dir = 'tmp/cassette_library_dir/new_dir'
18
18
  subject.cassette_library_dir = relative_dir
19
19
  absolute_dir = File.join(VCR::SPEC_ROOT.sub(/\/spec\z/, ''), relative_dir)
20
- subject.cassette_library_dir.should eq(absolute_dir)
20
+ expect(subject.cassette_library_dir).to eq(absolute_dir)
21
21
  end
22
22
  end
23
23
 
24
24
  describe '#default_cassette_options' do
25
25
  it 'has a hash with some defaults' do
26
- subject.default_cassette_options.should eq({
26
+ expect(subject.default_cassette_options).to eq({
27
27
  :match_requests_on => VCR::RequestMatcherRegistry::DEFAULT_MATCHERS,
28
28
  :allow_unused_http_interactions => true,
29
29
  :record => :once,
@@ -34,22 +34,22 @@ describe VCR::Configuration do
34
34
 
35
35
  it "returns #{VCR::RequestMatcherRegistry::DEFAULT_MATCHERS.inspect} for :match_requests_on when other defaults have been set" do
36
36
  subject.default_cassette_options = { :record => :none }
37
- subject.default_cassette_options.should include(:match_requests_on => VCR::RequestMatcherRegistry::DEFAULT_MATCHERS)
37
+ expect(subject.default_cassette_options).to include(:match_requests_on => VCR::RequestMatcherRegistry::DEFAULT_MATCHERS)
38
38
  end
39
39
 
40
40
  it "returns :once for :record when other defaults have been set" do
41
41
  subject.default_cassette_options = { :erb => :true }
42
- subject.default_cassette_options.should include(:record => :once)
42
+ expect(subject.default_cassette_options).to include(:record => :once)
43
43
  end
44
44
 
45
45
  it "allows defaults to be overriden" do
46
46
  subject.default_cassette_options = { :record => :all }
47
- subject.default_cassette_options.should include(:record => :all)
47
+ expect(subject.default_cassette_options).to include(:record => :all)
48
48
  end
49
49
 
50
50
  it "allows other keys to be set" do
51
51
  subject.default_cassette_options = { :re_record_interval => 10 }
52
- subject.default_cassette_options.should include(:re_record_interval => 10)
52
+ expect(subject.default_cassette_options).to include(:re_record_interval => 10)
53
53
  end
54
54
  end
55
55
 
@@ -62,7 +62,7 @@ describe VCR::Configuration do
62
62
  matcher_run = false
63
63
  subject.register_request_matcher(:custom) { |r1, r2| matcher_run = true }
64
64
  VCR.request_matchers[:custom].matches?(:r1, :r2)
65
- matcher_run.should be_true
65
+ expect(matcher_run).to be_true
66
66
  end
67
67
  end
68
68
 
@@ -83,7 +83,7 @@ describe VCR::Configuration do
83
83
  called = false
84
84
  subject.after_library_hooks_loaded { called = true }
85
85
  subject.hook_into :fakeweb
86
- called.should be_true
86
+ expect(called).to be_true
87
87
  end
88
88
  end
89
89
 
@@ -108,7 +108,7 @@ describe VCR::Configuration do
108
108
  block_called = false
109
109
  subject.ignore_request { |r| block_called = true }
110
110
  VCR.request_ignorer.ignore?(stub(:parsed_uri => uri))
111
- block_called.should be_true
111
+ expect(block_called).to be_true
112
112
  end
113
113
  end
114
114
 
@@ -116,7 +116,7 @@ describe VCR::Configuration do
116
116
  [true, false].each do |val|
117
117
  it "sets the allow_http_connections_when_no_cassette to #{val} when set to #{val}" do
118
118
  subject.allow_http_connections_when_no_cassette = val
119
- subject.allow_http_connections_when_no_cassette?.should eq(val)
119
+ expect(subject.allow_http_connections_when_no_cassette?).to eq(val)
120
120
  end
121
121
  end
122
122
  end
@@ -133,8 +133,8 @@ describe VCR::Configuration do
133
133
  ::Net::HTTP.get_response(URI("http://localhost:#{VCR::SinatraApp.port}/foo"))
134
134
  end
135
135
 
136
- before_record_req.should_not respond_to(:type)
137
- before_request_req.should respond_to(:type)
136
+ expect(before_record_req).not_to respond_to(:type)
137
+ expect(before_request_req).to respond_to(:type)
138
138
  end unless (RUBY_VERSION =~ /^1\.8/ || RUBY_INTERPRETER == :jruby)
139
139
 
140
140
  specify 'the filter_sensitive_data option works even when it modifies the URL in a way that makes it an invalid URI' do
@@ -156,9 +156,9 @@ describe VCR::Configuration do
156
156
  called = false
157
157
  VCR.configuration.send(hook_type, :my_tag) { called = true }
158
158
  VCR.configuration.invoke_hook(hook_type, stub, stub(:tags => []))
159
- called.should be_false
159
+ expect(called).to be_false
160
160
  VCR.configuration.invoke_hook(hook_type, stub, stub(:tags => [:my_tag]))
161
- called.should be_true
161
+ expect(called).to be_true
162
162
  end
163
163
  end
164
164
  end
@@ -194,14 +194,14 @@ describe VCR::Configuration do
194
194
  yielded_interaction = nil
195
195
  subject.send(method, 'foo', &lambda { |i| yielded_interaction = i; 'bar' })
196
196
  subject.invoke_hook(:before_record, interaction, stub.as_null_object)
197
- yielded_interaction.should equal(interaction)
197
+ expect(yielded_interaction).to equal(interaction)
198
198
  end
199
199
 
200
200
  it 'yields the interaction to the block for the before_playback hook' do
201
201
  yielded_interaction = nil
202
202
  subject.send(method, 'foo', &lambda { |i| yielded_interaction = i; 'bar' })
203
203
  subject.invoke_hook(:before_playback, interaction, stub.as_null_object)
204
- yielded_interaction.should equal(interaction)
204
+ expect(yielded_interaction).to equal(interaction)
205
205
  end
206
206
  end
207
207
  end
@@ -218,11 +218,11 @@ describe VCR::Configuration do
218
218
  yielded = false
219
219
  subject.after_http_request(:stubbed_by_vcr?) { |req| yielded = true }
220
220
  subject.invoke_hook(:after_http_request, request(:stubbed_by_vcr), response)
221
- yielded.should be_true
221
+ expect(yielded).to be_true
222
222
 
223
223
  yielded = false
224
224
  subject.invoke_hook(:after_http_request, request(:ignored), response)
225
- yielded.should be_false
225
+ expect(yielded).to be_false
226
226
  end
227
227
  end
228
228
 
@@ -239,7 +239,7 @@ describe VCR::Configuration do
239
239
  it 'allows a custom serializer to be registered' do
240
240
  expect { subject.cassette_serializers[:custom] }.to raise_error(ArgumentError)
241
241
  subject.cassette_serializers[:custom] = custom_serializer
242
- subject.cassette_serializers[:custom].should be(custom_serializer)
242
+ expect(subject.cassette_serializers[:custom]).to be(custom_serializer)
243
243
  end
244
244
  end
245
245
 
@@ -248,7 +248,7 @@ describe VCR::Configuration do
248
248
  it 'allows a custom persister to be registered' do
249
249
  expect { subject.cassette_persisters[:custom] }.to raise_error(ArgumentError)
250
250
  subject.cassette_persisters[:custom] = custom_persister
251
- subject.cassette_persisters[:custom].should be(custom_persister)
251
+ expect(subject.cassette_persisters[:custom]).to be(custom_persister)
252
252
  end
253
253
  end
254
254
 
@@ -256,11 +256,11 @@ describe VCR::Configuration do
256
256
  let(:custom_parser) { stub }
257
257
  it 'allows a custom uri parser to be set' do
258
258
  subject.uri_parser = custom_parser
259
- subject.uri_parser.should eq(custom_parser)
259
+ expect(subject.uri_parser).to eq(custom_parser)
260
260
  end
261
261
 
262
262
  it "uses Ruby's standard library `URI` as a default" do
263
- subject.uri_parser.should eq(URI)
263
+ expect(subject.uri_parser).to eq(URI)
264
264
  end
265
265
  end
266
266
 
@@ -271,43 +271,55 @@ describe VCR::Configuration do
271
271
 
272
272
  context "default hook" do
273
273
  it "returns false when there is no current cassette" do
274
- subject.preserve_exact_body_bytes_for?(message_for "string").should be_false
274
+ expect(subject.preserve_exact_body_bytes_for?(message_for "string")).to be_false
275
275
  end
276
276
 
277
277
  it "returns false when the current cassette has been created without the :preserve_exact_body_bytes option" do
278
278
  VCR.insert_cassette('foo')
279
- subject.preserve_exact_body_bytes_for?(message_for "string").should be_false
279
+ expect(subject.preserve_exact_body_bytes_for?(message_for "string")).to be_false
280
280
  end
281
281
 
282
282
  it 'returns true when the current cassette has been created with the :preserve_exact_body_bytes option' do
283
283
  VCR.insert_cassette('foo', :preserve_exact_body_bytes => true)
284
- subject.preserve_exact_body_bytes_for?(message_for "string").should be_true
284
+ expect(subject.preserve_exact_body_bytes_for?(message_for "string")).to be_true
285
285
  end
286
286
  end
287
287
 
288
288
  it "returns true when the configured block returns true" do
289
289
  subject.preserve_exact_body_bytes { |msg| msg.body == "a" }
290
- subject.preserve_exact_body_bytes_for?(message_for "a").should be_true
291
- subject.preserve_exact_body_bytes_for?(message_for "b").should be_false
290
+ expect(subject.preserve_exact_body_bytes_for?(message_for "a")).to be_true
291
+ expect(subject.preserve_exact_body_bytes_for?(message_for "b")).to be_false
292
292
  end
293
293
 
294
294
  it "returns true when any of the registered blocks returns true" do
295
295
  called_hooks = []
296
296
  subject.preserve_exact_body_bytes { called_hooks << :hook_1; false }
297
297
  subject.preserve_exact_body_bytes { called_hooks << :hook_2; true }
298
- subject.preserve_exact_body_bytes_for?(message_for "a").should be_true
299
- called_hooks.should eq([:hook_1, :hook_2])
298
+ expect(subject.preserve_exact_body_bytes_for?(message_for "a")).to be_true
299
+ expect(called_hooks).to eq([:hook_1, :hook_2])
300
300
  end
301
301
 
302
302
  it "invokes the configured hook with the http message and the current cassette" do
303
303
  VCR.use_cassette('example') do |cassette|
304
- cassette.should be_a(VCR::Cassette)
304
+ expect(cassette).to be_a(VCR::Cassette)
305
305
  message = stub(:message)
306
306
 
307
307
  yielded_objects = nil
308
308
  subject.preserve_exact_body_bytes { |a, b| yielded_objects = [a, b] }
309
309
  subject.preserve_exact_body_bytes_for?(message)
310
- yielded_objects.should eq([message, cassette])
310
+ expect(yielded_objects).to eq([message, cassette])
311
+ end
312
+ end
313
+ end
314
+
315
+ describe "#configure_rspec_metadata!" do
316
+ it "only configures the underlying metadata once, no matter how many times it is called" do
317
+ VCR::RSpec::Metadata.should_receive(:configure!).once
318
+ VCR.configure do |c|
319
+ c.configure_rspec_metadata!
320
+ end
321
+ VCR.configure do |c|
322
+ c.configure_rspec_metadata!
311
323
  end
312
324
  end
313
325
  end