vcr 1.1.0 → 1.1.1

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 (84) hide show
  1. data/.document +5 -0
  2. data/.gitignore +27 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Gemfile +24 -0
  5. data/Gemfile.lock +119 -0
  6. data/README.md +3 -6
  7. data/Rakefile +70 -0
  8. data/benchmarks/http_stubbing_libraries.rb +59 -0
  9. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/regex_cassette.yml +43 -0
  10. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette1.yml +43 -0
  11. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette2.yml +63 -0
  12. data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette3.yml +85 -0
  13. data/features/fixtures/vcr_cassettes/1.9.1/erb_cassette.yml +36 -0
  14. data/features/fixtures/vcr_cassettes/1.9.1/match_requests_on.yml +35 -0
  15. data/features/fixtures/vcr_cassettes/1.9.1/nested_replay_cassette.yml +32 -0
  16. data/features/fixtures/vcr_cassettes/1.9.1/not_the_real_response.yml +43 -0
  17. data/features/fixtures/vcr_cassettes/1.9.1/replay_localhost_cassette.yml +32 -0
  18. data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/regex_cassette.yml +43 -0
  19. data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/replay_cassette1.yml +43 -0
  20. data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/replay_cassette2.yml +47 -0
  21. data/features/fixtures/vcr_cassettes/not_1.9.1/cucumber_tags/replay_cassette3.yml +85 -0
  22. data/features/fixtures/vcr_cassettes/not_1.9.1/erb_cassette.yml +36 -0
  23. data/features/fixtures/vcr_cassettes/not_1.9.1/match_requests_on.yml +35 -0
  24. data/features/fixtures/vcr_cassettes/not_1.9.1/nested_replay_cassette.yml +24 -0
  25. data/features/fixtures/vcr_cassettes/not_1.9.1/not_the_real_response.yml +43 -0
  26. data/features/fixtures/vcr_cassettes/not_1.9.1/replay_localhost_cassette.yml +32 -0
  27. data/features/http_client.feature +16 -0
  28. data/features/net_http.feature +27 -0
  29. data/features/record_response.feature +66 -0
  30. data/features/replay_recorded_response.feature +96 -0
  31. data/features/step_definitions/http_client_steps.rb +7 -0
  32. data/features/step_definitions/net_http_steps.rb +37 -0
  33. data/features/step_definitions/vcr_steps.rb +240 -0
  34. data/features/support/env.rb +104 -0
  35. data/features/webmock.feature +26 -0
  36. data/lib/vcr.rb +2 -2
  37. data/lib/vcr/extensions/net_http.rb +0 -8
  38. data/lib/vcr/http_stubbing_adapters/common.rb +39 -0
  39. data/lib/vcr/http_stubbing_adapters/fakeweb.rb +74 -70
  40. data/lib/vcr/http_stubbing_adapters/webmock.rb +61 -62
  41. data/lib/vcr/version.rb +1 -1
  42. data/spec/cassette_spec.rb +280 -0
  43. data/spec/config_spec.rb +76 -0
  44. data/spec/cucumber_tags_spec.rb +55 -0
  45. data/spec/deprecations_spec.rb +52 -0
  46. data/spec/extensions/net_http_response_spec.rb +85 -0
  47. data/spec/extensions/net_http_spec.rb +77 -0
  48. data/spec/fixtures/1.9.1/0_3_1_cassette.yml +29 -0
  49. data/spec/fixtures/1.9.1/cassette_spec/erb_with_no_vars.yml +32 -0
  50. data/spec/fixtures/1.9.1/cassette_spec/erb_with_vars.yml +32 -0
  51. data/spec/fixtures/1.9.1/cassette_spec/example.yml +110 -0
  52. data/spec/fixtures/1.9.1/cassette_spec/with_localhost_requests.yml +86 -0
  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 +106 -0
  57. data/spec/fixtures/1.9.1/match_requests_on.yml +185 -0
  58. data/spec/fixtures/not_1.9.1/0_3_1_cassette.yml +29 -0
  59. data/spec/fixtures/not_1.9.1/cassette_spec/erb_with_no_vars.yml +32 -0
  60. data/spec/fixtures/not_1.9.1/cassette_spec/erb_with_vars.yml +32 -0
  61. data/spec/fixtures/not_1.9.1/cassette_spec/example.yml +110 -0
  62. data/spec/fixtures/not_1.9.1/cassette_spec/with_localhost_requests.yml +86 -0
  63. data/spec/fixtures/not_1.9.1/example_net_http.yml +14 -0
  64. data/spec/fixtures/not_1.9.1/example_net_http_request.yml +12 -0
  65. data/spec/fixtures/not_1.9.1/example_net_http_response.yml +25 -0
  66. data/spec/fixtures/not_1.9.1/fake_example.com_responses.yml +106 -0
  67. data/spec/fixtures/not_1.9.1/match_requests_on.yml +185 -0
  68. data/spec/http_stubbing_adapters/fakeweb_spec.rb +35 -0
  69. data/spec/http_stubbing_adapters/webmock_spec.rb +35 -0
  70. data/spec/request_matcher_spec.rb +194 -0
  71. data/spec/spec_helper.rb +40 -0
  72. data/spec/structs_spec.rb +121 -0
  73. data/spec/support/disable_warnings.rb +12 -0
  74. data/spec/support/http_library_adapters.rb +272 -0
  75. data/spec/support/http_stubbing_adapter.rb +100 -0
  76. data/spec/support/pending_on_heroku.rb +14 -0
  77. data/spec/support/temp_cassette_library_dir.rb +16 -0
  78. data/spec/support/vcr_localhost_server.rb +53 -0
  79. data/spec/vcr_spec.rb +198 -0
  80. data/spec/version_spec.rb +11 -0
  81. data/vcr.gemspec +43 -0
  82. metadata +134 -73
  83. data/lib/vcr/http_stubbing_adapters/base.rb +0 -36
  84. data/lib/vcr/version.rbc +0 -572
@@ -0,0 +1,85 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://example.com:80/
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ last-modified:
14
+ - Tue, 15 Nov 2005 13:24:10 GMT
15
+ connection:
16
+ - Keep-Alive
17
+ etag:
18
+ - "\"24ec5-1b6-4059a80bfd280\""
19
+ content-type:
20
+ - text/html; charset=UTF-8
21
+ date:
22
+ - Thu, 25 Feb 2010 15:22:32 GMT
23
+ server:
24
+ - Apache/2.2.3 (CentOS)
25
+ content-length:
26
+ - "438"
27
+ age:
28
+ - "2643"
29
+ accept-ranges:
30
+ - bytes
31
+ body: |
32
+ <HTML>
33
+ <HEAD>
34
+ <TITLE>Example Web Page</TITLE>
35
+ </HEAD>
36
+ <body>
37
+ <p>
38
+ This is not the real response from example.com
39
+ </p>
40
+ </BODY>
41
+ </HTML>
42
+
43
+ http_version: "1.1"
44
+ - !ruby/struct:VCR::HTTPInteraction
45
+ request: !ruby/struct:VCR::Request
46
+ method: :get
47
+ uri: http://example.com:80/
48
+ body:
49
+ headers:
50
+ response: !ruby/struct:VCR::Response
51
+ status: !ruby/struct:VCR::ResponseStatus
52
+ code: 200
53
+ message: OK
54
+ headers:
55
+ last-modified:
56
+ - Tue, 15 Nov 2005 13:24:10 GMT
57
+ connection:
58
+ - Keep-Alive
59
+ etag:
60
+ - "\"24ec5-1b6-4059a80bfd280\""
61
+ content-type:
62
+ - text/html; charset=UTF-8
63
+ date:
64
+ - Thu, 25 Feb 2010 15:22:32 GMT
65
+ server:
66
+ - Apache/2.2.3 (CentOS)
67
+ content-length:
68
+ - "438"
69
+ age:
70
+ - "2643"
71
+ accept-ranges:
72
+ - bytes
73
+ body: |
74
+ <HTML>
75
+ <HEAD>
76
+ <TITLE>Example Web Page</TITLE>
77
+ </HEAD>
78
+ <body>
79
+ <p>
80
+ This is another fake response from example.com
81
+ </p>
82
+ </BODY>
83
+ </HTML>
84
+
85
+ http_version: "1.1"
@@ -0,0 +1,36 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://example.com:80/embedded_ruby_code
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ etag:
14
+ - "\"24ec5-1b6-4059a80bfd280\""
15
+ last-modified:
16
+ - Tue, 15 Nov 2005 13:24:10 GMT
17
+ connection:
18
+ - Keep-Alive
19
+ content-type:
20
+ - text/html; charset=UTF-8
21
+ date:
22
+ - Thu, 25 Feb 2010 15:20:47 GMT
23
+ server:
24
+ - Apache/2.2.3 (CentOS)
25
+ content-length:
26
+ - "438"
27
+ age:
28
+ - "2546"
29
+ accept-ranges:
30
+ - bytes
31
+ body: |
32
+ Some embedded ruby code: <%= 4 + 3 %>
33
+ The value of some_variable is: <%= some_variable %>
34
+
35
+ http_version: "1.1"
36
+
@@ -0,0 +1,35 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :post
5
+ uri: http://example.com:80/
6
+ body: foo=bar
7
+ headers:
8
+ x-http-user:
9
+ - bob
10
+ response: !ruby/struct:VCR::Response
11
+ status: !ruby/struct:VCR::ResponseStatus
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ etag:
16
+ - "\"24ec5-1b6-4059a80bfd280\""
17
+ body: foo=bar response | bob response
18
+ http_version: "1.1"
19
+ - !ruby/struct:VCR::HTTPInteraction
20
+ request: !ruby/struct:VCR::Request
21
+ method: :post
22
+ uri: http://example.com:80/
23
+ body: bar=bazz
24
+ headers:
25
+ x-http-user:
26
+ - joe
27
+ response: !ruby/struct:VCR::Response
28
+ status: !ruby/struct:VCR::ResponseStatus
29
+ code: 200
30
+ message: OK
31
+ headers:
32
+ etag:
33
+ - "\"24ec5-1b6-4059a80bfd280\""
34
+ body: bar=bazz response | joe response
35
+ http_version: "1.1"
@@ -0,0 +1,24 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://example.com:80/nested
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 404
11
+ message: Not Found
12
+ headers:
13
+ connection:
14
+ - close
15
+ content-type:
16
+ - text/html; charset=iso-8859-1
17
+ date:
18
+ - Thu, 25 Feb 2010 15:19:40 GMT
19
+ server:
20
+ - Apache/2.2.3 (CentOS)
21
+ content-length:
22
+ - "280"
23
+ body: The nested response
24
+ http_version: "1.1"
@@ -0,0 +1,43 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://example.com:80/
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ last-modified:
14
+ - Tue, 15 Nov 2005 13:24:10 GMT
15
+ connection:
16
+ - Keep-Alive
17
+ etag:
18
+ - "\"24ec5-1b6-4059a80bfd280\""
19
+ content-type:
20
+ - text/html; charset=UTF-8
21
+ date:
22
+ - Thu, 25 Feb 2010 15:20:47 GMT
23
+ server:
24
+ - Apache/2.2.3 (CentOS)
25
+ content-length:
26
+ - "438"
27
+ age:
28
+ - "2546"
29
+ accept-ranges:
30
+ - bytes
31
+ body: |
32
+ <HTML>
33
+ <HEAD>
34
+ <TITLE>Example Web Page</TITLE>
35
+ </HEAD>
36
+ <body>
37
+ <p>
38
+ This is not the real response from example.com
39
+ </p>
40
+ </BODY>
41
+ </HTML>
42
+
43
+ http_version: "1.1"
@@ -0,0 +1,32 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://localhost/
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ etag:
14
+ - "\"24ec5-1b6-4059a80bfd280\""
15
+ last-modified:
16
+ - Tue, 15 Nov 2005 13:24:10 GMT
17
+ connection:
18
+ - Keep-Alive
19
+ content-type:
20
+ - text/html; charset=UTF-8
21
+ date:
22
+ - Thu, 25 Feb 2010 15:22:32 GMT
23
+ server:
24
+ - Apache/2.2.3 (CentOS)
25
+ content-length:
26
+ - "438"
27
+ age:
28
+ - "2643"
29
+ accept-ranges:
30
+ - bytes
31
+ body: This is a fake response.
32
+ http_version: "1.1"
@@ -0,0 +1,16 @@
1
+ @httpclient
2
+ Feature: HTTPClient
3
+ In order to have deterministic, fast tests that do not depend on an internet connection
4
+ As a TDD/BDD developer
5
+ I want VCR to work with asynchronous HTTPClient requests
6
+
7
+ Scenario: Record an asynchronous request
8
+ Given we do not have a "temp/asynchronous" cassette
9
+ When I make an asynchronous HTTPClient get request to "http://example.com" within the "temp/asynchronous" cassette
10
+ Then the "temp/asynchronous" library file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
11
+
12
+ @copy_not_the_real_response_to_temp
13
+ Scenario: Replay a response for an asynchronous request
14
+ Given the "temp/not_the_real_response" library file has a response for "http://example.com" that matches /This is not the real response from example\.com/
15
+ When I make an asynchronous HTTPClient get request to "http://example.com" within the "temp/not_the_real_response" cassette
16
+ Then the response for "http://example.com" should match /This is not the real response from example\.com/
@@ -0,0 +1,27 @@
1
+ @net_http
2
+ Feature: Net::HTTP
3
+ In order to have deterministic, fast tests that do not depend on an internet connection
4
+ As a TDD/BDD developer
5
+ I want to use VCR with Net::HTTP
6
+
7
+ Scenario: Record an asynchronous request (such as for mechanize)
8
+ Given we do not have a "temp/asynchronous" cassette
9
+ When I make an asynchronous Net::HTTP get request to "http://example.com" within the "temp/asynchronous" cassette
10
+ Then the "temp/asynchronous" library file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
11
+
12
+ @copy_not_the_real_response_to_temp
13
+ Scenario: Replay a response for an asynchronous request (such as for mechanize)
14
+ Given the "temp/not_the_real_response" library file has a response for "http://example.com" that matches /This is not the real response from example\.com/
15
+ When I make a replayed asynchronous Net::HTTP get request to "http://example.com" within the "temp/not_the_real_response" cassette
16
+ Then the response for "http://example.com" should match /This is not the real response from example\.com/
17
+
18
+ Scenario: Record a recursive post request
19
+ Given we do not have a "temp/recursive_post" cassette
20
+ When I make a recursive Net::HTTP post request to "http://example.com" within the "temp/recursive_post" cassette
21
+ Then the "temp/recursive_post" library file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
22
+ And the "temp/recursive_post" library file should have exactly 1 response
23
+
24
+ Scenario: Record a request with a block with a return statement
25
+ Given we do not have a "temp/block_with_a_return" cassette
26
+ When I make a returning block Net::HTTP get request to "http://example.com" within the "temp/block_with_a_return" cassette
27
+ Then the "temp/block_with_a_return" library file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
@@ -0,0 +1,66 @@
1
+ @all_http_libs
2
+ Feature: Record response
3
+ In order to have deterministic, fast tests that do not depend on an internet connection
4
+ As a TDD/BDD developer
5
+ I want to record responses for new requests so I can replay them in future test runs
6
+
7
+ Scenario: Record a response using VCR.use_cassette
8
+ Given we do not have a "temp/cassette" cassette
9
+ When I make an HTTP get request to "http://example.com/" within the "temp/cassette" cassette
10
+ Then the "temp/cassette" library file should have a response for "http://example.com/" that matches /You have reached this web page by typing.*example\.com/
11
+ And the "temp/cassette" library file should have normalized headers for all recorded interactions
12
+
13
+ @record_cassette1
14
+ Scenario: Record a response using a tagged scenario
15
+ Given we do not have a "cucumber_tags/record_cassette1" cassette
16
+ And this scenario is tagged with the vcr cassette tag: "@record_cassette1"
17
+ When I make an HTTP get request to "http://example.com/"
18
+ Then I can test the scenario cassette's recorded responses in the next scenario, after the cassette has been ejected
19
+
20
+ Scenario: Check the recorded response for the previous scenario
21
+ Given the previous scenario was tagged with the vcr cassette tag: "@record_cassette1"
22
+ Then the "cucumber_tags/record_cassette1" library file should have a response for "http://example.com/" that matches /You have reached this web page by typing.*example\.com/
23
+
24
+ @record_cassette2
25
+ Scenario: Use both a tagged scenario cassette and a nested cassette within a single step definition
26
+ Given we do not have a "cucumber_tags/record_cassette2" cassette
27
+ And we do not have a "temp/nested" cassette
28
+ And this scenario is tagged with the vcr cassette tag: "@record_cassette2"
29
+ When I make an HTTP get request to "http://example.com/before_nested"
30
+ And I make an HTTP get request to "http://example.com/nested" within the "temp/nested" cassette
31
+ And I make an HTTP get request to "http://example.com/after_nested"
32
+ Then I can test the scenario cassette's recorded responses in the next scenario, after the cassette has been ejected
33
+ And the "temp/nested" library file should have a response for "http://example.com/nested" that matches /The requested URL \/nested was not found/
34
+
35
+ Scenario: Check the recorded response for the previous scenario
36
+ Given the previous scenario was tagged with the vcr cassette tag: "@record_cassette2"
37
+ Then the "cucumber_tags/record_cassette2" library file should have a response for "http://example.com/before_nested" that matches /The requested URL \/before_nested was not found/
38
+ And the "cucumber_tags/record_cassette2" library file should have a response for "http://example.com/after_nested" that matches /The requested URL \/after_nested was not found/
39
+
40
+ Scenario: Make an HTTP request in a cassette with record mode set to :all
41
+ Given we do not have a "temp/record_all_cassette" cassette
42
+ When I make an HTTP get request to "http://example.com/" within the "temp/record_all_cassette" cassette using cassette options: { :record => :all }
43
+ Then the "temp/record_all_cassette" library file should have a response for "http://example.com/" that matches /You have reached this web page by typing.*example\.com/
44
+
45
+ Scenario: Make an HTTP request in a cassette with record mode set to :none
46
+ Given we do not have a "temp/record_none_cassette" cassette
47
+ When I make an HTTP get request to "http://example.com/" within the "temp/record_none_cassette" cassette using cassette options: { :record => :none }
48
+ Then the HTTP get request to "http://example.com/" should result in an error that mentions VCR
49
+ And there should not be a "temp/record_none_cassette" library file
50
+
51
+ @copy_not_the_real_response_to_temp
52
+ Scenario: Make an HTTP request in a cassette with record mode set to :new_episodes
53
+ Given we have a "temp/not_the_real_response" library file with a previously recorded response for "http://example.com/"
54
+ And we have a "temp/not_the_real_response" library file with no previously recorded response for "http://example.com/foo"
55
+ When I make HTTP get requests to "http://example.com/" and "http://example.com/foo" within the "temp/not_the_real_response" cassette
56
+ Then the "temp/not_the_real_response" library file should have a response for "http://example.com/" that matches /This is not the real response from example\.com/
57
+ And the "temp/not_the_real_response" library file should have a response for "http://example.com/foo" that matches /The requested URL \/foo was not found/
58
+
59
+ @spawns_localhost_server
60
+ Scenario: Ignore localhost setting allows localhost requests and does not record them
61
+ Given we do not have a "temp/localhost" cassette
62
+ And the ignore_localhost config setting is set to true
63
+ And a rack app is running on localhost that returns "hello world" for all requests
64
+ When I make an HTTP get request to the localhost rack app within the "temp/localhost" cassette
65
+ Then the response for the localhost rack app should match /hello world/
66
+ And there should not be a "temp/localhost" library file
@@ -0,0 +1,96 @@
1
+ @all_http_libs
2
+ Feature: Replay recorded response
3
+ In order to have deterministic, fast tests that do not depend on an internet connection
4
+ As a TDD/BDD developer
5
+ I want to replay responses for requests I have previously recorded
6
+
7
+ Scenario: Replay recorded response for a request in a VCR.use_cassette block
8
+ Given the "not_the_real_response" library file has a response for "http://example.com/" that matches /This is not the real response from example\.com/
9
+ When I make an HTTP get request to "http://example.com/" within the "not_the_real_response" cassette
10
+ Then the response for "http://example.com/" should match /This is not the real response from example\.com/
11
+
12
+ @replay_cassette1
13
+ Scenario: Replay recorded response for a request within a tagged scenario
14
+ Given this scenario is tagged with the vcr cassette tag: "@replay_cassette1"
15
+ And the "cucumber_tags/replay_cassette1" library file has a response for "http://example.com/" that matches /This is not the real response from example\.com/
16
+ When I make an HTTP get request to "http://example.com/"
17
+ Then the response for "http://example.com/" should match /This is not the real response from example\.com/
18
+
19
+ @replay_cassette2
20
+ Scenario: Use both a tagged scenario cassette and a nested cassette within a single step definition
21
+ Given this scenario is tagged with the vcr cassette tag: "@replay_cassette2"
22
+ And the "cucumber_tags/replay_cassette2" library file has a response for "http://example.com/before_nested" that matches /The before_nested response/
23
+ And the "nested_replay_cassette" library file has a response for "http://example.com/nested" that matches /The nested response/
24
+ And the "cucumber_tags/replay_cassette2" library file has a response for "http://example.com/after_nested" that matches /The after_nested response/
25
+ When I make an HTTP get request to "http://example.com/before_nested"
26
+ And I make an HTTP get request to "http://example.com/nested" within the "nested_replay_cassette" cassette
27
+ And I make an HTTP get request to "http://example.com/after_nested"
28
+ Then the response for "http://example.com/before_nested" should match /The before_nested response/
29
+ And the response for "http://example.com/nested" should match /The nested response/
30
+ And the response for "http://example.com/after_nested" should match /The after_nested response/
31
+
32
+ @copy_not_the_real_response_to_temp
33
+ Scenario: Make an HTTP request in a cassette with record mode set to :all
34
+ Given we have a "temp/not_the_real_response" library file with a previously recorded response for "http://example.com/"
35
+ And we have a "temp/not_the_real_response" library file with no previously recorded response for "http://example.com/foo"
36
+ When I make HTTP get requests to "http://example.com/" and "http://example.com/foo" within the "temp/not_the_real_response" cassette using cassette options: { :record => :all }
37
+ Then the response for "http://example.com/" should match /You have reached this web page by typing.*example\.com/
38
+ And the response for "http://example.com/foo" should match /The requested URL \/foo was not found/
39
+
40
+ @copy_not_the_real_response_to_temp
41
+ Scenario: Make an HTTP request in a cassette with record mode set to :none
42
+ Given we have a "temp/not_the_real_response" library file with a previously recorded response for "http://example.com/"
43
+ And we have a "temp/not_the_real_response" library file with no previously recorded response for "http://example.com/foo"
44
+ When I make HTTP get requests to "http://example.com/" and "http://example.com/foo" within the "temp/not_the_real_response" cassette using cassette options: { :record => :none }
45
+ Then the response for "http://example.com/" should match /This is not the real response from example\.com/
46
+ And the HTTP get request to "http://example.com/foo" should result in an error that mentions VCR
47
+
48
+ @copy_not_the_real_response_to_temp
49
+ Scenario: Make an HTTP request in a cassette with record mode set to :new_episodes
50
+ Given we have a "temp/not_the_real_response" library file with a previously recorded response for "http://example.com/"
51
+ And we have a "temp/not_the_real_response" library file with no previously recorded response for "http://example.com/foo"
52
+ When I make HTTP get requests to "http://example.com/" and "http://example.com/foo" within the "temp/not_the_real_response" cassette
53
+ Then the response for "http://example.com/" should match /This is not the real response from example\.com/
54
+ And the response for "http://example.com/foo" should match /The requested URL \/foo was not found/
55
+
56
+ @replay_cassette3
57
+ Scenario: Replay multiple different recorded responses for requests to the same URL
58
+ Given this scenario is tagged with the vcr cassette tag: "@replay_cassette3"
59
+ And the "cucumber_tags/replay_cassette3" library file has a response for "http://example.com/" that matches /This is not the real response from example\.com/
60
+ And the "cucumber_tags/replay_cassette3" library file has a response for "http://example.com/" that matches /This is another fake response from example\.com/
61
+ When I make an HTTP get request to "http://example.com/"
62
+ And I make an HTTP get request to "http://example.com/"
63
+ Then response 1 for "http://example.com/" should match /This is not the real response from example\.com/
64
+ And response 2 for "http://example.com/" should match /This is another fake response from example\.com/
65
+
66
+ @regex_cassette
67
+ Scenario: Replay a cassette with a regex URI
68
+ Given this scenario is tagged with the vcr cassette tag: "@regex_cassette"
69
+ And the "cucumber_tags/regex_cassette" library file has a response for /example\.com\/reg/ that matches /This is the response from the regex cassette/
70
+ When I make an HTTP get request to "http://example.com/regex1"
71
+ And I make an HTTP get request to "http://example.com/regex2"
72
+ And I make an HTTP get request to "http://example.com/something_else"
73
+ Then the response for "http://example.com/regex1" should match /This is the response from the regex cassette/
74
+ And the response for "http://example.com/regex2" should match /This is the response from the regex cassette/
75
+ And the HTTP get request to "http://example.com/something_else" should result in an error that mentions VCR
76
+
77
+ Scenario: Replay recorded erb response
78
+ Given the "erb_cassette" library file has a response for "http://example.com/embedded_ruby_code" that matches /Some embedded ruby code[\S\s]*The value of some_variable is/
79
+ When I make an HTTP get request to "http://example.com/embedded_ruby_code" within the "erb_cassette" cassette using cassette options: { :record => :none, :erb => { :some_variable => 'foo-bar' } }
80
+ Then the response for "http://example.com/embedded_ruby_code" should match /Some embedded ruby code: 7[\S\s]*The value of some_variable is: foo-bar/
81
+
82
+ @create_replay_localhost_cassette @spawns_localhost_server
83
+ Scenario: Replay recorded localhost response with ignore_localhost = false
84
+ Given the ignore_localhost config setting is set to false
85
+ And the "temp/replay_localhost_cassette" library file has a response for localhost that matches /This is a fake response/
86
+ And a rack app is running on localhost that returns "localhost response" for all requests
87
+ When I make an HTTP get request to the localhost rack app within the "temp/replay_localhost_cassette" cassette
88
+ Then the response for the localhost rack app should match /This is a fake response/
89
+
90
+ @create_replay_localhost_cassette @spawns_localhost_server
91
+ Scenario: Replay recorded localhost response with ignore_localhost = true
92
+ Given the ignore_localhost config setting is set to true
93
+ And the "temp/replay_localhost_cassette" library file has a response for localhost that matches /This is a fake response/
94
+ And a rack app is running on localhost that returns "localhost response" for all requests
95
+ When I make an HTTP get request to the localhost rack app within the "temp/replay_localhost_cassette" cassette
96
+ Then the response for the localhost rack app should match /localhost response/