vcr 2.0.0.beta2 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|