vcr 2.0.0.beta2 → 2.0.0.rc1
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.
- data/.gitignore +1 -0
- data/.travis.yml +0 -2
- data/CHANGELOG.md +22 -1
- data/CONTRIBUTING.md +46 -0
- data/Gemfile +1 -9
- data/README.md +8 -2
- data/Rakefile +12 -1
- data/cucumber.yml +8 -9
- data/features/.nav +10 -4
- data/features/cassettes/format.feature +1 -1
- data/features/cassettes/no_cassette.feature +8 -11
- data/features/configuration/allow_http_connections_when_no_cassette.feature +4 -4
- data/features/configuration/filter_sensitive_data.feature +3 -0
- data/features/configuration/hook_into.feature +4 -8
- data/features/configuration/ignore_request.feature +191 -0
- data/features/getting_started.md +38 -21
- data/features/hooks/after_http_request.feature +44 -0
- data/features/hooks/around_http_request.feature +56 -0
- data/features/hooks/before_http_request.feature +44 -0
- data/features/hooks/before_playback.feature +181 -0
- data/features/hooks/before_record.feature +172 -0
- data/features/middleware/faraday.feature +7 -3
- data/features/record_modes/none.feature +2 -1
- data/features/record_modes/once.feature +2 -1
- data/features/request_matching/body.feature +2 -2
- data/features/request_matching/custom_matcher.feature +2 -2
- data/features/request_matching/headers.feature +2 -2
- data/features/request_matching/host.feature +2 -2
- data/features/request_matching/identical_request_sequence.feature +2 -2
- data/features/request_matching/method.feature +2 -2
- data/features/request_matching/path.feature +2 -2
- data/features/request_matching/playback_repeats.feature +2 -1
- data/features/request_matching/uri.feature +2 -2
- data/features/support/env.rb +21 -12
- data/features/test_frameworks/cucumber.feature +9 -4
- data/features/test_frameworks/{rspec.feature → rspec_macro.feature} +7 -7
- data/features/test_frameworks/rspec_metadata.feature +90 -0
- data/lib/vcr.rb +1 -1
- data/lib/vcr/cassette.rb +3 -3
- data/lib/vcr/cassette/http_interaction_list.rb +13 -9
- data/lib/vcr/cassette/migrator.rb +1 -1
- data/lib/vcr/configuration.rb +37 -0
- data/lib/vcr/errors.rb +172 -6
- data/lib/vcr/library_hooks.rb +4 -6
- data/lib/vcr/library_hooks/excon.rb +23 -11
- data/lib/vcr/library_hooks/fakeweb.rb +85 -24
- data/lib/vcr/library_hooks/faraday.rb +30 -2
- data/lib/vcr/library_hooks/typhoeus.rb +25 -3
- data/lib/vcr/library_hooks/webmock.rb +25 -36
- data/lib/vcr/middleware/faraday.rb +23 -5
- data/lib/vcr/request_handler.rb +12 -1
- data/lib/vcr/request_ignorer.rb +12 -1
- data/lib/vcr/request_matcher_registry.rb +1 -9
- data/lib/vcr/structs.rb +32 -2
- data/lib/vcr/test_frameworks/rspec.rb +28 -0
- data/lib/vcr/util/hooks.rb +12 -4
- data/lib/vcr/util/version_checker.rb +2 -0
- data/lib/vcr/version.rb +1 -1
- data/spec/fixtures/cassette_spec/example.yml +1 -1
- data/spec/fixtures/{fake_example.com_responses.yml → fake_example_responses.yml} +0 -0
- data/spec/monkey_patches.rb +1 -1
- data/spec/spec_helper.rb +3 -1
- data/spec/support/http_library_adapters.rb +4 -3
- data/spec/support/shared_example_groups/hook_into_http_library.rb +194 -12
- data/spec/support/shared_example_groups/request_hooks.rb +58 -0
- data/spec/support/shared_example_groups/version_checking.rb +5 -0
- data/spec/support/sinatra_app.rb +17 -9
- data/spec/support/vcr_stub_helpers.rb +17 -0
- data/spec/vcr/cassette/http_interaction_list_spec.rb +28 -29
- data/spec/vcr/cassette/migrator_spec.rb +6 -7
- data/spec/vcr/cassette_spec.rb +5 -5
- data/spec/vcr/configuration_spec.rb +51 -32
- data/spec/vcr/deprecations_spec.rb +0 -8
- data/spec/vcr/errors_spec.rb +129 -0
- data/spec/vcr/library_hooks/excon_spec.rb +21 -4
- data/spec/vcr/library_hooks/fakeweb_spec.rb +71 -3
- data/spec/vcr/library_hooks/faraday_spec.rb +45 -0
- data/spec/vcr/library_hooks/typhoeus_spec.rb +31 -1
- data/spec/vcr/library_hooks/webmock_spec.rb +26 -3
- data/spec/vcr/middleware/faraday_spec.rb +84 -1
- data/spec/vcr/request_ignorer_spec.rb +16 -0
- data/spec/vcr/request_matcher_registry_spec.rb +0 -26
- data/spec/vcr/structs_spec.rb +61 -1
- data/spec/vcr/test_frameworks/rspec_spec.rb +32 -0
- data/spec/vcr/util/hooks_spec.rb +73 -63
- data/spec/vcr_spec.rb +2 -2
- data/vcr.gemspec +5 -5
- metadata +51 -31
- data/features/configuration/hooks.feature +0 -270
- data/features/configuration/ignore_hosts.feature +0 -61
- data/features/configuration/ignore_localhost.feature +0 -97
data/spec/vcr_spec.rb
CHANGED
@@ -94,7 +94,7 @@ describe VCR do
|
|
94
94
|
|
95
95
|
it 'returns a null list when there is no current cassette' do
|
96
96
|
VCR.current_cassette.should be_nil
|
97
|
-
VCR.http_interactions.should
|
97
|
+
VCR.http_interactions.should be(VCR::Cassette::HTTPInteractionList::NullList)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -157,7 +157,7 @@ describe VCR do
|
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
|
-
describe '.
|
160
|
+
describe '.cassette_serializers' do
|
161
161
|
it 'always returns the same memoized cassette serializers instance' do
|
162
162
|
VCR.cassette_serializers.should be_a(VCR::Cassette::Serializers)
|
163
163
|
VCR.cassette_serializers.should be(VCR.cassette_serializers)
|
data/vcr.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.version = VCR.version
|
16
16
|
s.platform = Gem::Platform::RUBY
|
17
|
-
s.required_ruby_version = '>= 1.8.
|
17
|
+
s.required_ruby_version = '>= 1.8.7'
|
18
18
|
s.required_rubygems_version = '>= 1.3.5'
|
19
19
|
|
20
20
|
{
|
@@ -24,16 +24,16 @@ Gem::Specification.new do |s|
|
|
24
24
|
'cucumber' => '~> 1.0.3',
|
25
25
|
'aruba' => '~> 0.4.6',
|
26
26
|
|
27
|
-
'rspec' => '~> 2.
|
27
|
+
'rspec' => '~> 2.8.0.rc1',
|
28
28
|
'shoulda' => '~> 2.9.2',
|
29
29
|
|
30
30
|
'fakeweb' => '~> 1.3.0',
|
31
|
-
'webmock' => '~> 1.7.
|
31
|
+
'webmock' => '~> 1.7.8',
|
32
32
|
'addressable' => '~> 2.2.6',
|
33
33
|
|
34
34
|
'faraday' => '~> 0.7.2',
|
35
35
|
'httpclient' => '~> 2.1.5.2',
|
36
|
-
'excon' => '~> 0.
|
36
|
+
'excon' => '~> 0.7.9',
|
37
37
|
|
38
38
|
'timecop' => '~> 0.3.5',
|
39
39
|
'rack' => '1.1.0',
|
@@ -48,7 +48,7 @@ Gem::Specification.new do |s|
|
|
48
48
|
'patron' => '~> 0.4.15',
|
49
49
|
'em-http-request' => '~> 0.3.0',
|
50
50
|
'curb' => '0.7.15',
|
51
|
-
'typhoeus' => '~> 0.3.
|
51
|
+
'typhoeus' => '~> 0.3.3'
|
52
52
|
}.each do |lib, version|
|
53
53
|
s.add_development_dependency lib, version
|
54
54
|
end unless RUBY_PLATFORM == 'java'
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vcr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15424087
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
-
|
12
|
-
version: 2.0.0.
|
10
|
+
- rc
|
11
|
+
- 1
|
12
|
+
version: 2.0.0.rc1
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Myron Marston
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-
|
20
|
+
date: 2011-12-09 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -138,11 +138,14 @@ dependencies:
|
|
138
138
|
requirements:
|
139
139
|
- - ~>
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
hash:
|
141
|
+
hash: 15424215
|
142
142
|
segments:
|
143
143
|
- 2
|
144
|
-
-
|
145
|
-
|
144
|
+
- 8
|
145
|
+
- 0
|
146
|
+
- rc
|
147
|
+
- 1
|
148
|
+
version: 2.8.0.rc1
|
146
149
|
name: rspec
|
147
150
|
type: :development
|
148
151
|
prerelease: false
|
@@ -233,12 +236,12 @@ dependencies:
|
|
233
236
|
requirements:
|
234
237
|
- - ~>
|
235
238
|
- !ruby/object:Gem::Version
|
236
|
-
hash:
|
239
|
+
hash: 17
|
237
240
|
segments:
|
238
241
|
- 0
|
239
|
-
-
|
240
|
-
-
|
241
|
-
version: 0.
|
242
|
+
- 7
|
243
|
+
- 9
|
244
|
+
version: 0.7.9
|
242
245
|
name: excon
|
243
246
|
type: :development
|
244
247
|
prerelease: false
|
@@ -265,12 +268,12 @@ dependencies:
|
|
265
268
|
requirements:
|
266
269
|
- - ~>
|
267
270
|
- !ruby/object:Gem::Version
|
268
|
-
hash:
|
271
|
+
hash: 27
|
269
272
|
segments:
|
270
273
|
- 1
|
271
274
|
- 7
|
272
|
-
-
|
273
|
-
version: 1.7.
|
275
|
+
- 8
|
276
|
+
version: 1.7.8
|
274
277
|
name: webmock
|
275
278
|
type: :development
|
276
279
|
prerelease: false
|
@@ -329,12 +332,12 @@ dependencies:
|
|
329
332
|
requirements:
|
330
333
|
- - ~>
|
331
334
|
- !ruby/object:Gem::Version
|
332
|
-
hash:
|
335
|
+
hash: 21
|
333
336
|
segments:
|
334
337
|
- 0
|
335
338
|
- 3
|
336
|
-
-
|
337
|
-
version: 0.3.
|
339
|
+
- 3
|
340
|
+
version: 0.3.3
|
338
341
|
name: typhoeus
|
339
342
|
type: :development
|
340
343
|
prerelease: false
|
@@ -355,6 +358,7 @@ files:
|
|
355
358
|
- .rspec
|
356
359
|
- .travis.yml
|
357
360
|
- CHANGELOG.md
|
361
|
+
- CONTRIBUTING.md
|
358
362
|
- Gemfile
|
359
363
|
- Guardfile
|
360
364
|
- LICENSE
|
@@ -377,10 +381,13 @@ files:
|
|
377
381
|
- features/configuration/default_cassette_options.feature
|
378
382
|
- features/configuration/filter_sensitive_data.feature
|
379
383
|
- features/configuration/hook_into.feature
|
380
|
-
- features/configuration/
|
381
|
-
- features/configuration/ignore_hosts.feature
|
382
|
-
- features/configuration/ignore_localhost.feature
|
384
|
+
- features/configuration/ignore_request.feature
|
383
385
|
- features/getting_started.md
|
386
|
+
- features/hooks/after_http_request.feature
|
387
|
+
- features/hooks/around_http_request.feature
|
388
|
+
- features/hooks/before_http_request.feature
|
389
|
+
- features/hooks/before_playback.feature
|
390
|
+
- features/hooks/before_record.feature
|
384
391
|
- features/http_libraries/em_http_request.feature
|
385
392
|
- features/http_libraries/net_http.feature
|
386
393
|
- features/middleware/faraday.feature
|
@@ -405,7 +412,8 @@ files:
|
|
405
412
|
- features/support/http_lib_filters.rb
|
406
413
|
- features/support/vcr_cucumber_helpers.rb
|
407
414
|
- features/test_frameworks/cucumber.feature
|
408
|
-
- features/test_frameworks/
|
415
|
+
- features/test_frameworks/rspec_macro.feature
|
416
|
+
- features/test_frameworks/rspec_metadata.feature
|
409
417
|
- features/test_frameworks/shoulda.feature
|
410
418
|
- features/test_frameworks/test_unit.feature
|
411
419
|
- lib/vcr.rb
|
@@ -450,7 +458,7 @@ files:
|
|
450
458
|
- spec/fixtures/cassette_spec/empty.yml
|
451
459
|
- spec/fixtures/cassette_spec/example.yml
|
452
460
|
- spec/fixtures/cassette_spec/with_localhost_requests.yml
|
453
|
-
- spec/fixtures/
|
461
|
+
- spec/fixtures/fake_example_responses.yml
|
454
462
|
- spec/fixtures/match_requests_on.yml
|
455
463
|
- spec/monkey_patches.rb
|
456
464
|
- spec/spec_helper.rb
|
@@ -458,9 +466,11 @@ files:
|
|
458
466
|
- spec/support/http_library_adapters.rb
|
459
467
|
- spec/support/ruby_interpreter.rb
|
460
468
|
- spec/support/shared_example_groups/hook_into_http_library.rb
|
469
|
+
- spec/support/shared_example_groups/request_hooks.rb
|
461
470
|
- spec/support/shared_example_groups/version_checking.rb
|
462
471
|
- spec/support/sinatra_app.rb
|
463
472
|
- spec/support/vcr_localhost_server.rb
|
473
|
+
- spec/support/vcr_stub_helpers.rb
|
464
474
|
- spec/vcr/cassette/http_interaction_list_spec.rb
|
465
475
|
- spec/vcr/cassette/migrator_spec.rb
|
466
476
|
- spec/vcr/cassette/reader_spec.rb
|
@@ -468,9 +478,11 @@ files:
|
|
468
478
|
- spec/vcr/cassette_spec.rb
|
469
479
|
- spec/vcr/configuration_spec.rb
|
470
480
|
- spec/vcr/deprecations_spec.rb
|
481
|
+
- spec/vcr/errors_spec.rb
|
471
482
|
- spec/vcr/extensions/net_http_response_spec.rb
|
472
483
|
- spec/vcr/library_hooks/excon_spec.rb
|
473
484
|
- spec/vcr/library_hooks/fakeweb_spec.rb
|
485
|
+
- spec/vcr/library_hooks/faraday_spec.rb
|
474
486
|
- spec/vcr/library_hooks/typhoeus_spec.rb
|
475
487
|
- spec/vcr/library_hooks/webmock_spec.rb
|
476
488
|
- spec/vcr/library_hooks_spec.rb
|
@@ -499,12 +511,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
499
511
|
requirements:
|
500
512
|
- - ">="
|
501
513
|
- !ruby/object:Gem::Version
|
502
|
-
hash:
|
514
|
+
hash: 57
|
503
515
|
segments:
|
504
516
|
- 1
|
505
517
|
- 8
|
506
|
-
-
|
507
|
-
version: 1.8.
|
518
|
+
- 7
|
519
|
+
version: 1.8.7
|
508
520
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
509
521
|
none: false
|
510
522
|
requirements:
|
@@ -537,10 +549,13 @@ test_files:
|
|
537
549
|
- features/configuration/default_cassette_options.feature
|
538
550
|
- features/configuration/filter_sensitive_data.feature
|
539
551
|
- features/configuration/hook_into.feature
|
540
|
-
- features/configuration/
|
541
|
-
- features/configuration/ignore_hosts.feature
|
542
|
-
- features/configuration/ignore_localhost.feature
|
552
|
+
- features/configuration/ignore_request.feature
|
543
553
|
- features/getting_started.md
|
554
|
+
- features/hooks/after_http_request.feature
|
555
|
+
- features/hooks/around_http_request.feature
|
556
|
+
- features/hooks/before_http_request.feature
|
557
|
+
- features/hooks/before_playback.feature
|
558
|
+
- features/hooks/before_record.feature
|
544
559
|
- features/http_libraries/em_http_request.feature
|
545
560
|
- features/http_libraries/net_http.feature
|
546
561
|
- features/middleware/faraday.feature
|
@@ -565,7 +580,8 @@ test_files:
|
|
565
580
|
- features/support/http_lib_filters.rb
|
566
581
|
- features/support/vcr_cucumber_helpers.rb
|
567
582
|
- features/test_frameworks/cucumber.feature
|
568
|
-
- features/test_frameworks/
|
583
|
+
- features/test_frameworks/rspec_macro.feature
|
584
|
+
- features/test_frameworks/rspec_metadata.feature
|
569
585
|
- features/test_frameworks/shoulda.feature
|
570
586
|
- features/test_frameworks/test_unit.feature
|
571
587
|
- spec/capture_warnings.rb
|
@@ -573,7 +589,7 @@ test_files:
|
|
573
589
|
- spec/fixtures/cassette_spec/empty.yml
|
574
590
|
- spec/fixtures/cassette_spec/example.yml
|
575
591
|
- spec/fixtures/cassette_spec/with_localhost_requests.yml
|
576
|
-
- spec/fixtures/
|
592
|
+
- spec/fixtures/fake_example_responses.yml
|
577
593
|
- spec/fixtures/match_requests_on.yml
|
578
594
|
- spec/monkey_patches.rb
|
579
595
|
- spec/spec_helper.rb
|
@@ -581,9 +597,11 @@ test_files:
|
|
581
597
|
- spec/support/http_library_adapters.rb
|
582
598
|
- spec/support/ruby_interpreter.rb
|
583
599
|
- spec/support/shared_example_groups/hook_into_http_library.rb
|
600
|
+
- spec/support/shared_example_groups/request_hooks.rb
|
584
601
|
- spec/support/shared_example_groups/version_checking.rb
|
585
602
|
- spec/support/sinatra_app.rb
|
586
603
|
- spec/support/vcr_localhost_server.rb
|
604
|
+
- spec/support/vcr_stub_helpers.rb
|
587
605
|
- spec/vcr/cassette/http_interaction_list_spec.rb
|
588
606
|
- spec/vcr/cassette/migrator_spec.rb
|
589
607
|
- spec/vcr/cassette/reader_spec.rb
|
@@ -591,9 +609,11 @@ test_files:
|
|
591
609
|
- spec/vcr/cassette_spec.rb
|
592
610
|
- spec/vcr/configuration_spec.rb
|
593
611
|
- spec/vcr/deprecations_spec.rb
|
612
|
+
- spec/vcr/errors_spec.rb
|
594
613
|
- spec/vcr/extensions/net_http_response_spec.rb
|
595
614
|
- spec/vcr/library_hooks/excon_spec.rb
|
596
615
|
- spec/vcr/library_hooks/fakeweb_spec.rb
|
616
|
+
- spec/vcr/library_hooks/faraday_spec.rb
|
597
617
|
- spec/vcr/library_hooks/typhoeus_spec.rb
|
598
618
|
- spec/vcr/library_hooks/webmock_spec.rb
|
599
619
|
- spec/vcr/library_hooks_spec.rb
|
@@ -1,270 +0,0 @@
|
|
1
|
-
Feature: Hooks
|
2
|
-
|
3
|
-
VCR provides two global hooks that you can use to customize recording and
|
4
|
-
playback:
|
5
|
-
|
6
|
-
- `before_record`: Called before a cassette is written to disk.
|
7
|
-
- `before_playback`: Called before a cassette sets up its stubs for playback.
|
8
|
-
|
9
|
-
To use these, call `config.before_record` or `config.before_playback` in
|
10
|
-
your `VCR.configure` block. Provide a block that accepts 0, 1 or 2 arguments.
|
11
|
-
|
12
|
-
The first argument, if the block accepts it, will be an HTTP interaction.
|
13
|
-
Changes you make to the interaction will be reflected in the recording or
|
14
|
-
playback. You can also call `#ignore!` on the interaction to cause VCR to
|
15
|
-
ignore it. It will not be recorded or played back (depending on which
|
16
|
-
kind of hook you use).
|
17
|
-
|
18
|
-
The second argument, if the block accepts it, will be the
|
19
|
-
`VCR::Cassette` instance. This may be useful for hooks that you want to
|
20
|
-
behave differently for different cassettes.
|
21
|
-
|
22
|
-
You can also use tagging to apply hooks to particular cassettes. Consider
|
23
|
-
this code:
|
24
|
-
|
25
|
-
VCR.configure do |c|
|
26
|
-
c.before_record(:twitter) { ... } # modify the interactions somehow
|
27
|
-
end
|
28
|
-
|
29
|
-
VCR.use_cassette('cassette_1', :tag => :twitter) { ... }
|
30
|
-
VCR.use_cassette('cassette_2') { ... }
|
31
|
-
|
32
|
-
In this example, the hook would apply to the first cassette but not the
|
33
|
-
second cassette.
|
34
|
-
|
35
|
-
You can setup as many hooks as you like; each will be invoked at the
|
36
|
-
appropriate time.
|
37
|
-
|
38
|
-
Background:
|
39
|
-
Given a previously recorded cassette file "cassettes/example.yml" with:
|
40
|
-
"""
|
41
|
-
---
|
42
|
-
http_interactions:
|
43
|
-
- request:
|
44
|
-
method: get
|
45
|
-
uri: http://example.com/foo
|
46
|
-
body: ''
|
47
|
-
headers: {}
|
48
|
-
response:
|
49
|
-
status:
|
50
|
-
code: 200
|
51
|
-
message: OK
|
52
|
-
headers:
|
53
|
-
Content-Type:
|
54
|
-
- text/html;charset=utf-8
|
55
|
-
Content-Length:
|
56
|
-
- '20'
|
57
|
-
body: example.com response
|
58
|
-
http_version: '1.1'
|
59
|
-
recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
|
60
|
-
recorded_with: VCR 2.0.0
|
61
|
-
"""
|
62
|
-
|
63
|
-
Scenario: Replace sensitive data with before_record hook
|
64
|
-
Given a file named "before_record_example.rb" with:
|
65
|
-
"""ruby
|
66
|
-
start_sinatra_app(:port => 7777) do
|
67
|
-
get('/') { "Hello <secret>" }
|
68
|
-
end
|
69
|
-
|
70
|
-
require 'vcr'
|
71
|
-
|
72
|
-
VCR.configure do |c|
|
73
|
-
c.hook_into :fakeweb
|
74
|
-
c.cassette_library_dir = 'cassettes'
|
75
|
-
|
76
|
-
c.before_record do |i|
|
77
|
-
i.response.body.sub!(/^Hello .*$/, 'Hello World')
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
VCR.use_cassette('recording_example') do
|
83
|
-
Net::HTTP.get_response('localhost', '/', 7777)
|
84
|
-
end
|
85
|
-
"""
|
86
|
-
When I run `ruby before_record_example.rb`
|
87
|
-
Then the file "cassettes/recording_example.yml" should contain "body: Hello World"
|
88
|
-
And the file "cassettes/recording_example.yml" should not contain "secret"
|
89
|
-
|
90
|
-
Scenario: Prevent recording by ignoring interaction in before_record hook
|
91
|
-
Given a file named "before_record_ignore.rb" with:
|
92
|
-
"""ruby
|
93
|
-
start_sinatra_app(:port => 7777) do
|
94
|
-
get('/') { "Hello World" }
|
95
|
-
end
|
96
|
-
|
97
|
-
require 'vcr'
|
98
|
-
|
99
|
-
VCR.configure do |c|
|
100
|
-
c.hook_into :fakeweb
|
101
|
-
c.cassette_library_dir = 'cassettes'
|
102
|
-
c.before_record { |i| i.ignore! }
|
103
|
-
end
|
104
|
-
|
105
|
-
VCR.use_cassette('recording_example') do
|
106
|
-
response = Net::HTTP.get_response('localhost', '/', 7777)
|
107
|
-
puts "Response: #{response.body}"
|
108
|
-
end
|
109
|
-
"""
|
110
|
-
When I run `ruby before_record_ignore.rb`
|
111
|
-
Then it should pass with "Response: Hello World"
|
112
|
-
And the file "cassettes/recording_example.yml" should not exist
|
113
|
-
|
114
|
-
Scenario: Change playback with before_playback hook
|
115
|
-
Given a file named "before_playback_example.rb" with:
|
116
|
-
"""ruby
|
117
|
-
require 'vcr'
|
118
|
-
|
119
|
-
VCR.configure do |c|
|
120
|
-
c.hook_into :fakeweb
|
121
|
-
c.cassette_library_dir = 'cassettes'
|
122
|
-
|
123
|
-
c.before_playback do |i|
|
124
|
-
i.response.body = 'response from before_playback'
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
VCR.use_cassette('example') do
|
129
|
-
response = Net::HTTP.get_response('example.com', '/foo')
|
130
|
-
puts "Response: #{response.body}"
|
131
|
-
end
|
132
|
-
"""
|
133
|
-
When I run `ruby before_playback_example.rb`
|
134
|
-
Then it should pass with "Response: response from before_playback"
|
135
|
-
|
136
|
-
Scenario: Prevent playback by ignoring interaction in before_playback hook
|
137
|
-
Given a previously recorded cassette file "cassettes/localhost.yml" with:
|
138
|
-
"""
|
139
|
-
---
|
140
|
-
http_interactions:
|
141
|
-
- request:
|
142
|
-
method: get
|
143
|
-
uri: http://localhost:7777/
|
144
|
-
body: ''
|
145
|
-
headers: {}
|
146
|
-
response:
|
147
|
-
status:
|
148
|
-
code: 200
|
149
|
-
message: OK
|
150
|
-
headers:
|
151
|
-
Content-Type:
|
152
|
-
- text/html;charset=utf-8
|
153
|
-
Content-Length:
|
154
|
-
- '20'
|
155
|
-
body: recorded response
|
156
|
-
http_version: '1.1'
|
157
|
-
recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
|
158
|
-
recorded_with: VCR 2.0.0
|
159
|
-
"""
|
160
|
-
And a file named "before_playback_ignore.rb" with:
|
161
|
-
"""ruby
|
162
|
-
start_sinatra_app(:port => 7777) do
|
163
|
-
get('/') { "sinatra response" }
|
164
|
-
end
|
165
|
-
|
166
|
-
require 'vcr'
|
167
|
-
|
168
|
-
VCR.configure do |c|
|
169
|
-
c.hook_into :fakeweb
|
170
|
-
c.cassette_library_dir = 'cassettes'
|
171
|
-
c.before_playback { |i| i.ignore! }
|
172
|
-
end
|
173
|
-
|
174
|
-
VCR.use_cassette('localhost', :record => :new_episodes) do
|
175
|
-
response = Net::HTTP.get_response('localhost', '/', 7777)
|
176
|
-
puts "Response: #{response.body}"
|
177
|
-
end
|
178
|
-
"""
|
179
|
-
When I run `ruby before_playback_ignore.rb`
|
180
|
-
Then it should pass with "Response: sinatra response"
|
181
|
-
|
182
|
-
Scenario: Multiple hooks are run in order
|
183
|
-
Given a file named "multiple_hooks.rb" with:
|
184
|
-
"""ruby
|
185
|
-
start_sinatra_app(:port => 7777) do
|
186
|
-
get('/') { "Hello World" }
|
187
|
-
end
|
188
|
-
|
189
|
-
require 'vcr'
|
190
|
-
|
191
|
-
VCR.configure do |c|
|
192
|
-
c.hook_into :fakeweb
|
193
|
-
c.cassette_library_dir = 'cassettes'
|
194
|
-
|
195
|
-
c.before_record { puts "In before_record hook 1" }
|
196
|
-
c.before_record { puts "In before_record hook 2" }
|
197
|
-
|
198
|
-
c.before_playback { puts "In before_playback hook 1" }
|
199
|
-
c.before_playback { puts "In before_playback hook 2" }
|
200
|
-
end
|
201
|
-
|
202
|
-
VCR.use_cassette('example', :record => :new_episodes) do
|
203
|
-
response = Net::HTTP.get_response('localhost', '/', 7777)
|
204
|
-
puts "Response 1: #{response.body}"
|
205
|
-
|
206
|
-
response = Net::HTTP.get_response('example.com', '/foo')
|
207
|
-
puts "Response 2: #{response.body}"
|
208
|
-
end
|
209
|
-
"""
|
210
|
-
When I run `ruby multiple_hooks.rb`
|
211
|
-
Then it should pass with:
|
212
|
-
"""
|
213
|
-
In before_playback hook 1
|
214
|
-
In before_playback hook 2
|
215
|
-
Response 1: Hello World
|
216
|
-
Response 2: example.com response
|
217
|
-
In before_record hook 1
|
218
|
-
In before_record hook 2
|
219
|
-
"""
|
220
|
-
|
221
|
-
Scenario: Use tagging to apply hooks to only certain cassettes
|
222
|
-
Given a file named "tagged_hooks.rb" with:
|
223
|
-
"""ruby
|
224
|
-
start_sinatra_app(:port => 7777) do
|
225
|
-
get('/') { "Hello World" }
|
226
|
-
end
|
227
|
-
|
228
|
-
require 'vcr'
|
229
|
-
|
230
|
-
VCR.configure do |c|
|
231
|
-
c.hook_into :fakeweb
|
232
|
-
c.cassette_library_dir = 'cassettes'
|
233
|
-
|
234
|
-
c.before_record(:tag_1) { |i| puts "In before_record hook for tag_1 (#{i.response.body})" }
|
235
|
-
c.before_playback(:tag_2) { |i| puts "In before_playback hook for tag_2 (#{i.response.body})" }
|
236
|
-
end
|
237
|
-
|
238
|
-
[:tag_1, :tag_2, nil].each do |tag|
|
239
|
-
puts
|
240
|
-
puts "Using tag: #{tag.inspect}"
|
241
|
-
|
242
|
-
VCR.use_cassette('example', :record => :new_episodes, :tag => tag) do
|
243
|
-
response = Net::HTTP.get_response('localhost', '/', 7777)
|
244
|
-
puts "Response 1: #{response.body}"
|
245
|
-
|
246
|
-
response = Net::HTTP.get_response('example.com', '/foo')
|
247
|
-
puts "Response 2: #{response.body}"
|
248
|
-
end
|
249
|
-
end
|
250
|
-
"""
|
251
|
-
When I run `ruby tagged_hooks.rb`
|
252
|
-
Then it should pass with:
|
253
|
-
"""
|
254
|
-
Using tag: :tag_1
|
255
|
-
Response 1: Hello World
|
256
|
-
Response 2: example.com response
|
257
|
-
In before_record hook for tag_1 (example.com response)
|
258
|
-
In before_record hook for tag_1 (Hello World)
|
259
|
-
|
260
|
-
Using tag: :tag_2
|
261
|
-
In before_playback hook for tag_2 (example.com response)
|
262
|
-
In before_playback hook for tag_2 (Hello World)
|
263
|
-
Response 1: Hello World
|
264
|
-
Response 2: example.com response
|
265
|
-
|
266
|
-
Using tag: nil
|
267
|
-
Response 1: Hello World
|
268
|
-
Response 2: example.com response
|
269
|
-
"""
|
270
|
-
|