vcr 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/CHANGELOG.md +62 -0
  2. data/README.md +224 -0
  3. data/Rakefile +12 -5
  4. data/VERSION +1 -1
  5. data/benchmarks/http_stubbing_libraries.rb +59 -0
  6. data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette1.yml +25 -25
  7. data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette2.yml +32 -30
  8. data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette3.yml +40 -40
  9. data/features/fixtures/vcr_cassettes/1.8.6/nested_replay_cassette.yml +16 -15
  10. data/features/fixtures/vcr_cassettes/1.8.6/not_the_real_response.yml +25 -25
  11. data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette1.yml +23 -23
  12. data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette2.yml +24 -22
  13. data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette3.yml +36 -36
  14. data/features/fixtures/vcr_cassettes/1.8.7/nested_replay_cassette.yml +12 -11
  15. data/features/fixtures/vcr_cassettes/1.8.7/not_the_real_response.yml +23 -23
  16. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette1.yml +24 -24
  17. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette2.yml +26 -24
  18. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette3.yml +38 -38
  19. data/features/fixtures/vcr_cassettes/1.9.1/nested_replay_cassette.yml +13 -12
  20. data/features/fixtures/vcr_cassettes/1.9.1/not_the_real_response.yml +24 -24
  21. data/features/record_response.feature +2 -2
  22. data/features/replay_recorded_response.feature +1 -1
  23. data/features/step_definitions/vcr_steps.rb +8 -8
  24. data/features/support/env.rb +6 -0
  25. data/lib/vcr.rb +16 -3
  26. data/lib/vcr/cassette.rb +49 -46
  27. data/lib/vcr/config.rb +8 -0
  28. data/lib/vcr/extensions/fake_web.rb +12 -26
  29. data/lib/vcr/extensions/net_http.rb +9 -26
  30. data/lib/vcr/http_stubbing_adapters/base.rb +34 -0
  31. data/lib/vcr/http_stubbing_adapters/fakeweb.rb +75 -0
  32. data/lib/vcr/http_stubbing_adapters/webmock.rb +80 -0
  33. data/lib/vcr/structs.rb +44 -0
  34. data/lib/vcr/task_runner.rb +47 -0
  35. data/lib/vcr/tasks/vcr.rake +9 -0
  36. data/spec/cassette_spec.rb +70 -71
  37. data/spec/config_spec.rb +27 -0
  38. data/spec/extensions/net_http_spec.rb +21 -17
  39. data/spec/fixtures/1.8.6/0_3_1_cassette.yml +29 -0
  40. data/spec/fixtures/1.8.6/cassette_spec/example.yml +110 -108
  41. data/spec/fixtures/1.8.6/example_net_http.yml +14 -0
  42. data/spec/fixtures/1.8.6/example_net_http_request.yml +12 -0
  43. data/spec/fixtures/1.8.6/example_net_http_response.yml +25 -0
  44. data/spec/fixtures/1.8.6/fake_example.com_responses.yml +90 -0
  45. data/spec/fixtures/1.8.7/0_3_1_cassette.yml +29 -0
  46. data/spec/fixtures/1.8.7/cassette_spec/example.yml +110 -108
  47. data/spec/fixtures/1.8.7/example_net_http.yml +14 -0
  48. data/spec/fixtures/1.8.7/example_net_http_request.yml +12 -0
  49. data/spec/fixtures/1.8.7/example_net_http_response.yml +25 -0
  50. data/spec/fixtures/1.8.7/fake_example.com_responses.yml +90 -0
  51. data/spec/fixtures/1.9.1/0_3_1_cassette.yml +29 -0
  52. data/spec/fixtures/1.9.1/cassette_spec/example.yml +62 -59
  53. data/spec/fixtures/1.9.1/example_net_http.yml +14 -0
  54. data/spec/fixtures/1.9.1/example_net_http_request.yml +12 -0
  55. data/spec/fixtures/1.9.1/example_net_http_response.yml +25 -0
  56. data/spec/fixtures/1.9.1/fake_example.com_responses.yml +90 -0
  57. data/spec/http_stubbing_adapters/fakeweb_spec.rb +24 -0
  58. data/spec/http_stubbing_adapters/webmock_spec.rb +23 -0
  59. data/spec/spec_helper.rb +5 -0
  60. data/spec/structs_spec.rb +95 -0
  61. data/spec/support/http_stubbing_adapter.rb +113 -0
  62. data/spec/task_runner_spec.rb +59 -0
  63. data/spec/vcr_spec.rb +37 -0
  64. data/vcr.gemspec +45 -15
  65. metadata +67 -26
  66. data/History.rdoc +0 -31
  67. data/README.rdoc +0 -222
  68. data/lib/vcr/recorded_response.rb +0 -4
  69. data/spec/extensions/fake_web_spec.rb +0 -63
  70. data/spec/recorded_response_spec.rb +0 -25
@@ -0,0 +1,44 @@
1
+ require 'forwardable'
2
+
3
+ module VCR
4
+ class Request < Struct.new(:method, :uri, :body, :headers)
5
+ def self.from_net_http_request(net_http, request)
6
+ new(
7
+ request.method.downcase.to_sym,
8
+ VCR.http_stubbing_adapter.request_uri(net_http, request),
9
+ request.body,
10
+ request.to_hash
11
+ )
12
+ end
13
+ end
14
+
15
+ class ResponseStatus < Struct.new(:code, :message)
16
+ def self.from_net_http_response(response)
17
+ new(response.code.to_i, response.message)
18
+ end
19
+ end
20
+
21
+ class Response < Struct.new(:status, :headers, :body, :http_version)
22
+ def self.from_net_http_response(response)
23
+ new(
24
+ ResponseStatus.from_net_http_response(response),
25
+ response.to_hash,
26
+ response.body,
27
+ response.http_version
28
+ )
29
+ end
30
+ end
31
+
32
+ class HTTPInteraction < Struct.new(:request, :response)
33
+ extend ::Forwardable
34
+
35
+ def_delegators :request, :uri, :method
36
+
37
+ def self.from_net_http_objects(net_http, request, response)
38
+ new(
39
+ Request.from_net_http_request(net_http, request),
40
+ Response.from_net_http_response(response)
41
+ )
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,47 @@
1
+ require 'vcr'
2
+
3
+ module VCR
4
+ module TaskRunner
5
+ extend self
6
+
7
+ def migrate_cassettes(dir)
8
+ with_recorded_response_defined do
9
+ FileUtils.cp_r(dir, "#{dir}-backup")
10
+
11
+ Dir.glob(dir + '/**/*.yml').each do |cassette_file|
12
+ recorded_responses = YAML.load(File.read(cassette_file))
13
+ next unless recorded_responses.is_a?(Enumerable) && recorded_responses.all? { |rr| rr.is_a?(VCR::RecordedResponse) }
14
+
15
+ interactions = recorded_responses.map do |recorded_response|
16
+ http_interaction(recorded_response)
17
+ end
18
+
19
+ File.open(cassette_file, 'w') { |f| f.write(interactions.to_yaml) }
20
+ end
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def http_interaction(recorded_response)
27
+ VCR::HTTPInteraction.new(
28
+ request(recorded_response),
29
+ VCR::Response.from_net_http_response(recorded_response.response)
30
+ )
31
+ end
32
+
33
+ def request(recorded_response)
34
+ VCR::Request.new(recorded_response.method, recorded_response.uri)
35
+ end
36
+
37
+ def with_recorded_response_defined
38
+ VCR.const_set(:RecordedResponse, Class.new(Struct.new(:method, :uri, :response, :request_body, :request_headers)))
39
+
40
+ begin
41
+ yield
42
+ ensure
43
+ VCR.send(:remove_const, :RecordedResponse)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ require 'vcr/task_runner'
2
+
3
+ namespace :vcr do
4
+ desc 'Migrates your VCR cassettes in DIR from the 0.3.1 format to the 0.4+ format'
5
+ task :migrate_cassettes do
6
+ raise "You must pass the cassette library directory as DIR" if ENV['DIR'].to_s == ''
7
+ VCR::TaskRunner.migrate_cassettes(ENV['DIR'])
8
+ end
9
+ end
@@ -26,21 +26,30 @@ describe VCR::Cassette do
26
26
  end
