vcr 2.4.0 → 2.5.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.
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
@@ -10,7 +10,7 @@ module VCR
10
10
  # * `parts` [Array<Integer>] List of the version parts.
11
11
  def version
12
12
  @version ||= begin
13
- string = '2.4.0'
13
+ string = '2.5.0'
14
14
 
15
15
  def string.parts
16
16
  split('.').map { |p| p.to_i }
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe VCR do
4
+ context 'when used in a multithreaded environment', :with_monkey_patches => :excon do
5
+ def recorded_content_for(name)
6
+ VCR.cassette_persisters[:file_system]["#{name}.yml"].to_s
7
+ end
8
+
9
+ it 'can use a cassette in an #around_http_request hook', :if => (RUBY_VERSION.to_f > 1.8) do
10
+ VCR.configure do |vcr|
11
+ vcr.around_http_request do |req|
12
+ VCR.use_cassette(req.parsed_uri.path, &req)
13
+ end
14
+ end
15
+
16
+ thread = Thread.start do
17
+ Excon.get "http://localhost:#{VCR::SinatraApp.port}/search?q=thread"
18
+ end
19
+
20
+ Excon.get "http://localhost:#{VCR::SinatraApp.port}/foo",
21
+ :response_block => Proc.new { thread.join }
22
+
23
+ expect(recorded_content_for("search") +
24
+ recorded_content_for("foo")).to include("query: thread", "FOO!")
25
+ end
26
+ end
27
+ end
28
+
@@ -42,10 +42,7 @@ module MonkeyPatches
42
42
  ::Typhoeus::Hydra.stub_finders << finder
43
43
  end
44
44
  when :excon
45
- $original_excon_stubs.each do |stub|
46
- ::Excon.stubs << stub
47
- end
48
- ::Excon.defaults[:mock] = true
45
+ ::Excon.defaults[:middlewares] << VCR::Middleware::Excon
49
46
  when :vcr
50
47
  realias Net::HTTP, :request, :with_vcr
51
48
  else raise ArgumentError.new("Unexpected scope: #{scope}")
@@ -72,8 +69,7 @@ module MonkeyPatches
72
69
  end
73
70
 
74
71
  if defined?(::Excon)
75
- ::Excon.stubs.clear
76
- ::Excon.defaults[:mock] = false
72
+ ::Excon.defaults[:middlewares].delete(VCR::Middleware::Excon)
77
73
  end
78
74
  end
79
75
 
@@ -150,6 +146,7 @@ if defined?(::Typhoeus.before)
150
146
  $original_typhoeus_before_hooks = Typhoeus.before.dup
151
147
  elsif defined?(::Typhoeus::Hydra.global_hooks)
152
148
  require 'vcr/library_hooks/typhoeus'
149
+ $typhoeus_0_4_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].first
153
150
  $typhoeus_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].last
154
151
  $original_typhoeus_global_hooks = Typhoeus::Hydra.global_hooks.dup
155
152
  $original_typhoeus_stub_finders = Typhoeus::Hydra.stub_finders.dup
@@ -171,7 +168,6 @@ $original_webmock_callbacks = ::WebMock::CallbackRegistry.callbacks
171
168
 
172
169
  require 'vcr/library_hooks/excon'
173
170
  $excon_after_loaded_hook = VCR.configuration.hooks[:after_library_hooks_loaded].last
174
- $original_excon_stubs = ::Excon.stubs.dup
175
171
 
176
172
  # disable all by default; we'll enable specific ones when we need them
177
173
  MonkeyPatches.disable_all!
@@ -45,7 +45,7 @@ describe "The library itself" do
45
45
  error_messages << check_for_extra_spaces(filename)
46
46
  end
47
47
  end
48
- error_messages.compact.should be_well_formed
48
+ expect(error_messages.compact).to be_well_formed
49
49
  end
50
50
  end
51
51
 
@@ -1,5 +1,8 @@
1
1
  require 'rubygems'
2
2
 
3
+ using_git = File.exist?(File.expand_path('../../.git/', __FILE__))
4
+ require 'bundler/setup' if using_git
5
+
3
6
  if RUBY_VERSION =~ /1.9/ && RUBY_ENGINE == 'ruby'
4
7
  require 'simplecov'
5
8
 
@@ -22,9 +25,6 @@ if RUBY_VERSION =~ /1.9/ && RUBY_ENGINE == 'ruby'
22
25
  end
23
26
  end
24
27
 
