vcr 0.3.1 → 0.4.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 (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: