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,153 +0,0 @@
1
- Feature: Filter sensitive data
2
-
3
- Note: this config option is also available as `define_cassette_placeholder`
4
- to reflect the fact that it is useful for more than just sensitive data.
5
-
6
- The `filter_sensitive_data` configuration option can be used to prevent
7
- sensitive data from being written to your cassette files. This may be
8
- important if you commit your cassettes files to source control and do
9
- not want your sensitive data exposed. Pass the following arguments to
10
- `filter_sensitive_data`:
11
-
12
- - A substitution string. This is the string that will be written to
13
- the cassettte file as a placeholder. It should be unique and you
14
- may want to wrap it in special characters like `{ }` or `< >`.
15
- - A symbol specifying a tag (optional). If a tag is given, the
16
- filtering will only be applied to cassettes with the given tag.
17
- - A block. The block should return the sensitive text that you want
18
- replaced with the substitution string. If your block accepts an
19
- argument, the HTTP interaction will be yielded so that you can
20
- dynamically specify the sensitive text based on the interaction
21
- (see the last scenario for an example of this).
22
-
23
- When the interactions are replayed, the sensitive text will replace the
24
- substitution string so that the interaction will be identical to what was
25
- originally recorded.
26
-
27
- You can specify as many filterings as you want.
28
-
29
- Scenario: Multiple filterings
30
- Given a file named "filtering.rb" with:
31
- """ruby
32
- if ARGV.include?('--with-server')
33
- $server = start_sinatra_app do
34
- get('/') { "Hello World" }
35
- end
36
- end
37
-
38
- require 'vcr'
39
-
40
- VCR.configure do |c|
41
- c.hook_into :webmock
42
- c.cassette_library_dir = 'cassettes'
43
- c.filter_sensitive_data('<GREETING>') { 'Hello' }
44
- c.filter_sensitive_data('<LOCATION>') { 'World' }
45
- end
46
-
47
- VCR.use_cassette('filtering') do
48
- response = Net::HTTP.get_response('localhost', '/', $server ? $server.port : 0)
49
- puts "Response: #{response.body}"
50
- end
51
- """
52
- When I run `ruby filtering.rb --with-server`
53
- Then the output should contain "Response: Hello World"
54
- And the file "cassettes/filtering.yml" should contain "<GREETING> <LOCATION>"
55
- And the file "cassettes/filtering.yml" should not contain "Hello"
56
- And the file "cassettes/filtering.yml" should not contain "World"
57
-
58
- When I run `ruby filtering.rb`
59
- Then the output should contain "Hello World"
60
-
61
- Scenario: Filter tagged cassettes
62
- Given a file named "tagged_filtering.rb" with:
63
- """ruby
64
- if ARGV.include?('--with-server')
65
- response_count = 0
66
- $server = start_sinatra_app do
67
- get('/') { "Hello World #{response_count += 1 }" }
68
- end
69
- end
70
-
71
- require 'vcr'
72
-
73
- VCR.configure do |c|
74
- c.hook_into :webmock
75
- c.cassette_library_dir = 'cassettes'
76
- c.filter_sensitive_data('<LOCATION>', :my_tag) { 'World' }
77
- end
78
-
79
- VCR.use_cassette('tagged', :tag => :my_tag) do
80
- response = Net::HTTP.get_response('localhost', '/', $server ? $server.port : 0)
81
- puts "Tagged Response: #{response.body}"
82
- end
83
-
84
- VCR.use_cassette('untagged', :record => :new_episodes) do
85
- response = Net::HTTP.get_response('localhost', '/', $server ? $server.port : 0)
86
- puts "Untagged Response: #{response.body}"
87
- end
88
- """
89
- When I run `ruby tagged_filtering.rb --with-server`
90
- Then the output should contain each of the following:
91
- | Tagged Response: Hello World 1 |
92
- | Untagged Response: Hello World 2 |
93
- And the file "cassettes/tagged.yml" should contain "Hello <LOCATION> 1"
94
- And the file "cassettes/untagged.yml" should contain "Hello World 2"
95
-
96
- When I run `ruby tagged_filtering.rb`
97
- Then the output should contain each of the following:
98
- | Tagged Response: Hello World 1 |
99
- | Untagged Response: Hello World 2 |
100
-
101
- Scenario: Filter dynamic data based on yielded HTTP interaction
102
- Given a file named "dynamic_filtering.rb" with:
103
- """ruby
104
- include_http_adapter_for('net/http')
105
-
106
- if ARGV.include?('--with-server')
107
- $server = start_sinatra_app do
108
- helpers do
109
- def request_header_for(header_key_fragment)
110
- key = env.keys.find { |k| k =~ /#{header_key_fragment}/i }
111
- env[key]
112
- end
113
- end
114
-
115
- get('/') { "#{request_header_for('username')}/#{request_header_for('password')}" }
116
- end
117
- end
118
-
119
- require 'vcr'
120
-
121
- USER_PASSWORDS = {
122
- 'john.doe' => 'monkey',
123
- 'jane.doe' => 'cheetah'
124
- }
125
-
126
- VCR.configure do |c|
127
- c.hook_into :webmock
128
- c.cassette_library_dir = 'cassettes'
129
- c.filter_sensitive_data('<PASSWORD>') do |interaction|
130
- USER_PASSWORDS[interaction.request.headers['X-Http-Username'].first]
131
- end
132
- end
133
-
134
- VCR.use_cassette('example', :match_requests_on => [:method, :uri, :headers]) do
135
- port = $server ? $server.port : 0
136
- puts "Response: " + response_body_for(
137
- :get, "http://localhost:#{port}/", nil,
138
- 'X-Http-Username' => 'john.doe',
139
- 'X-Http-Password' => USER_PASSWORDS['john.doe']
140
- )
141
- end
142
- """
143
- When I run `ruby dynamic_filtering.rb --with-server`
144
- Then the output should contain "john.doe/monkey"
145
- And the file "cassettes/example.yml" should contain "john.doe/<PASSWORD>"
146
- And the file "cassettes/example.yml" should contain a YAML fragment like:
147
- """
148
- X-Http-Password:
149
- - <PASSWORD>
150
- """
151
-
152
- When I run `ruby dynamic_filtering.rb`
153
- Then the output should contain "john.doe/monkey"
@@ -1,172 +0,0 @@
1
- Feature: hook_into
2
-
3
- The `hook_into` configuration option determines how VCR hooks into the
4
- HTTP requests to record and replay them. There are currently 4 valid
5
- options which support many different HTTP libraries:
6
-
7
- - :webmock can be used to hook into requests from:
8
- - Net::HTTP
9
- - HTTPClient
10
- - Patron
11
- - Curb (Curl::Easy, but not Curl::Multi)
12
- - EM HTTP Request
13
- - Typhoeus (Typhoeus::Hydra, but not Typhoeus::Easy or Typhoeus::Multi)
14
- - Excon
15
- - :typhoeus can be used to hook into itself (as long as you use Typhoeus::Hydra,
16
- but not Typhoeus::Easy or Typhoeus::Multi).
17
- - :excon can be used to hook into itself.
18
- - :faraday can be used to hook into itself.
19
- - :fakeweb (deprecated) can be used to hook into Net::HTTP requests.
20
-
21
- There are some addiitonal trade offs to consider when deciding which
22
- option to use:
23
-
24
- - WebMock uses extensive monkey patching to hook into supported HTTP
25
- libraries. No monkey patching is used for Typhoeus, Excon or Faraday.
26
- - Typhoeus, Excon, Faraday can be used together, and with either FakeWeb or WebMock.
27
- - FakeWeb and WebMock cannot both be used at the same time.
28
-
29
- Regardless of which library you use, VCR takes care of all of the configuration
30
- for you. You should not need to interact directly with FakeWeb, WebMock or the
31
- stubbing facilities of Typhoeus, Excon or Faraday. If/when you decide to change stubbing
32
- libraries (i.e. if you initially use FakeWeb because it's faster but later need the
33
- additional features of WebMock) you can change the `hook_into` configuration
34
- option and it'll work with no other changes required.
35
-
36
- Scenario Outline: Record and replay a request using each supported hook_into/http library combination
37
- Given a file named "hook_into_http_lib_combo.rb" with:
38
- """ruby
39
- include_http_adapter_for("<http_lib>")
40
-
41
- require 'vcr'
42
- VCR.configure { |c| c.ignore_localhost = true }
43
-
44
- $server = start_sinatra_app do
45
- get('/') { ARGV[0] }
46
- end
47
-
48
- puts "The response for request 1 was: #{response_body_for(:get, "http://localhost:#{$server.port}/")}"
49
-
50
- VCR.configure do |c|
51
- <configuration>
52
- c.cassette_library_dir = 'vcr_cassettes'
53
- c.ignore_localhost = false
54
- c.default_cassette_options = { :serialize_with => :syck }
55
- end
56
-
57
- VCR.use_cassette('example') do
58
- puts "The response for request 2 was: #{response_body_for(:get, "http://localhost:#{$server.port}/")}"
59
- end
60
- """
61
- When I run `ruby hook_into_http_lib_combo.rb 'Hello World'`
62
- Then the output should contain each of the following:
63
- | The response for request 1 was: Hello World |
64
- | The response for request 2 was: Hello World |
65
- And the file "vcr_cassettes/example.yml" should contain "Hello World"
66
-
67
- When I run `ruby hook_into_http_lib_combo.rb 'Goodbye World'`
68
- Then the output should contain each of the following:
69
- | The response for request 1 was: Goodbye World |
70
- | The response for request 2 was: Hello World |
71
- And the file "vcr_cassettes/example.yml" should contain "Hello World"
72
-
73
- Examples:
74
- | configuration | http_lib |
75
- | c.hook_into :fakeweb | net/http |
76
- | c.hook_into :webmock | net/http |
77
- | c.hook_into :webmock | httpclient |
78
- | c.hook_into :webmock | curb |
79
- | c.hook_into :webmock | patron |
80
- | c.hook_into :webmock | em-http-request |
81
- | c.hook_into :webmock | typhoeus |
82
- | c.hook_into :webmock | excon |
83
- | c.hook_into :typhoeus | typhoeus |
84
- | c.hook_into :excon | excon |
85
- | c.hook_into :faraday | faraday (w/ net_http) |
86
- | c.hook_into :faraday | faraday (w/ typhoeus) |
87
-
88
- @exclude-jruby @exclude-rbx
89
- Scenario Outline: Use Typhoeus, Excon and Faraday in combination with FakeWeb or WebMock
90
- Given a file named "hook_into_multiple.rb" with:
91
- """ruby
92
- require 'typhoeus'
93
- require 'excon'
94
- require 'faraday'
95
- require 'vcr'
96
- <extra_require>
97
-
98
- VCR.configure { |c| c.ignore_localhost = true }
99
-
100
- $server = start_sinatra_app do
101
- get('/:path') { "#{ARGV[0]} #{params[:path]}" }
102
- end
103
-
104
- def net_http_response
105
- Net::HTTP.get_response('localhost', '/net_http', $server.port).body
106
- end
107
-
108
- def typhoeus_response
109
- Typhoeus::Request.get("http://localhost:#{$server.port}/typhoeus").body
110
- end
111
-
112
- def excon_response
113
- Excon.get("http://localhost:#{$server.port}/excon").body
114
- end
115
-
116
- def faraday_response
117
- Faraday::Connection.new(:url => "http://localhost:#{$server.port}") do |builder|
118
- builder.adapter :<faraday_adapter>
119
- end.get('/faraday').body
120
- end
121
-
122
- puts "Net::HTTP 1: #{net_http_response}"
123
- puts "Typhoeus 1: #{typhoeus_response}"
124
- puts "Excon 1: #{excon_response}"
125
- puts "Faraday 1: #{faraday_response}"
126
-
127
- VCR.configure do |c|
128
- c.hook_into <hook_into>, :typhoeus, :excon, :faraday
129
- c.cassette_library_dir = 'vcr_cassettes'
130
- c.ignore_localhost = false
131
- end
132
-
133
- VCR.use_cassette('example') do
134
- puts "Net::HTTP 2: #{net_http_response}"
135
- puts "Typhoeus 2: #{typhoeus_response}"
136
- puts "Excon 2: #{excon_response}"
137
- puts "Faraday 2: #{faraday_response}"
138
- end
139
- """
140
- When I run `ruby hook_into_multiple.rb 'Hello'`
141
- Then the output should contain each of the following:
142
- | Net::HTTP 1: Hello net_http |
143
- | Typhoeus 1: Hello typhoeus |
144
- | Excon 1: Hello excon |
145
- | Faraday 1: Hello faraday |
146
- | Net::HTTP 2: Hello net_http |
147
- | Typhoeus 2: Hello typhoeus |
148
- | Excon 2: Hello excon |
149
- | Faraday 2: Hello faraday |
150
- And the cassette "vcr_cassettes/example.yml" should have the following response bodies:
151
- | Hello net_http |
152
- | Hello typhoeus |
153
- | Hello excon |
154
- | Hello faraday |
155
-
156
- When I run `ruby hook_into_multiple.rb 'Goodbye'`
157
- Then the output should contain each of the following:
158
- | Net::HTTP 1: Goodbye net_http |
159
- | Typhoeus 1: Goodbye typhoeus |
160
- | Excon 1: Goodbye excon |
161
- | Faraday 1: Goodbye faraday |
162
- | Net::HTTP 2: Hello net_http |
163
- | Typhoeus 2: Hello typhoeus |
164
- | Excon 2: Hello excon |
165
- | Faraday 2: Hello faraday |
166
-
167
- Examples:
168
- | hook_into | faraday_adapter | extra_require |
169
- | :fakeweb | net_http | |
170
- | :webmock | net_http | |
171
- | :fakeweb | typhoeus | require 'typhoeus/adapters/faraday' |
172
- | :webmock | typhoeus | require 'typhoeus/adapters/faraday' |
@@ -1,192 +0,0 @@
1
- Feature: Ignore Request
2
-
3
- By default, VCR hooks into every request, either allowing it and recording
4
- it, or playing back a recorded response, or raising an error to force you
5
- to deal with the new request. In some situations, you may prefer to have
6
- VCR ignore some requests.
7
-
8
- VCR provides 3 configuration options to accomplish this:
9
-
10
- * `ignore_request { |req| ... }` will ignore any request for which the
11
- given block returns true.
12
- * `ignore_hosts 'foo.com', 'bar.com'` allows you to specify particular
13
- hosts to ignore.
14
- * `ignore_localhost = true` is equivalent to `ignore_hosts 'localhost',
15
- '127.0.0.1', '0.0.0.0'`. It is particularly useful for when you use
16
- VCR with a javascript-enabled capybara driver, since capybara boots
17
- your rack app and makes localhost requests to it to check that it has
18
- booted.
19
-
20
- Ignored requests are not recorded and are always allowed, regardless of
21
- the record mode, and even outside of a `VCR.use_cassette` block.
22
-
23
- Background:
24
- Given a file named "sinatra_app.rb" with:
25
- """ruby
26
- response_count = 0
27
- $server = start_sinatra_app do
28
- get('/') { "Port 7777 Response #{response_count += 1}" }
29
- end
30
- """
31
-
32
- @exclude-jruby
33
- Scenario Outline: ignore requests to a specific port
34
- Given a file named "ignore_request.rb" with:
35
- """ruby
36
- include_http_adapter_for("<http_lib>")
37
- require 'sinatra_app.rb'
38
-
39
- response_count = 0
40
- $server_8888 = start_sinatra_app do
41
- get('/') { "Port 8888 Response #{response_count += 1}" }
42
- end
43
-
44
- require 'vcr'
45
-
46
- VCR.configure do |c|
47
- c.ignore_request do |request|
48
- URI(request.uri).port == $server.port
49
- end
50
-
51
- c.default_cassette_options = { :serialize_with => :syck }
52
- c.cassette_library_dir = 'cassettes'
53
- <configuration>
54
- end
55
-
56
- VCR.use_cassette('example') do
57
- puts response_body_for(:get, "http://localhost:#{$server_8888.port}/")
58
- end
59
-
60
- VCR.use_cassette('example') do
61
- puts response_body_for(:get, "http://localhost:#{$server.port}/")
62
- end
63
-
64
- puts response_body_for(:get, "http://localhost:#{$server.port}/")
65
- puts response_body_for(:get, "http://localhost:#{$server_8888.port}/")
66
- """
67
- When I run `ruby ignore_request.rb`
68
- Then it should fail with an error like:
69
- """
70
- An HTTP request has been made that VCR does not know how to handle:
71
- """
72
- And the output should contain:
73
- """
74
- Port 8888 Response 1
75
- Port 7777 Response 1
76
- Port 7777 Response 2
77
- """
78
- And the file "cassettes/example.yml" should contain "Port 8888"
79
- And the file "cassettes/example.yml" should not contain "Port 7777"
80
-
81
- Examples:
82
- | configuration | http_lib |
83
- | c.hook_into :fakeweb | net/http |
84
- | c.hook_into :webmock | net/http |
85
- | c.hook_into :typhoeus | typhoeus |
86
- | c.hook_into :faraday | faraday (w/ net_http) |
87
-
88
- Scenario Outline: ignored host requests are not recorded and are always allowed
89
- Given a file named "ignore_hosts.rb" with:
90
- """ruby
91
- include_http_adapter_for("<http_lib>")
92
- require 'sinatra_app.rb'
93
-
94
- require 'vcr'
95
-
96
- VCR.configure do |c|
97
- c.ignore_hosts '127.0.0.1', 'localhost'
98
- c.cassette_library_dir = 'cassettes'
99
- <configuration>
100
- end
101
-
102
- VCR.use_cassette('example') do
103
- puts response_body_for(:get, "http://localhost:#{$server.port}/")
104
- end
105
-
106
- puts response_body_for(:get, "http://localhost:#{$server.port}/")
107
- """
108
- When I run `ruby ignore_hosts.rb`
109
- Then it should pass with:
110
- """
111
- Port 7777 Response 1
112
- Port 7777 Response 2
113
- """
114
- And the file "cassettes/example.yml" should not exist
115
-
116
- Examples:
117
- | configuration | http_lib |
118
- | c.hook_into :fakeweb | net/http |
119
- | c.hook_into :webmock | net/http |
120
- | c.hook_into :typhoeus | typhoeus |
121
- | c.hook_into :excon | excon |
122
- | c.hook_into :faraday | faraday (w/ net_http) |
123
-
124
- @exclude-jruby
125
- Scenario Outline: localhost requests are not treated differently by default
126
- Given a file named "localhost_not_ignored.rb" with:
127
- """ruby
128
- include_http_adapter_for("<http_lib>")
129
- require 'sinatra_app.rb'
130
-
131
- require 'vcr'
132
-
133
- VCR.configure do |c|
134
- c.cassette_library_dir = 'cassettes'
135
- c.default_cassette_options = { :serialize_with => :syck }
136
- <configuration>
137
- end
138
-
139
- VCR.use_cassette('localhost') do
140
- response_body_for(:get, "http://localhost:#{$server.port}/")
141
- end
142
-
143
- response_body_for(:get, "http://localhost:#{$server.port}/")
144
- """
145
- When I run `ruby localhost_not_ignored.rb`
146
- Then it should fail with "An HTTP request has been made that VCR does not know how to handle"
147
- And the file "cassettes/localhost.yml" should contain "Port 7777 Response 1"
148
-
149
- Examples:
150
- | configuration | http_lib |
151
- | c.hook_into :fakeweb | net/http |
152
- | c.hook_into :webmock | net/http |
153
- | c.hook_into :typhoeus | typhoeus |
154
- | c.hook_into :excon | excon |
155
- | c.hook_into :faraday | faraday (w/ net_http) |
156
-
157
- Scenario Outline: localhost requests are allowed and not recorded when ignore_localhost = true
158
- Given a file named "ignore_localhost_true.rb" with:
159
- """ruby
160
- include_http_adapter_for("<http_lib>")
161
- require 'sinatra_app.rb'
162
-
163
- require 'vcr'
164
-
165
- VCR.configure do |c|
166
- c.ignore_localhost = true
167
- c.cassette_library_dir = 'cassettes'
168
- <configuration>
169
- end
170
-
171
- VCR.use_cassette('localhost') do
172
- puts response_body_for(:get, "http://localhost:#{$server.port}/")
173
- end
174
-
175
- puts response_body_for(:get, "http://localhost:#{$server.port}/")
176
- """
177
- When I run `ruby ignore_localhost_true.rb`
178
- Then it should pass with:
179
- """
180
- Port 7777 Response 1
181
- Port 7777 Response 2
182
- """
183
- And the file "cassettes/localhost.yml" should not exist
184
-
185
- Examples:
186
- | configuration | http_lib |
187
- | c.hook_into :fakeweb | net/http |
188
- | c.hook_into :webmock | net/http |
189
- | c.hook_into :typhoeus | typhoeus |
190
- | c.hook_into :excon | excon |
191
- | c.hook_into :faraday | faraday (w/ net_http) |
192
-