25
- using_git = File.exist?(File.expand_path('../../.git/', __FILE__))
26
- require 'bundler/setup' if using_git
27
-
28
28
  require 'rspec'
29
29
 
30
30
  require "support/fixnum_extension"
@@ -54,9 +54,12 @@ end
54
54
  RSpec.configure do |config|
55
55
  config.order = :rand
56
56
  config.color_enabled = true
57
- config.debug = (using_git && RUBY_INTERPRETER == :mri && !%w[ 1.9.3 ].include?(RUBY_VERSION) && !ENV['CI'])
58
57
  config.treat_symbols_as_metadata_keys_with_true_values = true
59
58
 
59
+ config.expect_with :rspec do |expectations|
60
+ expectations.syntax = :expect
61
+ end
62
+
60
63
  tmp_dir = File.expand_path('../../tmp/cassette_library_dir', __FILE__)
61
64
  config.before(:each) do
62
65
  unless example.metadata[:skip_vcr_reset]
@@ -35,7 +35,8 @@ HTTP_LIBRARY_ADAPTERS['net/http'] = Module.new do
35
35
  end
36
36
 
37
37
  DEFAULT_REQUEST_HEADERS = { "Accept"=>["*/*"] }
38
- DEFAULT_REQUEST_HEADERS['User-Agent'] = ["Ruby"] if RUBY_VERSION =~ /1.9/
38
+ DEFAULT_REQUEST_HEADERS['User-Agent'] = ["Ruby"] if RUBY_VERSION.to_f > 1.8
39
+ DEFAULT_REQUEST_HEADERS['Accept-Encoding'] = ["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"] if RUBY_VERSION.to_f > 1.9
39
40
 
40
41
  def normalize_request_headers(headers)
41
42
  defined?(super) ? super :
@@ -218,7 +219,7 @@ HTTP_LIBRARY_ADAPTERS['excon'] = Module.new do
218
219
  def make_http_request(method, url, body = nil, headers = {})
219
220
  # There are multiple ways to use Excon but this is how fog (the main user of excon) uses it:
220
221
  # https://github.com/fog/fog/blob/v1.1.1/lib/fog/aws/rds.rb#L139-147
221
- Excon::Connection.new(url).request(:method => method.to_s.upcase, :body => body, :headers => headers)
222
+ Excon.new(url).request(:method => method.to_s.upcase, :body => body, :headers => headers)
222
223
  end
223
224
 
224
225
  def normalize_request_headers(headers)
@@ -277,7 +278,7 @@ end
277
278
  end
278
279
 
279
280
  def normalize_request_headers(headers)
280
- headers
281
+ headers.merge("User-Agent" => ["Faraday v#{Faraday::VERSION}"])
281
282
  end
282
283
  end
283
284
  end
@@ -0,0 +1,22 @@
1
+ shared_examples "Excon streaming" do
2
+ context "when Excon's streaming API is used" do
3
+ it 'properly records and plays back the response' do
4
+ VCR.stub(:real_http_connections_allowed? => true)
5
+ recorded, played_back = [1, 2].map do
6
+ chunks = []
7
+
8
+ VCR.use_cassette('excon_streaming', :record => :once) do
9
+ Excon.get "http://localhost:#{VCR::SinatraApp.port}/foo", :response_block => lambda { |chunk, remaining_bytes, total_bytes|
10
+ chunks << chunk
11
+ }
12
+ end
13
+
14
+ chunks.join
15
+ end
16
+
17
+ expect(recorded).to eq(played_back)
18
+ expect(recorded).to eq("FOO!")
19
+ end
20
+ end
21
+ end
22
+
@@ -28,9 +28,9 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
28
28
  end
29
29
 
30
30
  it 'returns the same header value when recording and replaying' do
31
- (recorded_val = get_set_cookie_header).should_not be_nil
31
+ expect((recorded_val = get_set_cookie_header)).not_to be_nil
32
32
  replayed_val = get_set_cookie_header
33
- replayed_val.should eq(recorded_val)
33
+ expect(replayed_val).to eq(recorded_val)
34
34
  end
35
35
  end
36
36
  end
@@ -46,7 +46,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
46
46
  it "properly records and playsback a request with a URL #{description}" do
47
47
  recorded_body = get_body
48
48
  played_back_body = get_body
49
- played_back_body.should eq(recorded_body)
49
+ expect(played_back_body).to eq(recorded_body)
50
50
  end
51
51
  end
52
52
  end
@@ -65,7 +65,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
65
65
 
66
66
  recorded = get_body.call
67
67
  played_back = get_body.call
68
- played_back.should eq(recorded)
68
+ expect(played_back).to eq(recorded)
69
69
  end
70
70
  end
71
71
 
@@ -83,7 +83,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
83
83
  let(:response) { VCR::Response.new(status, nil, response_body, '1.1') }
84
84
 
85
85
  it 'returns the response for a matching request' do
86
- get_body_string(make_http_request(:get, 'http://example.com/')).should eq(response_body)
86
+ expect(get_body_string(make_http_request(:get, 'http://example.com/'))).to eq(response_body)
87
87
  end
88
88
  end
89
89
 
@@ -93,7 +93,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
93
93
  let(:response) { VCR::Response.new(status, nil, response_body, '1.1') }
94
94
 
95
95
  it 'returns the expected response for the same request' do
96
- get_body_string(make_http_request(:get, url)).should eq(response_body)
96
+ expect(get_body_string(make_http_request(:get, url))).to eq(response_body)
97
97
  end
98
98
  end
99
99
  end
@@ -118,7 +118,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
118
118
  VCR.insert_cassette('foo')
119
119
  make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/foo")
120
120
 
121
- call_count.should eq(1)
121
+ expect(call_count).to eq(1)
122
122
  end
123
123
 
124
124
  describe "using the library's stubbing/disconnection APIs" do
@@ -128,7 +128,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
128
128
  it 'can make a real request when VCR is turned off' do
129
129
  enable_real_connections
130
130
  VCR.turn_off!
131
- get_body_string(make_http_request(:get, request_url)).should eq("FOO!")
131
+ expect(get_body_string(make_http_request(:get, request_url))).to eq("FOO!")
132
132
  end
133
133
 
134
134
  it 'does not mess with VCR when real connections are disabled' do
@@ -136,7 +136,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
136
136
  disable_real_connections
137
137
 
138
138
  VCR.should_receive(:record_http_interaction) do |interaction|
139
- interaction.request.uri.should eq(request_url)
139
+ expect(interaction.request.uri).to eq(request_url)
140
140
  end
141
141
 
142
142
  make_http_request(:get, request_url)
@@ -156,28 +156,28 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
156
156
  it 'can directly stub the request when VCR is turned off' do
157
157
  VCR.turn_off!
158
158
  directly_stub_request(:get, request_url, "stubbed response")
159
- get_body_string(make_http_request(:get, request_url)).should eq("stubbed response")
159
+ expect(get_body_string(make_http_request(:get, request_url))).to eq("stubbed response")
160
160
  end
161
161
 
162
162
  it 'can directly stub the request when VCR is turned on and no cassette is in use' do
163
163
  directly_stub_request(:get, request_url, "stubbed response")
164
- get_body_string(make_http_request(:get, request_url)).should eq("stubbed response")
164
+ expect(get_body_string(make_http_request(:get, request_url))).to eq("stubbed response")
165
165
  end
166
166
 
167
167
  it 'can directly stub the request when VCR is turned on and a cassette is in use' do
168
168
  VCR.use_cassette("temp") do
169
169
  directly_stub_request(:get, request_url, "stubbed response")
170
- get_body_string(make_http_request(:get, request_url)).should eq("stubbed response")
170
+ expect(get_body_string(make_http_request(:get, request_url))).to eq("stubbed response")
171
171
  end
172
172
  end
173
173
 
174
174
  it 'does not record requests that are directly stubbed' do
175
- VCR.should respond_to(:record_http_interaction)
175
+ expect(VCR).to respond_to(:record_http_interaction)
176
176
  VCR.should_not_receive(:record_http_interaction)
177
177
 
178
178
  VCR.use_cassette("temp") do
179
179
  directly_stub_request(:get, request_url, "stubbed response")
180
- get_body_string(make_http_request(:get, request_url)).should eq("stubbed response")
180
+ expect(get_body_string(make_http_request(:get, request_url))).to eq("stubbed response")
181
181
  end
182
182
  end
183
183
  end
@@ -198,8 +198,8 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
198
198
  make_http_request(:get, request_url)
199
199
  end
200
200
 
201
- yielded_request.method.should eq(:get)
202
- yielded_request.uri.should eq(request_url)
201
+ expect(yielded_request.method).to eq(:get)
202
+ expect(yielded_request.uri).to eq(request_url)
203
203
  end
204
204
 
205
205
  it 'returns the response from request.proceed' do
@@ -212,7 +212,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
212
212
  make_http_request(:get, request_url)
213
213
  end
214
214
 
215
- response.body.should eq("FOO!")
215
+ expect(response.body).to eq("FOO!")
216
216
  end
217
217
 
218
218
  it 'can be used to use a cassette for a request' do
@@ -221,12 +221,12 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
221
221
  end
222
222
 
223
223
  VCR.should_receive(:record_http_interaction) do
224
- VCR.current_cassette.name.should eq('new_cassette')
224
+ expect(VCR.current_cassette.name).to eq('new_cassette')
225
225
  end
226
226
 
227
- VCR.current_cassette.should be_nil
227
+ expect(VCR.current_cassette).to be_nil
228
228
  make_http_request(:get, request_url)
229
- VCR.current_cassette.should be_nil
229
+ expect(VCR.current_cassette).to be_nil
230
230
  end
231
231
 
232
232
  it 'nests them inside each other, making the first declared hook the outermost' do
@@ -249,7 +249,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
249
249
 
250
250
  make_http_request(:get, request_url)
251
251
 
252
- order.should eq([:before_1, :before_2, :after_2, :after_1])
252
+ expect(order).to eq([:before_1, :before_2, :after_2, :after_1])
253
253
  end
254
254
 
255
255
  it 'raises an appropriate error if the hook does not call request.proceed' do
@@ -260,8 +260,8 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
260
260
  expect {
261
261
  make_http_request(:get, request_url)
262
262
  }.to raise_error { |error|
263
- error.message.should include('must call #proceed on the yielded request')
264
- error.message.should include(hook_declaration)
263
+ expect(error.message).to include('must call #proceed on the yielded request')
264
+ expect(error.message).to include(hook_declaration)
265
265
  }
266
266
  end
267
267
 
@@ -291,7 +291,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
291
291
  end
292
292
 
293
293
  make_http_request(:get, request_url)
294
- order.should eq([:before_foo, :after_foo])
294
+ expect(order).to eq([:before_foo, :after_foo])
295
295
  end
296
296
 
297
297
  it 'ensures that both around/before are invoked or neither' do
@@ -313,7 +313,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
313
313
  end
314
314
 
315
315
  make_http_request(:get, request_url)
316
- order.should eq([:before_1, :after_1])
316
+ expect(order).to eq([:before_1, :after_1])
317
317
  end
318
318
  end if RUBY_VERSION >= '1.9'
319
319
 
@@ -330,8 +330,8 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
330
330
  end
331
331
 
332
332
  make_http_request(:get, "http://localhost:#{VCR::SinatraApp.port}/foo")
333
- before_type.should be(:unhandled)
334
- after_type.should be(:recordable)
333
+ expect(before_type).to be(:unhandled)
334
+ expect(after_type).to be(:recordable)
335
335
  end
336
336
 
337
337
  context "when the request is ignored" do
@@ -364,18 +364,18 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
364
364
  VCR.insert_cassette('fake_example_responses', :record => :none)
365
365
  end
366
366
  end
367
- get_body_string(make_http_request(:get, 'http://example.com/foo')).should eq(string_in_cassette)
367
+ expect(get_body_string(make_http_request(:get, 'http://example.com/foo'))).to eq(string_in_cassette)
368
368
  end
369
369
 
370
370
  specify 'the after_http_request hook can be used to eject a cassette after the request is recorded' do
371
371
  VCR.configuration.after_http_request { |request| VCR.eject_cassette }
372
372
 
373
373
  VCR.should_receive(:record_http_interaction) do |interaction|
374
- VCR.current_cassette.should be(inserted_cassette)
374
+ expect(VCR.current_cassette).to be(inserted_cassette)
375
375
  end
376
376
 
377
377
  make_request
378
- VCR.current_cassette.should be_nil
378
+ expect(VCR.current_cassette).to be_nil
379
379
  end
380
380
  end
381
381
  end
@@ -392,7 +392,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
392
392
  it_behaves_like "request hooks", library_hook_name, :unhandled do
393
393
  undef assert_expected_response
394
394
  def assert_expected_response(response)
395
- response.should be_nil
395
+ expect(response).to be_nil
396
396
  end
397
397
 
398
398
  undef make_request
@@ -427,7 +427,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
427
427
 
428
428
  valid.each do |val, response|
429
429
  it "returns the expected response for a #{val.inspect} request" do
430
- get_body_string(make_http_request(val)).should eq(response)
430
+ expect(get_body_string(make_http_request(val))).to eq(response)
431
431
  end
432
432
  end
433
433
 
@@ -480,7 +480,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
480
480
  if http_allowed
481
481
 
482
482
  it 'allows real http requests' do
483
- get_body_string(make_http_request(:get, url)).should eq('FOO!')
483
+ expect(get_body_string(make_http_request(:get, url))).to eq('FOO!')
484
484
  end
485
485
 
486
486
  describe 'recording new http requests' do
@@ -499,37 +499,37 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
499
499
  end unless other.include?(:not_disableable)
500
500
 
501
501
  it 'records the request uri' do
502
- recorded_interaction.request.uri.should eq(url)
502
+ expect(recorded_interaction.request.uri).to eq(url)
503
503
  end
504
504
 
505
505
  it 'records the request method' do
506
- recorded_interaction.request.method.should eq(:post)
506
+ expect(recorded_interaction.request.method).to eq(:post)
507
507
  end
508
508
 
509
509
  it 'records the request body' do
510
- recorded_interaction.request.body.should eq("the body")
510
+ expect(recorded_interaction.request.body).to eq("the body")
511
511
  end
512
512
 
513
513
  it 'records the request headers' do
514
514
  headers = downcase_headers(recorded_interaction.request.headers)
515
- headers.should include('x-http-foo' => ['bar'])
515
+ expect(headers).to include('x-http-foo' => ['bar'])
516
516
  end
517
517
 
518
518
  it 'records the response status code' do
519
- recorded_interaction.response.status.code.should eq(200)
519
+ expect(recorded_interaction.response.status.code).to eq(200)
520
520
  end
521
521
 
522
522
  it 'records the response status message' do
523
- recorded_interaction.response.status.message.strip.should eq('OK')
523
+ expect(recorded_interaction.response.status.message.strip).to eq('OK')
524
524
  end unless other.include?(:status_message_not_exposed)
525
525
 
526
526
  it 'records the response body' do
527
- recorded_interaction.response.body.should eq('FOO!')
527
+ expect(recorded_interaction.response.body).to eq('FOO!')
528
528
  end
529
529
 
530
530
  it 'records the response headers' do
531
531
  headers = downcase_headers(recorded_interaction.response.headers)
532
- headers.should include('content-type' => ["text/html;charset=utf-8"])
532
+ expect(headers).to include('content-type' => ["text/html;charset=utf-8"])
533
533
  end
534
534
  end
535
535
  else
@@ -556,7 +556,7 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
556
556
 
557
557
  %w[ 127.0.0.1 localhost ].each do |localhost_alias|
558
558
  it "allows requests to #{localhost_alias}" do
559
- get_body_string(make_http_request(:get, "http://#{localhost_alias}:#{VCR::SinatraApp.port}/localhost_test")).should eq(localhost_response)
559
+ expect(get_body_string(make_http_request(:get, "http://#{localhost_alias}:#{VCR::SinatraApp.port}/localhost_test"))).to eq(localhost_response)
560
560
  end
561
561
  end
562
562
 
@@ -574,18 +574,18 @@ shared_examples_for "a hook into an HTTP library" do |library_hook_name, library
574
574
 
575
575
  it 'gets the stubbed responses when requests are made to http://example.com/foo, and does not record them' do
576
576
  VCR.should_receive(:record_http_interaction).never
577
- get_body_string(make_http_request(:get, 'http://example.com/foo')).should =~ /example\.com get response \d with path=foo/
577
+ expect(get_body_string(make_http_request(:get, 'http://example.com/foo'))).to match(/example\.com get response \d with path=foo/)
578
578
  end
579
579
 
580
580
  it 'rotates through multiple responses for the same request' do
581
- get_body_string(make_http_request(:get, 'http://example.com/foo')).should eq('example.com get response 1 with path=foo')
582
- get_body_string(make_http_request(:get, 'http://example.com/foo')).should eq('example.com get response 2 with path=foo')
581
+ expect(get_body_string(make_http_request(:get, 'http://example.com/foo'))).to eq('example.com get response 1 with path=foo')
582
+ expect(get_body_string(make_http_request(:get, 'http://example.com/foo'))).to eq('example.com get response 2 with path=foo')
583
583
  end unless other.include?(:does_not_support_rotating_responses)
584
584
 
585
585
  it "correctly handles stubbing multiple values for the same header" do
586
586
  header = get_header('Set-Cookie', make_http_request(:get, 'http://example.com/two_set_cookie_headers'))
587
587
  header = header.split(', ') if header.respond_to?(:split)
588
- header.should =~ ['bar=bazz', 'foo=bar']
588
+ expect(header).to match_array ['bar=bazz', 'foo=bar']
589
589
  end
590
590
  end
591
591
  end