27
27
  end
28
28
 
29
- describe '#store_recorded_response!' do
30
- it 'adds the recorded response to #recorded_responses' do
31
- recorded_response = VCR::RecordedResponse.new(:get, 'http://example.com', :response)
29
+ describe '#record_http_interaction' do
30
+ it 'adds the interaction to #recorded_interactions' do
32
31
  cassette = VCR::Cassette.new(:test_cassette)
33
- cassette.recorded_responses.should == []
34
- cassette.store_recorded_response!(recorded_response)
35
- cassette.recorded_responses.should == [recorded_response]
32
+ cassette.recorded_interactions.should == []
33
+ cassette.record_http_interaction(:the_interaction)
34
+ cassette.recorded_interactions.should == [:the_interaction]
36
35
  end
37
36
  end
38
37
 
39
38
  describe 'on creation' do
39
+ it 'raises an error with a helpful message when loading an old unsupported cassette' do
40
+ VCR::Config.cassette_library_dir = File.expand_path(File.dirname(__FILE__) + "/fixtures/#{RUBY_VERSION}")
41
+ lambda { VCR::Cassette.new('0_3_1_cassette') }.should raise_error(/The VCR cassette 0_3_1_cassette uses an old format that is now deprecated/)
42
+ end
43
+
40
44
  it "raises an error if given an invalid record mode" do
41
45
  lambda { VCR::Cassette.new(:test, :record => :not_a_record_mode) }.should raise_error(ArgumentError)
42
46
  end
43
47
 
48
+ it 'creates a stubs checkpoint on the http_stubbing_adapter' do
49
+ VCR.http_stubbing_adapter.should_receive(:create_stubs_checkpoint).with('example').once
50
+ VCR::Cassette.new('example')
51
+ end
52
+
44
53
  VCR::Cassette::VALID_RECORD_MODES.each do |mode|
45
54
  it "defaults the record mode to #{mode} when VCR::Config.default_cassette_options[:record] is #{mode}" do
46
55
  VCR::Config.default_cassette_options = { :record => mode }
@@ -49,56 +58,49 @@ describe VCR::Cassette do
49
58
  end
50
59
  end
51
60
 
52
- { :new_episodes => true, :all => true, :none => false }.each do |record_mode, allow_fakeweb_connect|
53
- it "sets FakeWeb.allow_net_connect to #{allow_fakeweb_connect} when the record mode is #{record_mode}" do
54
- FakeWeb.allow_net_connect = !allow_fakeweb_connect
61
+ { :new_episodes => true, :all => true, :none => false }.each do |record_mode, http_connections_allowed|
62
+ it "sets http_connections_allowed to #{http_connections_allowed} on the http stubbing adapter when the record mode is #{record_mode}" do
63
+ VCR.http_stubbing_adapter.should_receive(:http_connections_allowed=).with(http_connections_allowed)
55
64
  VCR::Cassette.new(:name, :record => record_mode)
56
- FakeWeb.allow_net_connect?.should == allow_fakeweb_connect
57
65
  end
58
66
  end
59
67
 
60
- { :new_episodes => true, :all => false, :none => true }.each do |record_mode, load_responses|
61
- it "#{load_responses ? 'loads' : 'does not load'} the recorded responses from the library yml file when the record mode is #{record_mode}" do
68
+ { :new_episodes => true, :all => false, :none => true }.each do |record_mode, load_interactions|
69
+ it "#{load_interactions ? 'loads' : 'does not load'} the recorded interactions from the library yml file when the record mode is #{record_mode}" do
62
70
  VCR::Config.cassette_library_dir = File.expand_path(File.dirname(__FILE__) + "/fixtures/#{RUBY_VERSION}/cassette_spec")
63
71
  cassette = VCR::Cassette.new('example', :record => record_mode)
64
72
 
65
- if load_responses
66
- cassette.should have(3).recorded_responses
73
+ if load_interactions
74
+ cassette.should have(3).recorded_interactions
67
75
 
68
- rr1, rr2, rr3 = *cassette.recorded_responses
76
+ i1, i2, i3 = *cassette.recorded_interactions
69
77
 
70
- rr1.method.should == :get
71
- rr1.uri.should == 'http://example.com:80/'
72
- rr1.response.body.should =~ /You have reached this web page by typing.+example\.com/
78
+ i1.request.method.should == :get
79
+ i1.request.uri.should == 'http://example.com:80/'
80
+ i1.response.body.should =~ /You have reached this web page by typing.+example\.com/
73
81
 
74
- rr2.method.should == :get
75
- rr2.uri.should == 'http://example.com:80/foo'
76
- rr2.response.body.should =~ /foo was not found on this server/
82
+ i2.request.method.should == :get
83
+ i2.request.uri.should == 'http://example.com:80/foo'
84
+ i2.response.body.should =~ /foo was not found on this server/
77
85
 
78
- rr3.method.should == :get
79
- rr3.uri.should == 'http://example.com:80/'
80
- rr3.response.body.should =~ /Another example\.com response/
86
+ i3.request.method.should == :get
87
+ i3.request.uri.should == 'http://example.com:80/'
88
+ i3.response.body.should =~ /Another example\.com response/
81
89
  else
82
- cassette.should have(0).recorded_responses
90
+ cassette.should have(0).recorded_interactions
83
91
  end
84
92
  end
85
93
 
86
- it "#{load_responses ? 'registers' : 'does not register'} the recorded responses with fakeweb when the record mode is #{record_mode}" do
94
+ it "#{load_interactions ? 'stubs' : 'does not stub'} the recorded requests with the http stubbing adapter when the record mode is #{record_mode}" do
87
95
  VCR::Config.cassette_library_dir = File.expand_path(File.dirname(__FILE__) + "/fixtures/#{RUBY_VERSION}/cassette_spec")
88
- cassette = VCR::Cassette.new('example', :record => record_mode)
89
-
90
- rr1 = FakeWeb.response_for(:get, "http://example.com")
91
- rr2 = FakeWeb.response_for(:get, "http://example.com/foo")
92
- rr3 = FakeWeb.response_for(:get, "http://example.com")
93
96
 
94
- if load_responses
95
- [rr1, rr2, rr3].compact.should have(3).responses
96
- rr1.body.should =~ /You have reached this web page by typing.+example\.com/
97
- rr2.body.should =~ /foo was not found on this server/
98
- rr3.body.should =~ /Another example\.com response/
97
+ if load_interactions
98
+ VCR.http_stubbing_adapter.should_receive(:stub_requests).with([an_instance_of(VCR::HTTPInteraction)]*3)
99
99
  else
100
- [rr1, rr2, rr3].compact.should have(0).responses
100
+ VCR.http_stubbing_adapter.should_receive(:stub_requests).never
101
101
  end
102
+
103
+ cassette = VCR::Cassette.new('example', :record => record_mode)
102
104
  end
103
105
  end
104
106
  end
@@ -144,66 +146,63 @@ describe VCR::Cassette do
144
146
  describe '#eject' do
145
147
  temp_dir File.expand_path(File.dirname(__FILE__) + '/fixtures/cassette_spec_eject'), :assign_to_cassette_library_dir => true
146
148
 
147
- [true, false].each do |orig_allow_net_connect|
148
- it "resets FakeWeb.allow_net_connect to #{orig_allow_net_connect} if it was originally #{orig_allow_net_connect}" do
149
- FakeWeb.allow_net_connect = orig_allow_net_connect
149
+ [true, false].each do |orig_http_connections_allowed|
150
+ it "resets #{orig_http_connections_allowed} on the http stubbing adapter if it was originally #{orig_http_connections_allowed}" do
151
+ VCR.http_stubbing_adapter.should_receive(:http_connections_allowed?).and_return(orig_http_connections_allowed)
150
152
  cassette = VCR::Cassette.new(:name)
153
+ VCR.http_stubbing_adapter.should_receive(:http_connections_allowed=).with(orig_http_connections_allowed)
151
154
  cassette.eject
152
- FakeWeb.allow_net_connect?.should == orig_allow_net_connect
153
155
  end
154
156
  end
155
157
 
156
- it "writes the recorded responses to disk as yaml" do
157
- recorded_responses = [
158
- VCR::RecordedResponse.new(:get, 'http://example.com', :get_example_dot_come_response),
159
- VCR::RecordedResponse.new(:post, 'http://example.com', :post_example_dot_come_response),
160
- VCR::RecordedResponse.new(:get, 'http://google.com', :get_google_dot_come_response)
158
+ it "writes the recorded interactions to disk as yaml" do
159
+ recorded_interactions = [
160
+ VCR::HTTPInteraction.new(:req_sig_1, :response_1),
161
+ VCR::HTTPInteraction.new(:req_sig_2, :response_2),
162
+ VCR::HTTPInteraction.new(:req_sig_3, :response_3)
161
163
  ]
162
164
 
163
165
  cassette = VCR::Cassette.new(:eject_test)
164
- cassette.stub!(:recorded_responses).and_return(recorded_responses)
166
+ cassette.stub!(:recorded_interactions).and_return(recorded_interactions)
165
167
 
166
168
  lambda { cassette.eject }.should change { File.exist?(cassette.file) }.from(false).to(true)
167
- saved_recorded_responses = File.open(cassette.file, "r") { |f| YAML.load(f.read) }
168
- saved_recorded_responses.should == recorded_responses
169
+ saved_recorded_interactions = File.open(cassette.file, "r") { |f| YAML.load(f.read) }
170
+ saved_recorded_interactions.should == recorded_interactions
169
171
  end
170
172
 
171
- it "writes the recorded responses to a subdirectory if the cassette name includes a directory" do
172
- recorded_responses = [VCR::RecordedResponse.new(:get, 'http://example.com', :get_example_dot_come_response)]
173
+ it "writes the recorded interactions to a subdirectory if the cassette name includes a directory" do
174
+ recorded_interactions = [VCR::HTTPInteraction.new(:the_request, :the_response)]
173
175
  cassette = VCR::Cassette.new('subdirectory/test_cassette')
174
- cassette.stub!(:recorded_responses).and_return(recorded_responses)
176
+ cassette.stub!(:recorded_interactions).and_return(recorded_interactions)
175
177
 
176
178
  lambda { cassette.eject }.should change { File.exist?(cassette.file) }.from(false).to(true)
177
- saved_recorded_responses = File.open(cassette.file, "r") { |f| YAML.load(f.read) }
178
- saved_recorded_responses.should == recorded_responses
179
+ saved_recorded_interactions = File.open(cassette.file, "r") { |f| YAML.load(f.read) }
180
+ saved_recorded_interactions.should == recorded_interactions
179
181
  end
180
182
 
181
- it "writes both old and new recorded responses to disk" do
183
+ it "writes both old and new recorded interactions to disk" do
182
184
  file = File.expand_path(File.dirname(__FILE__) + "/fixtures/#{RUBY_VERSION}/cassette_spec/example.yml")
183
- FileUtils.cp file, File.join(@temp_dir, 'previously_recorded_responses.yml')
184
- cassette = VCR::Cassette.new('previously_recorded_responses')
185
- cassette.should have(3).recorded_responses
186
- new_recorded_response = VCR::RecordedResponse.new(:get, 'http://example.com/bar', :example_dot_com_bar_response)
187
- cassette.store_recorded_response!(new_recorded_response)
185
+ FileUtils.cp file, File.join(@temp_dir, 'previously_recorded_interactions.yml')
186
+ cassette = VCR::Cassette.new('previously_recorded_interactions')
187
+ cassette.should have(3).recorded_interactions
188
+ new_recorded_interaction = VCR::HTTPInteraction.new(:the_request, :the_response)
189
+ cassette.record_http_interaction(new_recorded_interaction)
188
190
  cassette.eject
189
- saved_recorded_responses = File.open(cassette.file, "r") { |f| YAML.load(f.read) }
190
- saved_recorded_responses.should have(4).recorded_responses
191
- saved_recorded_responses.last.should == new_recorded_response
191
+ saved_recorded_interactions = File.open(cassette.file, "r") { |f| YAML.load(f.read) }
192
+ saved_recorded_interactions.should have(4).recorded_interactions
193
+ saved_recorded_interactions.last.should == new_recorded_interaction
192
194
  end
193
195
  end
194
196
 
195
- describe '#eject for a cassette with previously recorded responses' do
196
- it "de-registers the recorded responses from fakeweb" do
197
+ describe '#eject for a cassette with previously recorded interactions' do
198
+ it "restore the stubs checkpoint on the http stubbing adapter" do
197
199
  VCR::Config.cassette_library_dir = File.expand_path(File.dirname(__FILE__) + "/fixtures/#{RUBY_VERSION}/cassette_spec")
198
200
  cassette = VCR::Cassette.new('example', :record => :none)
199
- FakeWeb.registered_uri?(:get, 'http://example.com').should be_true
200
- FakeWeb.registered_uri?(:get, 'http://example.com/foo').should be_true
201
+ VCR.http_stubbing_adapter.should_receive(:restore_stubs_checkpoint).with('example')
201
202
  cassette.eject
202
- FakeWeb.registered_uri?(:get, 'http://example.com').should be_false
203
- FakeWeb.registered_uri?(:get, 'http://example.com/foo').should be_false
204
203
  end
205
204
 
206
- it "does not re-write to disk the previously recorded resposes if there are no new ones" do
205
+ it "does not re-write to disk the previously recorded interactions if there are no new ones" do
207
206
  VCR::Config.cassette_library_dir = File.expand_path(File.dirname(__FILE__) + "/fixtures/#{RUBY_VERSION}/cassette_spec")
208
207
  yaml_file = File.join(VCR::Config.cassette_library_dir, 'example.yml')
209
208
  cassette = VCR::Cassette.new('example', :record => :none)
@@ -211,4 +210,4 @@ describe VCR::Cassette do
211
210
  lambda { cassette.eject }.should_not change { File.mtime(yaml_file) }
212
211
  end
213
212
  end
214
- end
213
+ end
@@ -19,4 +19,31 @@ describe VCR::Config do
19
19
  VCR::Config.default_cassette_options.should == {}
20
20
  end
21
21
  end
22
+
23
+ describe '#http_stubbing_library' do
24
+ it 'returns the configured value' do
25
+ [:fakeweb, :webmock].each do |setting|
26
+ VCR::Config.http_stubbing_library = setting
27
+ VCR::Config.http_stubbing_library.should == setting
28
+ end
29
+ end
30
+
31
+ context 'when set to nil' do
32
+ before(:each) { VCR::Config.http_stubbing_library = nil }
33
+
34
+ {
35
+ [:FakeWeb, :WebMock] => nil,
36
+ [] => nil,
37
+ [:FakeWeb] => :fakeweb,
38
+ [:WebMock] => :webmock
39
+ }.each do |defined_constants, expected_return_value|
40
+ it "returns #{expected_return_value.inspect} when these constants are defined: #{defined_constants.inspect}" do
41
+ [:FakeWeb, :WebMock].each do |const|
42
+ Object.should_receive(:const_defined?).with(const).and_return(defined_constants.include?(const))
43
+ end
44
+ VCR::Config.http_stubbing_library.should == expected_return_value
45
+ end
46
+ end
47
+ end
48
+ end
22
49
  end
@@ -16,35 +16,39 @@ describe "Net::HTTP Extensions" do
16
16
  @current_cassette.should_receive(:allow_real_http_requests_to?).at_least(:once).with(@uri).and_return(false)
17
17
  end
18
18
 
19
- describe 'a request that is not registered with FakeWeb' do
19
+ describe 'a request that is not registered with the http stubbing adapter' do
20
+ before(:each) do
21
+ VCR.http_stubbing_adapter.should_receive(:request_stubbed?).with(anything, 'http://example.com:80/').and_return(false)
22
+ end
23
+
20
24
  def perform_get_with_returning_block
21
25
  Net::HTTP.new('example.com', 80).request(Net::HTTP::Get.new('/', {})) do |response|
22
26
  return response
23
27
  end
24
28
  end
25
29
 
26
- it 'calls #store_recorded_response! on the current cassette' do
27
- recorded_response = VCR::RecordedResponse.new(:get, 'http://example.com:80/', :example_response)
28
- VCR::RecordedResponse.should_receive(:new).with(:get, 'http://example.com:80/', an_instance_of(Net::HTTPOK)).and_return(recorded_response)
29
- @current_cassette.should_receive(:store_recorded_response!).with(recorded_response)
30
+ it 'calls #record_http_interaction on the current cassette' do
31
+ interaction = VCR::HTTPInteraction.new
32
+ VCR::HTTPInteraction.should_receive(:from_net_http_objects).and_return(interaction)
33
+ @current_cassette.should_receive(:record_http_interaction).with(interaction)
30
34
  Net::HTTP.get(@uri)
31
35
  end
32
36
 
33
- it 'calls #store_recorded_response! only once, even when Net::HTTP internally recursively calls #request' do
34
- @current_cassette.should_receive(:store_recorded_response!).once
37
+ it 'calls #record_http_interaction only once, even when Net::HTTP internally recursively calls #request' do
38
+ @current_cassette.should_receive(:record_http_interaction).once
35
39
  Net::HTTP.new('example.com', 80).post('/', nil)
36
40
  end
37
41
 
38
- it 'calls #store_recorded_response! when Net::HTTP#request is called with a block with a return statement' do
39
- @current_cassette.should_receive(:store_recorded_response!).once
42
+ it 'calls #record_http_interaction when Net::HTTP#request is called with a block with a return statement' do
43
+ @current_cassette.should_receive(:record_http_interaction).once
40
44
  perform_get_with_returning_block
41
45
  end
42
46
  end
43
47
 
44
- describe 'a request that is registered with FakeWeb' do
45
- it 'does not call #store_recorded_response! on the current cassette' do
46
- FakeWeb.register_uri(:get, 'http://example.com', :body => 'example.com response')
47
- @current_cassette.should_not_receive(:store_recorded_response!)
48
+ describe 'a request that is registered with the http stubbing adapter' do
49
+ it 'does not call #record_http_interaction on the current cassette' do
50
+ VCR.http_stubbing_adapter.should_receive(:request_stubbed?).with(:get, 'http://example.com:80/').and_return(true)
51
+ @current_cassette.should_not_receive(:record_http_interaction)
48
52
  Net::HTTP.get(@uri)
49
53
  end
50
54
  end
@@ -55,13 +59,13 @@ describe "Net::HTTP Extensions" do
55
59
  @current_cassette.should_receive(:allow_real_http_requests_to?).with(@uri).and_return(true)
56
60
  end
57
61
 
58
- it 'does not call #store_recorded_response! on the current cassette' do
59
- @current_cassette.should_receive(:store_recorded_response!).never
62
+ it 'does not call #record_http_interaction on the current cassette' do
63
+ @current_cassette.should_receive(:record_http_interaction).never
60
64
  Net::HTTP.get(@uri)
61
65
  end
62
66
 
63
- it 'uses FakeWeb.with_allow_net_connect_set_to(true) to make the request' do
64
- FakeWeb.should_receive(:with_allow_net_connect_set_to).with(true).and_yield
67
+ it 'uses VCR.http_stubbing_adapter.with_http_connections_allowed_set_to(true) to make the request' do
68
+ VCR.http_stubbing_adapter.should_receive(:with_http_connections_allowed_set_to).with(true).and_yield
65
69
  Net::HTTP.get(@uri)
66
70
  end
67
71
  end
@@ -0,0 +1,29 @@
1
+ ---
2
+ - !ruby/struct:VCR::RecordedResponse
3
+ method: :post
4
+ uri: http://example.com:80/
5
+ response: !ruby/object:Net::HTTPOK
6
+ body: The response from example.com
7
+ body_exist: true
8
+ code: "200"
9
+ header:
10
+ etag:
11
+ - "\"24ec5-1b6-4059a80bfd280\""
12
+ last-modified:
13
+ - Tue, 15 Nov 2005 13:24:10 GMT
14
+ content-type:
15
+ - text/html; charset=UTF-8
16
+ connection:
17
+ - close
18
+ server:
19
+ - Apache/2.2.3 (CentOS)
20
+ date:
21
+ - Wed, 31 Mar 2010 02:43:26 GMT
22
+ content-length:
23
+ - "438"
24
+ accept-ranges:
25
+ - bytes
26
+ http_version: "1.1"
27
+ message: OK
28
+ read: true
29
+ socket: