vcr 3.0.3 → 4.0.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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vcr.rb +18 -1
  3. data/lib/vcr/cassette.rb +11 -3
  4. data/lib/vcr/cassette/persisters/file_system.rb +1 -1
  5. data/lib/vcr/configuration.rb +3 -5
  6. data/lib/vcr/deprecations.rb +0 -62
  7. data/lib/vcr/errors.rb +16 -0
  8. data/lib/vcr/library_hooks/typhoeus.rb +37 -8
  9. data/lib/vcr/middleware/faraday.rb +5 -1
  10. data/lib/vcr/structs.rb +1 -1
  11. data/lib/vcr/util/hooks.rb +1 -0
  12. data/lib/vcr/version.rb +1 -1
  13. metadata +9 -249
  14. data/features/CHANGELOG.md +0 -710
  15. data/features/CONTRIBUTING.md +0 -26
  16. data/features/LICENSE.md +0 -20
  17. data/features/README.md +0 -339
  18. data/features/Upgrade.md +0 -289
  19. data/features/about_these_examples.md +0 -18
  20. data/features/cassettes/allow_unused_http_interactions.feature +0 -100
  21. data/features/cassettes/automatic_re_recording.feature +0 -72
  22. data/features/cassettes/decompress.feature +0 -74
  23. data/features/cassettes/dynamic_erb.feature +0 -100
  24. data/features/cassettes/exclusive.feature +0 -126
  25. data/features/cassettes/format.feature +0 -411
  26. data/features/cassettes/freezing_time.feature +0 -68
  27. data/features/cassettes/naming.feature +0 -28
  28. data/features/cassettes/no_cassette.feature +0 -152
  29. data/features/cassettes/update_content_length_header.feature +0 -112
  30. data/features/configuration/allow_http_connections_when_no_cassette.feature +0 -55
  31. data/features/configuration/cassette_library_dir.feature +0 -31
  32. data/features/configuration/debug_logging.feature +0 -58
  33. data/features/configuration/default_cassette_options.feature +0 -100
  34. data/features/configuration/filter_sensitive_data.feature +0 -153
  35. data/features/configuration/hook_into.feature +0 -172
  36. data/features/configuration/ignore_request.feature +0 -192
  37. data/features/configuration/preserve_exact_body_bytes.feature +0 -108
  38. data/features/configuration/query_parser.feature +0 -84
  39. data/features/configuration/uri_parser.feature +0 -93
  40. data/features/getting_started.md +0 -82
  41. data/features/hooks/after_http_request.feature +0 -58
  42. data/features/hooks/around_http_request.feature +0 -57
  43. data/features/hooks/before_http_request.feature +0 -63
  44. data/features/hooks/before_playback.feature +0 -184
  45. data/features/hooks/before_record.feature +0 -172
  46. data/features/http_libraries/em_http_request.feature +0 -250
  47. data/features/http_libraries/net_http.feature +0 -179
  48. data/features/middleware/faraday.feature +0 -56
  49. data/features/middleware/rack.feature +0 -92
  50. data/features/record_modes/all.feature +0 -82
  51. data/features/record_modes/new_episodes.feature +0 -79
  52. data/features/record_modes/none.feature +0 -72
  53. data/features/record_modes/once.feature +0 -95
  54. data/features/request_matching/README.md +0 -30
  55. data/features/request_matching/body.feature +0 -91
  56. data/features/request_matching/body_as_json.feature +0 -90
  57. data/features/request_matching/custom_matcher.feature +0 -135
  58. data/features/request_matching/headers.feature +0 -85
  59. data/features/request_matching/host.feature +0 -95
  60. data/features/request_matching/identical_request_sequence.feature +0 -89
  61. data/features/request_matching/method.feature +0 -96
  62. data/features/request_matching/path.feature +0 -96
  63. data/features/request_matching/playback_repeats.feature +0 -98
  64. data/features/request_matching/query.feature +0 -97
  65. data/features/request_matching/uri.feature +0 -94
  66. data/features/request_matching/uri_without_param.feature +0 -101
  67. data/features/step_definitions/cli_steps.rb +0 -199
  68. data/features/support/env.rb +0 -46
  69. data/features/support/http_lib_filters.rb +0 -46
  70. data/features/test_frameworks/cucumber.feature +0 -211
  71. data/features/test_frameworks/rspec_macro.feature +0 -81
  72. data/features/test_frameworks/rspec_metadata.feature +0 -150
  73. data/features/test_frameworks/test_unit.feature +0 -49
  74. data/lib/vcr/extensions/net_http_response.rb +0 -36
  75. data/lib/vcr/library_hooks/fakeweb.rb +0 -197
  76. data/spec/acceptance/concurrency_spec.rb +0 -51
  77. data/spec/acceptance/threading_spec.rb +0 -34
  78. data/spec/fixtures/cassette_spec/1_x_cassette.yml +0 -110
  79. data/spec/fixtures/cassette_spec/empty.yml +0 -0
  80. data/spec/fixtures/cassette_spec/example.yml +0 -111
  81. data/spec/fixtures/cassette_spec/with_localhost_requests.yml +0 -111
  82. data/spec/fixtures/fake_example_responses.yml +0 -110
  83. data/spec/fixtures/match_requests_on.yml +0 -187
  84. data/spec/lib/vcr/cassette/erb_renderer_spec.rb +0 -53
  85. data/spec/lib/vcr/cassette/http_interaction_list_spec.rb +0 -295
  86. data/spec/lib/vcr/cassette/migrator_spec.rb +0 -196
  87. data/spec/lib/vcr/cassette/persisters/file_system_spec.rb +0 -75
  88. data/spec/lib/vcr/cassette/persisters_spec.rb +0 -39
  89. data/spec/lib/vcr/cassette/serializers_spec.rb +0 -182
  90. data/spec/lib/vcr/cassette_spec.rb +0 -618
  91. data/spec/lib/vcr/configuration_spec.rb +0 -326
  92. data/spec/lib/vcr/deprecations_spec.rb +0 -85
  93. data/spec/lib/vcr/errors_spec.rb +0 -178
  94. data/spec/lib/vcr/extensions/net_http_response_spec.rb +0 -86
  95. data/spec/lib/vcr/library_hooks/excon_spec.rb +0 -104
  96. data/spec/lib/vcr/library_hooks/fakeweb_spec.rb +0 -169
  97. data/spec/lib/vcr/library_hooks/faraday_spec.rb +0 -68
  98. data/spec/lib/vcr/library_hooks/typhoeus_0.4_spec.rb +0 -36
  99. data/spec/lib/vcr/library_hooks/typhoeus_spec.rb +0 -162
  100. data/spec/lib/vcr/library_hooks/webmock_spec.rb +0 -117
  101. data/spec/lib/vcr/library_hooks_spec.rb +0 -51
  102. data/spec/lib/vcr/middleware/faraday_spec.rb +0 -181
  103. data/spec/lib/vcr/middleware/rack_spec.rb +0 -115
  104. data/spec/lib/vcr/request_ignorer_spec.rb +0 -70
  105. data/spec/lib/vcr/request_matcher_registry_spec.rb +0 -345
  106. data/spec/lib/vcr/structs_spec.rb +0 -732
  107. data/spec/lib/vcr/test_frameworks/cucumber_spec.rb +0 -107
  108. data/spec/lib/vcr/test_frameworks/rspec_spec.rb +0 -94
  109. data/spec/lib/vcr/util/hooks_spec.rb +0 -158
  110. data/spec/lib/vcr/util/internet_connection_spec.rb +0 -37
  111. data/spec/lib/vcr/util/version_checker_spec.rb +0 -31
  112. data/spec/lib/vcr/version_spec.rb +0 -27
  113. data/spec/lib/vcr_spec.rb +0 -354
  114. data/spec/monkey_patches.rb +0 -186
  115. data/spec/spec_helper.rb +0 -63
  116. data/spec/support/configuration_stubbing.rb +0 -8
  117. data/spec/support/cucumber_helpers.rb +0 -39
  118. data/spec/support/fixnum_extension.rb +0 -10
  119. data/spec/support/http_library_adapters.rb +0 -289
  120. data/spec/support/limited_uri.rb +0 -21
  121. data/spec/support/ruby_interpreter.rb +0 -7
  122. data/spec/support/shared_example_groups/excon.rb +0 -63
  123. data/spec/support/shared_example_groups/hook_into_http_library.rb +0 -594
  124. data/spec/support/shared_example_groups/request_hooks.rb +0 -59
  125. data/spec/support/sinatra_app.rb +0 -86
  126. data/spec/support/vcr_localhost_server.rb +0 -76
  127. data/spec/support/vcr_stub_helpers.rb +0 -17
@@ -1,63 +0,0 @@
1
- require "codeclimate-test-reporter"
2
- CodeClimate::TestReporter.start
3
-
4
- require "pry"
5
- require "rspec"
6
- require "vcr"
7
- require "date"
8
- require "forwardable"
9
- require "uri"
10
- require "vcr/util/internet_connection"
11
- require_relative "support/fixnum_extension"
12
- require_relative "support/limited_uri"
13
- require_relative "support/ruby_interpreter"
14
- require_relative "support/shared_example_groups/hook_into_http_library"
15
- require_relative "support/shared_example_groups/request_hooks"
16
- require_relative "support/vcr_stub_helpers"
17
- require_relative "support/vcr_localhost_server"
18
- require_relative "support/sinatra_app"
19
- require_relative "monkey_patches"
20
- require_relative "support/http_library_adapters"
21
-
22
- module VCR
23
- SPEC_ROOT = File.dirname(File.expand_path('.', __FILE__))
24
-
25
- def reset!(hook = :fakeweb)
26
- instance_variables.each do |ivar|
27
- instance_variable_set(ivar, nil)
28
- end
29
- initialize_ivars
30
- configuration.hook_into hook if hook
31
- end
32
- end
33
-
34
- RSpec.configure do |config|
35
- tmp_dir = File.expand_path('../../tmp/cassette_library_dir', __FILE__)
36
- config.before(:each) do |example|
37
- unless example.metadata[:skip_vcr_reset]
38
- VCR.reset!
39
- VCR.configuration.cassette_library_dir = tmp_dir
40
- VCR.configuration.uri_parser = LimitedURI
41
- end
42
- end
43
-
44
- config.after(:each) do
45
- FileUtils.rm_rf tmp_dir
46
- end
47
-
48
- config.before(:all, :disable_warnings => true) do
49
- @orig_std_err = $stderr
50
- $stderr = StringIO.new
51
- end
52
-
53
- config.after(:all, :disable_warnings => true) do
54
- $stderr = @orig_std_err
55
- end
56
-
57
- config.filter_run :focus => true
58
- config.run_all_when_everything_filtered = true
59
-
60
- config.alias_it_should_behave_like_to :it_performs, 'it performs'
61
- end
62
-
63
- VCR::SinatraApp.boot
@@ -1,8 +0,0 @@
1
- shared_context "configuration stubbing" do
2
- let(:config) { double("VCR::Configuration") }
3
-
4
- before do
5
- allow(VCR).to receive(:configuration) { config }
6
- end
7
- end
8
-
@@ -1,39 +0,0 @@
1
- require "rubygems"
2
- require "vcr"
3
- require "support/fixnum_extension"
4
-
5
- module Gem
6
- def self.win_platform?() false end
7
- end unless defined?(Gem)
8
-
9
- # pretend we're always on the internet (so that we don't have an
10
- # internet connection dependency for our cukes)
11
- VCR::InternetConnection.class_eval do
12
- def available?; true; end
13
- end
14
-
15
- if ENV['DATE_STRING']
16
- require 'timecop'
17
- Timecop.travel(Date.parse(ENV['DATE_STRING']))
18
- end
19
-
20
- def include_http_adapter_for(lib)
21
- require((lib =~ /faraday/) ? 'faraday' : lib)
22
- require 'typhoeus' if lib.include?('typhoeus') # for faraday-typhoeus
23
- require 'support/http_library_adapters'
24
- include HTTP_LIBRARY_ADAPTERS[lib]
25
- end
26
-
27
- def response_body_for(*args)
28
- get_body_string(make_http_request(*args))
29
- end
30
-
31
- def start_sinatra_app(&block)
32
- require 'sinatra/base'
33
- require 'support/vcr_localhost_server'
34
- klass = Class.new(Sinatra::Base)
35
- klass.disable :protection
36
- klass.class_eval(&block)
37
-
38
- VCR::LocalhostServer.new(klass.new)
39
- end
@@ -1,10 +0,0 @@
1
- unless 7.respond_to?(:days)
2
- class Fixnum
3
- def days
4
- self *
5
- 24 * # hours
6
- 60 * # minutes
7
- 60 # seconds
8
- end
9
- end
10
- end
@@ -1,289 +0,0 @@
1
- module HeaderDowncaser
2
- def downcase_headers(headers)
3
- {}.tap do |downcased|
4
- headers.each do |k, v|
5
- downcased[k.downcase] = v
6
- end
7
- end
8
- end
9
- end
10
-
11
- HTTP_LIBRARY_ADAPTERS = {}
12
-
13
- HTTP_LIBRARY_ADAPTERS['net/http'] = Module.new do
14
- include HeaderDowncaser
15
-
16
- def self.http_library_name; 'Net::HTTP'; end
17
-
18
- def get_body_string(response); response.body; end
19
- alias get_body_object get_body_string
20
-
21
- def get_header(header_key, response)
22
- response.get_fields(header_key)
23
- end
24
-
25
- def make_http_request(method, url, body = nil, headers = {})
26
- uri = URI.parse(url)
27
- http = Net::HTTP.new(uri.host, uri.port)
28
-
29
- if uri.scheme == "https"
30
- http.use_ssl = true
31
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
32
- end
33
-
34
- http.send_request(method.to_s.upcase, uri.request_uri, body, headers)
35
- end
36
-
37
- DEFAULT_REQUEST_HEADERS = { "Accept"=>["*/*"] }
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
40
-
41
- def normalize_request_headers(headers)
42
- defined?(super) ? super :
43
- downcase_headers(headers.merge(DEFAULT_REQUEST_HEADERS))
44
- end
45
- end
46
-
47
- HTTP_LIBRARY_ADAPTERS['patron'] = Module.new do
48
- def self.http_library_name; 'Patron'; end
49
-
50
- def get_body_string(response); response.body; end
51
- alias get_body_object get_body_string
52
-
53
- def get_header(header_key, response)
54
- response.headers[header_key]
55
- end
56
-
57
- def make_http_request(method, url, body = nil, headers = {})
58
- Patron::Session.new.request(method, url, headers, :data => body || '')
59
- end
60
-
61
- def normalize_request_headers(headers)
62
- headers.merge('Expect' => [''])
63
- end
64
- end
65
-
66
- HTTP_LIBRARY_ADAPTERS['httpclient'] = Module.new do
67
- def self.http_library_name; 'HTTP Client'; end
68
-
69
- def get_body_string(response)
70
- body = response.body
71
- string = body.is_a?(String) ? body : body.content
72
- string.respond_to?(:read) ? string.read : string
73
- end
74
-
75
- def get_body_object(response)
76
- response.body
77
- end
78
-
79
- def get_header(header_key, response)
80
- response.header[header_key]
81
- end
82
-
83
- def make_http_request(method, url, body = nil, headers = {})
84
- HTTPClient.new.request(method, url, nil, body, headers)
85
- end
86
-
87
- def normalize_request_headers(headers)
88
- headers.merge({
89
- 'Accept' => ["*/*"],
90
- 'User-Agent' => ["HTTPClient/1.0 (#{HTTPClient::VERSION}, ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}))"],
91
- 'Date' => [Time.now.httpdate]
92
- })
93
- end
94
- end
95
-
96
- HTTP_LIBRARY_ADAPTERS['em-http-request'] = Module.new do
97
- def self.http_library_name; 'EM HTTP Request'; end
98
-
99
- def get_body_string(response)
100
- response.response
101
- end
102
- alias get_body_object get_body_string
103
-
104
- def get_header(header_key, response)
105
- values = response.response_header[header_key.upcase.gsub('-', '_')]
106
- values.is_a?(Array) ? values : values.split(', ')
107
- end
108
-
109
- def make_http_request(method, url, body = nil, headers = {})
110
- http = nil
111
- EventMachine.run do
112
- http = EventMachine::HttpRequest.new(url).send(method, :body => body, :head => headers)
113
- http.callback { EventMachine.stop }
114
- end
115
- http
116
- end
117
-
118
- def normalize_request_headers(headers)
119
- headers
120
- end
121
- end
122
-
123
- HTTP_LIBRARY_ADAPTERS['curb'] = Module.new do
124
- def self.http_library_name; "Curb"; end
125
-
126
- def get_body_string(response)
127
- response.body_str
128
- end
129
- alias get_body_object get_body_string
130
-
131
- def get_header(header_key, response)
132
- headers = response.header_str.split("\r\n")[1..-1]
133
- value = nil
134
- headers.each do |h|
135
- next unless h =~ /^#{Regexp.escape(header_key)}: (.*)$/
136
- new_value = $1.split(', ')
137
- value = value ? Array(value) + Array(new_value) : new_value
138
- end
139
- value
140
- end
141
-
142
- def make_http_request(method, url, body = nil, headers = {})
143
- Curl::Easy.new(url) do |c|
144
- c.headers = headers
145
-
146
- if [:post, :put].include?(method)
147
- c.send("http_#{method}", body)
148
- else
149
- c.send("http_#{method}")
150
- end
151
- end
152
- end
153
-
154
- def normalize_request_headers(headers)
155
- headers
156
- end
157
- end
158
-
159
- HTTP_LIBRARY_ADAPTERS['typhoeus'] = Module.new do
160
- def self.http_library_name; "Typhoeus"; end
161
-
162
- def get_body_string(response)
163
- response.body
164
- end
165
- alias get_body_object get_body_string
166
-
167
- def get_header(header_key, response)
168
- # Due to https://github.com/typhoeus/typhoeus/commit/256c95473d5d40d7ec2f5db603687323ddd73689
169
- # headers are now downcased.
170
- # ...except when they're not. I'm not 100% why (I haven't had time to dig into it yet)
171
- # but in some situations the headers aren't downcased. I think it has to do with playback; VCR
172
- # isn't sending the headers in downcased to typhoeus. It gets complicated with the interaction
173
- # w/ WebMock, and the fact that webmock normalizes headers in a different fashion.
174
- #
175
- # For now this hack works.
176
- response.headers.fetch(header_key.downcase) { response.headers[header_key] }
177
- end
178
-
179
- def make_http_request(method, url, body = nil, headers = {})
180
- request = Typhoeus::Request.new(url, :method => method, :body => body, :headers => headers)
181
- request.run
182
- request.response
183
- end
184
-
185
- def normalize_request_headers(headers)
186
- headers.merge("User-Agent"=>["Typhoeus - https://github.com/typhoeus/typhoeus"])
187
- end
188
- end
189
-
190
- HTTP_LIBRARY_ADAPTERS['typhoeus 0.4'] = Module.new do
191
- def self.http_library_name; "Typhoeus"; end
192
-
193
- def get_body_string(response)
194
- response.body
195
- end
196
- alias get_body_object get_body_string
197
-
198
- def get_header(header_key, response)
199
- response.headers_hash[header_key]
200
- end
201
-
202
- def make_http_request(method, url, body = nil, headers = {})
203
- Typhoeus::Request.send(method, url, :body => body, :headers => headers)
204
- end
205
-
206
- def normalize_request_headers(headers)
207
- headers
208
- end
209
- end
210
-
211
- HTTP_LIBRARY_ADAPTERS['excon'] = Module.new do
212
- def self.http_library_name; "Excon"; end
213
-
214
- def get_body_string(response)
215
- response.body
216
- end
217
- alias get_body_object get_body_string
218
-
219
- def get_header(header_key, response)
220
- response.headers[header_key]
221
- end
222
-
223
- def make_http_request(method, url, body = nil, headers = {})
224
- # There are multiple ways to use Excon but this is how fog (the main user of excon) uses it:
225
- # https://github.com/fog/fog/blob/v1.1.1/lib/fog/aws/rds.rb#L139-147
226
- Excon.new(url).request(:method => method.to_s.upcase, :body => body, :headers => headers)
227
- end
228
-
229
- def normalize_request_headers(headers)
230
- headers.merge('User-Agent' => [Excon::USER_AGENT])
231
- end
232
- end
233
-
234
- %w[ net_http typhoeus patron ].each do |_faraday_adapter|
235
- if _faraday_adapter == 'typhoeus' &&
236
- defined?(::Typhoeus::VERSION) &&
237
- ::Typhoeus::VERSION.to_f >= 0.5
238
- require 'typhoeus/adapters/faraday'
239
- end
240
-
241
- HTTP_LIBRARY_ADAPTERS["faraday (w/ #{_faraday_adapter})"] = Module.new do
242
- class << self; self; end.class_eval do
243
- define_method(:http_library_name) do
244
- "Faraday (#{_faraday_adapter})"
245
- end
246
- end
247
-
248
- define_method(:faraday_adapter) { _faraday_adapter.to_sym }
249
-
250
- def get_body_string(response)
251
- response.body
252
- end
253
- alias get_body_object get_body_string
254
-
255
- def get_header(header_key, response)
256
- value = response.headers[header_key]
257
- value.split(', ') if value
258
- end
259
-
260
- def make_http_request(method, url, body = nil, headers = {})
261
- url_root, url_rest = split_url(url)
262
-
263
- faraday_connection(url_root).send(method) do |req|
264
- req.url url_rest
265
- headers.each { |k, v| req[k] = v }
266
- req.body = body if body
267
- end
268
- end
269
-
270
- def split_url(url)
271
- uri = URI.parse(url)
272
- url_root = "#{uri.scheme}://#{uri.host}:#{uri.port}"
273
- rest = url.sub(url_root, '')
274
-
275
- [url_root, rest]
276
- end
277
-
278
- def faraday_connection(url_root)
279
- Faraday::Connection.new(:url => url_root) do |builder|
280
- builder.adapter faraday_adapter
281
- end
282
- end
283
-
284
- def normalize_request_headers(headers)
285
- headers.merge("User-Agent" => ["Faraday v#{Faraday::VERSION}"])
286
- end
287
- end
288
- end
289
-
@@ -1,21 +0,0 @@
1
- class LimitedURI
2
- extend Forwardable
3
-
4
- def_delegators :@uri, :scheme, :host, :port, :port=, :path, :query, :query=, :to_s
5
-
6
- def initialize(uri)
7
- @uri = uri
8
- end
9
-
10
- def ==(other)
11
- to_s == other.to_s
12
- end
13
-
14
- def self.parse(uri)
15
- return uri if uri.is_a? LimitedURI
16
- return new(uri) if uri.is_a? URI
17
- return new(URI.parse(uri)) if uri.is_a? String
18
-
19
- raise URI::InvalidURIError
20
- end
21
- end
@@ -1,7 +0,0 @@
1
- RUBY_INTERPRETER = if RUBY_PLATFORM == 'java'
2
- :jruby
3
- elsif defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
4
- :rubinius
5
- else
6
- :mri
7
- end
@@ -1,63 +0,0 @@
1
- shared_examples "Excon streaming" do
2
- context "when Excon's streaming API is used" do
3
- def make_request_to(path)
4
- chunks = []
5
-
6
- Excon.get "http://localhost:#{VCR::SinatraApp.port}#{path}", :response_block => lambda { |chunk, remaining_bytes, total_bytes|
7
- chunks << chunk
8
- }
9
-
10
- chunks.join
11
- end
12
-
13
- it 'properly records and plays back the response' do
14
- allow(VCR).to receive(:real_http_connections_allowed?).and_return(true)
15
- recorded, played_back = [1, 2].map do
16
- make_request_to('/foo')
17
- end
18
-
19
- expect(recorded).to eq(played_back)
20
- expect(recorded).to eq("FOO!")
21
- end
22
-
23
- it 'properly records and plays back the response for unexpected status' do
24
- allow(VCR).to receive(:real_http_connections_allowed?).and_return(true)
25
- recorded, played_back = [1, 2].map do
26
- chunks = []
27
-
28
- VCR.use_cassette('excon_streaming_error', :record => :once) do
29
- begin
30
- Excon.get "http://localhost:#{VCR::SinatraApp.port}/404_not_200", :expects => 200, :response_block => lambda { |chunk, remaining_bytes, total_bytes|
31
- chunks << chunk
32
- }
33
- rescue Excon::Errors::Error => e
34
- chunks << e.response.body
35
- end
36
- end
37
-
38
- chunks.join
39
- end
40
-
41
- expect(recorded).to eq(played_back)
42
- expect(recorded).to eq('404 not 200')
43
- end
44
-
45
- context "when a cassette is played back and appended to" do
46
- it 'does not allow Excon to mutate the response body in the cassette' do
47
- VCR.use_cassette('excon_streaming', :record => :new_episodes) do
48
- expect(make_request_to('/')).to eq('GET to root')
49
- end
50
-
51
- VCR.use_cassette('excon_streaming', :record => :new_episodes) do
52
- expect(make_request_to('/')).to eq('GET to root')
53
- expect(make_request_to('/foo')).to eq('FOO!') # so it will save to disk again
54
- end
55
-
56
- VCR.use_cassette('excon_streaming', :record => :new_episodes) do
57
- expect(make_request_to('/')).to eq('GET to root')
58
- end
59
- end
60
- end
61
- end
62
- end
63
-