site_prism.vcr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +12 -0
  5. data/Gemfile +17 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +381 -0
  8. data/Rakefile +1 -0
  9. data/TODO.md +71 -0
  10. data/lib/site_prism.vcr.rb +1 -0
  11. data/lib/site_prism_vcr/applier.rb +54 -0
  12. data/lib/site_prism_vcr/dsl/adjuster.rb +82 -0
  13. data/lib/site_prism_vcr/dsl/initial_adjuster.rb +97 -0
  14. data/lib/site_prism_vcr/element.rb +18 -0
  15. data/lib/site_prism_vcr/fixture.rb +29 -0
  16. data/lib/site_prism_vcr/fixtures/converter.rb +17 -0
  17. data/lib/site_prism_vcr/fixtures/handler.rb +31 -0
  18. data/lib/site_prism_vcr/fixtures/manager.rb +38 -0
  19. data/lib/site_prism_vcr/fixtures/modifiers/home_path.rb +27 -0
  20. data/lib/site_prism_vcr/fixtures/modifiers/path.rb +30 -0
  21. data/lib/site_prism_vcr/fixtures/tmp_keeper.rb +21 -0
  22. data/lib/site_prism_vcr/fixtures.rb +41 -0
  23. data/lib/site_prism_vcr/options.rb +22 -0
  24. data/lib/site_prism_vcr/options_with_path.rb +7 -0
  25. data/lib/site_prism_vcr/patches/element_container.rb +15 -0
  26. data/lib/site_prism_vcr/patches/page.rb +41 -0
  27. data/lib/site_prism_vcr/vcr_helpers.rb +18 -0
  28. data/lib/site_prism_vcr/version.rb +3 -0
  29. data/lib/site_prism_vcr/waiter.rb +23 -0
  30. data/lib/site_prism_vcr.rb +24 -0
  31. data/site_prism.vcr.gemspec +24 -0
  32. data/spec/fixtures/arya_stark.yml +44 -0
  33. data/spec/fixtures/custom/blank.yml +44 -0
  34. data/spec/fixtures/custom/bran_stark.yml +44 -0
  35. data/spec/fixtures/custom/daenerys_targaryen.yml +44 -0
  36. data/spec/fixtures/jon_snow.yml +44 -0
  37. data/spec/fixtures/ned_stark.yml +44 -0
  38. data/spec/fixtures/robb_stark.yml +44 -0
  39. data/spec/integration/http_interactions_on_even/click_spec.rb +75 -0
  40. data/spec/integration/immediate_http_interactions/page_load_on_click_spec.rb +18 -0
  41. data/spec/integration/immediate_http_interactions/page_load_spec.rb +56 -0
  42. data/spec/spec_helper.rb +18 -0
  43. data/spec/spec_integration_helper.rb +27 -0
  44. data/spec/support/shared/integration/custom_fixtures.rb +32 -0
  45. data/spec/support/shared/integration/exchange.rb +42 -0
  46. data/spec/support/shared/integration/home_path.rb +49 -0
  47. data/spec/support/shared/integration/waiter.rb +75 -0
  48. data/spec/support/site_prism/pages/base.rb +18 -0
  49. data/spec/support/site_prism/pages/home.rb +44 -0
  50. data/spec/support/site_prism/pages/immediate_http_interactions/home_path.rb +15 -0
  51. data/spec/support/site_prism/pages/immediate_http_interactions/one_request.rb +13 -0
  52. data/spec/support/site_prism/pages/immediate_http_interactions/subpage.rb +7 -0
  53. data/spec/support/site_prism/pages/immediate_http_interactions/two_requests.rb +12 -0
  54. data/spec/support/site_prism/pages/immediate_http_interactions/waiter_without_fixtures_ejection.rb +12 -0
  55. data/spec/support/site_prism/sections/console_block.rb +8 -0
  56. data/spec/support/test_app/public/jquery.min.js +5 -0
  57. data/spec/support/test_app/public/test.js +44 -0
  58. data/spec/support/test_app/test_app.rb +46 -0
  59. data/spec/support/test_app/views/index.erb +26 -0
  60. data/spec/unit/applier_spec.rb +134 -0
  61. data/spec/unit/dsl/adjuster_spec.rb +141 -0
  62. data/spec/unit/dsl/initial_adjuster_spec.rb +166 -0
  63. data/spec/unit/element_container_spec.rb +48 -0
  64. data/spec/unit/element_spec.rb +47 -0
  65. data/spec/unit/fixture_spec.rb +45 -0
  66. data/spec/unit/fixtures/converter_spec.rb +36 -0
  67. data/spec/unit/fixtures/handler_spec.rb +72 -0
  68. data/spec/unit/fixtures/manager_spec.rb +58 -0
  69. data/spec/unit/fixtures/modifiers/home_path_spec.rb +47 -0
  70. data/spec/unit/fixtures/modifiers/path_spec.rb +45 -0
  71. data/spec/unit/fixtures/tmp_keeper_spec.rb +17 -0
  72. data/spec/unit/fixtures_spec.rb +76 -0
  73. data/spec/unit/options_spec.rb +41 -0
  74. data/spec/unit/patches/element_container_spec.rb +48 -0
  75. data/spec/unit/patches/page_spec.rb +57 -0
  76. data/spec/unit/vcr_helpers_spec.rb +18 -0
  77. data/spec/unit/waiter_spec.rb +67 -0
  78. metadata +213 -0
@@ -0,0 +1,141 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::DSL::Adjuster do
4
+ let(:raw_fixtures) { 'some fixtures' }
5
+ let(:fixtures) { double }
6
+ let(:tmp_keeper) { double(fixtures: raw_fixtures, clean_fixtures: true) }
7
+ let(:options) { double(waiter: :wait_for_me) }
8
+
9
+ before do
10
+ SPV::Fixtures::TmpKeeper.stub(:new).and_return(tmp_keeper)
11
+ end
12
+
13
+ subject { described_class.new(options, fixtures) }
14
+
15
+ describe '#replace' do
16
+ let(:replaced_fixtures) { 'replaced fixtures' }
17
+
18
+ before do
19
+ fixtures.stub(:replace).and_return(replaced_fixtures)
20
+ end
21
+
22
+ it 'replaces fixtures' do
23
+ expect(fixtures).to receive(:replace).with(raw_fixtures)
24
+
25
+ subject.replace
26
+ end
27
+
28
+ it 'cleans fixtures being kept in the fixtures handler' do
29
+ expect(tmp_keeper).to receive(:clean_fixtures)
30
+
31
+ subject.replace
32
+ end
33
+
34
+ it 'returns a new container with fixtures' do
35
+ subject.replace
36
+
37
+ expect(subject.prepared_fixtures).to eq(replaced_fixtures)
38
+ end
39
+ end
40
+
41
+ describe '#union' do
42
+ let(:new_fixtures) { 'new fixtures' }
43
+
44
+ before do
45
+ fixtures.stub(:union).and_return(new_fixtures)
46
+ end
47
+
48
+ it 'replaces fixtures' do
49
+ expect(fixtures).to receive(:union).with(raw_fixtures)
50
+
51
+ subject.union
52
+ end
53
+
54
+ it 'cleans fixtures being kept in the fixtures handler' do
55
+ expect(tmp_keeper).to receive(:clean_fixtures)
56
+
57
+ subject.union
58
+ end
59
+
60
+ it 'returns a new container with fixtures' do
61
+ subject.union
62
+
63
+ expect(subject.prepared_fixtures).to eq(new_fixtures)
64
+ end
65
+ end
66
+
67
+ describe '#exchange' do
68
+ def exchange
69
+ subject.exchange(
70
+ raw_old_fixtures,
71
+ raw_new_fixtures
72
+ )
73
+ end
74
+
75
+ shared_examples 'when passed arguments are handled' do
76
+ it 'handles raw fixtures' do
77
+ expect(fixtures_handler).to receive(:handle_set_raws).with(
78
+ expected_raw_old_fixtures,
79
+ expected_raw_new_fixtures,
80
+ [home_path_modifier]
81
+ )
82
+
83
+ exchange
84
+ end
85
+ end
86
+
87
+ let(:fixtures) { double(exchange: true) }
88
+ let(:fixtures_handler) { double }
89
+ let(:home_path_modifier) { double(modify: true) }
90
+
91
+ let(:raw_old_fixtures) { ['old fixtures'] }
92
+ let(:raw_new_fixtures) { ['new fixtures'] }
93
+
94
+ let(:expected_raw_old_fixtures) { raw_old_fixtures }
95
+ let(:expected_raw_new_fixtures) { raw_new_fixtures }
96
+
97
+ let(:old_fixture) { double }
98
+ let(:new_fixture) { double }
99
+
100
+ let(:handled_old_fixtures) { [old_fixture] }
101
+ let(:handled_new_fixtures) { [new_fixture] }
102
+
103
+ before do
104
+ SPV::Fixtures::Handler.stub(:new).and_return(fixtures_handler)
105
+ SPV::Fixtures::Modifiers::HomePath.stub(:new).and_return(home_path_modifier)
106
+
107
+ fixtures_handler.stub(:handle_set_raws).and_return([
108
+ handled_old_fixtures,
109
+ handled_new_fixtures
110
+ ])
111
+ end
112
+
113
+ it 'initializes the home path modifier' do
114
+ expect(SPV::Fixtures::Modifiers::HomePath).to receive(:new).with(options)
115
+
116
+ exchange
117
+ end
118
+
119
+ context 'when no arrays are passed as arguments' do
120
+ let(:raw_old_fixtures) { {old_fixtures: 'hash with vcr options'} }
121
+ let(:raw_new_fixtures) { {new_fixtures: 'hash with vcr options'} }
122
+
123
+ let(:expected_raw_old_fixtures) { [raw_old_fixtures] }
124
+ let(:expected_raw_new_fixtures) { [raw_new_fixtures] }
125
+
126
+ it_behaves_like 'when passed arguments are handled'
127
+ end
128
+
129
+ context 'when arrays are passed as arguments' do
130
+ it_behaves_like 'when passed arguments are handled'
131
+ end
132
+
133
+ it 'exchanges fixtures' do
134
+ expect(fixtures).to receive(:exchange).with(
135
+ handled_old_fixtures, handled_new_fixtures
136
+ )
137
+
138
+ exchange
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::DSL::InitialAdjuster do
4
+ let(:options) { double }
5
+ let(:tmp_keeper) { double(add_fixtures: true) }
6
+ let(:handled_fixtures) { double }
7
+ let(:fixtures_handler) { double(handle_raw: handled_fixtures) }
8
+
9
+ subject { described_class.new(options) }
10
+
11
+ before do
12
+ SPV::Fixtures::TmpKeeper.stub(:new).and_return(tmp_keeper)
13
+ SPV::Fixtures::Handler.stub(:new).and_return(fixtures_handler)
14
+ end
15
+
16
+ describe '.new' do
17
+ it 'initializes the fixtures tmp keeper' do
18
+ expect(SPV::Fixtures::TmpKeeper).to receive(:new).with(options)
19
+
20
+ subject
21
+ end
22
+
23
+ it 'initializes the fixtures handler' do
24
+ expect(SPV::Fixtures::Handler).to receive(:new)
25
+
26
+ subject
27
+ end
28
+ end
29
+
30
+ describe '#fixtures' do
31
+ let(:raw_fixtures) { 'some fixtures' }
32
+ let(:home_path_modifier) { 'some home path modifier' }
33
+
34
+ before do
35
+ SPV::Fixtures::Modifiers::HomePath.stub(:new).and_return(home_path_modifier)
36
+ end
37
+
38
+ it 'initializes the home path modifier' do
39
+ expect(SPV::Fixtures::Modifiers::HomePath).to receive(:new).with(options)
40
+
41
+ subject.fixtures(raw_fixtures)
42
+ end
43
+
44
+ it 'handles raw fixtures' do
45
+ expect(fixtures_handler).to receive(:handle_raw).with(
46
+ raw_fixtures,
47
+ [home_path_modifier]
48
+ )
49
+
50
+ subject.fixtures(raw_fixtures)
51
+ end
52
+
53
+ it 'adds fixtures' do
54
+ expect(tmp_keeper).to receive(:add_fixtures).with(handled_fixtures)
55
+
56
+ subject.fixtures(raw_fixtures)
57
+ end
58
+ end
59
+
60
+ describe '#home_path' do
61
+ let(:raw_home_path) { 'some home path' }
62
+
63
+ it 'defines a default home path' do
64
+ expect(options).to receive(:home_path=).with(raw_home_path)
65
+
66
+ subject.home_path(raw_home_path)
67
+ end
68
+ end
69
+
70
+ describe '#path' do
71
+ def set_path
72
+ subject.path 'path', raw_fixtures
73
+ end
74
+
75
+ let(:raw_fixtures) { 'some raw fixtures' }
76
+ let(:options_with_path) { double('path=' => true) }
77
+
78
+ let(:path_modifier) { double }
79
+ let(:home_path_modifier) { double }
80
+
81
+ before do
82
+ SPV::OptionsWithPath.stub(:new).and_return(options_with_path)
83
+ SPV::Fixtures::Modifiers::Path.stub(:new).and_return(path_modifier)
84
+ SPV::Fixtures::Modifiers::HomePath.stub(:new).and_return(home_path_modifier)
85
+ end
86
+
87
+ it 'initializes a new object with options' do
88
+ expect(SPV::OptionsWithPath).to receive(:new).with(options)
89
+
90
+ set_path
91
+ end
92
+
93
+ it 'defines path to fixtures' do
94
+ expect(options_with_path).to receive(:path=).with('path')
95
+
96
+ set_path
97
+ end
98
+
99
+ it 'initializes the modifier to modify path' do
100
+ expect(
101
+ SPV::Fixtures::Modifiers::Path
102
+ ).to receive(:new).with(options_with_path)
103
+
104
+ set_path
105
+ end
106
+
107
+ it 'initializes the modifier to set home path' do
108
+ expect(
109
+ SPV::Fixtures::Modifiers::HomePath
110
+ ).to receive(:new).with(options_with_path)
111
+
112
+ set_path
113
+ end
114
+
115
+ it 'handles raw fixtures' do
116
+ expect(fixtures_handler).to receive(:handle_raw).with(
117
+ raw_fixtures,
118
+ [
119
+ path_modifier,
120
+ home_path_modifier
121
+ ]
122
+ )
123
+
124
+ set_path
125
+ end
126
+
127
+ it 'adds fixtures into tmp keeper' do
128
+ expect(tmp_keeper).to receive(:add_fixtures).with(handled_fixtures)
129
+
130
+ set_path
131
+ end
132
+ end
133
+
134
+ describe '#waiter' do
135
+ let(:options) { double('waiter='.to_sym => true, 'waiter_options='.to_sym => true) }
136
+
137
+ it 'defines a new waiter' do
138
+ expect(options).to receive(:waiter=).with(kind_of(Proc))
139
+
140
+ subject.waiter { 'some waiter here' }
141
+ end
142
+
143
+ it 'defines an options for a waiter' do
144
+ expect(options).to receive(:waiter_options=).with(eject_cassettes: false)
145
+
146
+ subject.waiter(eject_cassettes: false) { 'some waiter here' }
147
+ end
148
+ end
149
+
150
+ describe '#prepared_fixtures' do
151
+ let(:fixtures) { double }
152
+ let(:raw_fixtures) { 'some raw fixtures' }
153
+
154
+ before do
155
+ SPV::Fixtures.stub(:new).and_return(fixtures)
156
+
157
+ tmp_keeper.stub(:fixtures).and_return(raw_fixtures)
158
+ end
159
+
160
+ it 'initializes the fixtures handler' do
161
+ expect(SPV::Fixtures).to receive(:new).with(raw_fixtures).and_return(fixtures)
162
+
163
+ expect(subject.prepared_fixtures).to eq(fixtures)
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ class TestPageWithElement
4
+ extend SitePrism::ElementContainer
5
+
6
+ class << self
7
+ def element(*); end
8
+ end
9
+
10
+ def el_with_options
11
+ 'original element with options'
12
+ end
13
+
14
+ def test_el; end
15
+
16
+ element_with_vcr(:el_with_options, '#selector', fixtures: 'some fixtures') {}
17
+ end
18
+
19
+ describe SitePrism::ElementContainer do
20
+ describe '.element_with_vcr' do
21
+ it 'calls the original element method with given arguments' do
22
+ expect(TestPageWithElement).to receive(:element).with(
23
+ :test_el,
24
+ '#test_selector',
25
+ visible: false
26
+ )
27
+
28
+ TestPageWithElement.instance_eval do
29
+ element_with_vcr :test_el, '#test_selector', visible: false
30
+ end
31
+ end
32
+
33
+ context 'when a method for getting an element is called' do
34
+ let(:page) { TestPageWithElement.new }
35
+ let(:vcr_el) { 'vcr element' }
36
+
37
+ subject { page.el_with_options }
38
+
39
+ it 'initializes a new instance of an element with empty options' do
40
+ expect(SPV::Element).to receive(:new).with(
41
+ 'original element with options', page
42
+ ).and_return(vcr_el)
43
+
44
+ expect(subject).to eq(vcr_el)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::Element do
4
+ let(:node) { stub }
5
+ let(:parent) { double }
6
+ let(:applier) { double(apply: true) }
7
+
8
+ before do
9
+ SPV::Applier.stub(:new).and_return(applier)
10
+ end
11
+
12
+ describe '.new' do
13
+ it 'initializes the fixtures applier' do
14
+ expect(SPV::Applier).to receive(:new).with(
15
+ parent
16
+ )
17
+
18
+ b1 = proc { }
19
+
20
+ described_class.new(nil, parent)
21
+ end
22
+ end
23
+
24
+ describe '#click_and_apply_vcr' do
25
+ subject { described_class.new(nil, parent) }
26
+
27
+ before do
28
+ subject.stub(:click)
29
+ end
30
+
31
+ it 'applies custom fixtures' do
32
+ expect(applier).to receive(:apply).with(
33
+ kind_of(Proc)
34
+ )
35
+
36
+ subject.click_and_apply_vcr() {}
37
+ end
38
+
39
+ it 'clicks on an element' do
40
+ applier.stub(:apply).and_yield
41
+
42
+ expect(subject).to receive(:click)
43
+
44
+ subject.click_and_apply_vcr
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::Fixture do
4
+ describe '#add_path' do
5
+ subject { described_class.new('some name') }
6
+
7
+ it 'have added path to a name of fixture' do
8
+ subject.add_path('some path/')
9
+
10
+ expect(subject.name).to eq('some path/some name')
11
+ end
12
+ end
13
+
14
+ describe '#set_home_path' do
15
+ subject { described_class.new('~/fixture_name') }
16
+
17
+ it 'defines a new name with replaced home path symbol' do
18
+ subject.set_home_path('my_home_path/')
19
+
20
+ expect(subject.name).to eq('my_home_path/fixture_name')
21
+ end
22
+ end
23
+
24
+ describe '#has_link_to_home_path?' do
25
+ it 'returns true when a name of fixture starts with "~/"' do
26
+ expect(
27
+ described_class.new('~/some').has_link_to_home_path?
28
+ ).to be_true
29
+ end
30
+
31
+ it 'returns true when a name of fixture does not start with "~/"' do
32
+ expect(
33
+ described_class.new('some').has_link_to_home_path?
34
+ ).to be_false
35
+ end
36
+ end
37
+
38
+ describe '#clean_name' do
39
+ subject { described_class.new('~/fixture_name') }
40
+
41
+ it 'returns a name without a home path' do
42
+ expect(subject.clean_name).to eq('fixture_name')
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::Fixtures::Converter do
4
+ describe '.convert_raw' do
5
+ let(:first_fixture) { 'test_fixture' }
6
+ let(:second_fixture) { {fixture: 'fixture_name', options: 'vcr options'} }
7
+
8
+ subject {
9
+ described_class.convert_raw(
10
+ [first_fixture, second_fixture]
11
+ )
12
+ }
13
+
14
+ before do
15
+ SPV::Fixture.stub(:new).and_return('first prepared', 'second prepared')
16
+ end
17
+
18
+ it 'initializes first object of Fixture class' do
19
+ expect(SPV::Fixture).to receive(:new).with(first_fixture)
20
+
21
+ subject
22
+ end
23
+
24
+ it 'initializes second object of Fixture class' do
25
+ expect(SPV::Fixture).to receive(:new).with(
26
+ second_fixture[:fixture], second_fixture[:options]
27
+ )
28
+
29
+ subject
30
+ end
31
+
32
+ it 'returns a prepared list of fixtures' do
33
+ expect(subject).to eq(['first prepared', 'second prepared'])
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::Fixtures::Handler do
4
+ let(:options) { double }
5
+ let(:converted_fixtures) { [] }
6
+ let(:fixtures_converter) { SPV::Fixtures::Converter }
7
+
8
+ subject { described_class.new(options) }
9
+
10
+ before do
11
+ SPV::Fixtures::Converter.stub(:convert_raw).and_return(converted_fixtures)
12
+ end
13
+
14
+ describe '#handle_raw' do
15
+ def handle_raw
16
+ subject.handle_raw(raw_fixtures, [modifier])
17
+ end
18
+
19
+ let(:raw_fixtures) { 'some raw fixtures' }
20
+ let(:converted_fixture) { 'converted fixture' }
21
+ let(:converted_fixtures) { [converted_fixture] }
22
+ let(:modifier) { double(modify: true) }
23
+
24
+ it 'converts raw fixtures' do
25
+ expect(fixtures_converter).to receive(:convert_raw).with(raw_fixtures)
26
+
27
+ handle_raw
28
+ end
29
+
30
+ it 'modifies the converted fixtures' do
31
+ expect(modifier).to receive(:modify).with(converted_fixture)
32
+
33
+ handle_raw
34
+ end
35
+
36
+ it 'returns handled fixtures' do
37
+ expect(handle_raw).to eq(converted_fixtures)
38
+ end
39
+ end
40
+
41
+ describe '#handle_set_raws' do
42
+ def handle_set_raws
43
+ subject.handle_set_raws(raw_fixtures_1, raw_fixtures_2, modifiers)
44
+ end
45
+
46
+ let(:raw_fixtures_1) { 'raw fixtures #1' }
47
+ let(:raw_fixtures_2) { 'raw fixtures #2' }
48
+ let(:handled_fixtures_1) { 'handled fixtures #1' }
49
+ let(:handled_fixtures_2) { 'handled fixtures #2' }
50
+ let(:modifiers) { 'some modifiers' }
51
+
52
+ before do
53
+ subject.stub(:handle_raw).and_return(handled_fixtures_1, handled_fixtures_2)
54
+ end
55
+
56
+ it 'handles the first set of raw fixtures' do
57
+ expect(subject).to receive(:handle_raw).with(raw_fixtures_1, modifiers)
58
+
59
+ handle_set_raws
60
+ end
61
+
62
+ it 'handles the second set of raw fixtures' do
63
+ expect(subject).to receive(:handle_raw).with(raw_fixtures_2, modifiers)
64
+
65
+ handle_set_raws
66
+ end
67
+
68
+ it 'returns all handled fixtures' do
69
+ expect(handle_set_raws).to eq([handled_fixtures_1, handled_fixtures_2])
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::Fixtures::Manager do
4
+ let(:options) { double(fixtures: ['some fixture']) }
5
+
6
+ describe '#inject' do
7
+ let(:fixture1) { double(name: 'arya_stark', options: {erb: {testvar: true}}) }
8
+ let(:fixture2) { double(name: 'jon_snow', options: {}) }
9
+ let(:fixtures) { [fixture1, fixture2] }
10
+
11
+ subject(:manager) { described_class.new(options) }
12
+
13
+ context 'when there are fixtures' do
14
+ after do
15
+ VCR.eject_cassette
16
+ VCR.eject_cassette
17
+ end
18
+
19
+ it 'VCR holds the first fixture' do
20
+ manager.inject(fixtures)
21
+
22
+ VCR.eject_cassette
23
+ fixture = VCR.eject_cassette
24
+
25
+ expect(fixture.name).to eq('arya_stark')
26
+ expect(fixture.erb).to eq({testvar: true})
27
+ end
28
+
29
+ it 'VCR holds the second fixture' do
30
+ manager.inject(fixtures)
31
+
32
+ fixture = VCR.eject_cassette
33
+
34
+ expect(fixture.name).to eq('jon_snow')
35
+ expect(fixture.erb).to be_nil
36
+ end
37
+ end
38
+
39
+ context 'when there are not any fixtures' do
40
+ it 'raises an error about no fixtures' do
41
+ expect { manager.inject([]) }.to raise_error(
42
+ ArgumentError,
43
+ 'No fixtures were specified to insert them into VCR'
44
+ )
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '#eject' do
50
+ subject { described_class.new(options).eject }
51
+
52
+ it 'ejects all fixtures from VCR' do
53
+ expect(SPV::Helpers).to receive(:eject_all_cassettes)
54
+
55
+ subject
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe SPV::Fixtures::Modifiers::HomePath do
4
+ describe '#modify' do
5
+ let(:path) { 'some home path' }
6
+ let(:options) { double(home_path: path) }
7
+ let(:fixture) { double(name: 'test_with_home_path', :has_link_to_home_path? => true) }
8
+
9
+ subject { described_class.new(options).modify(fixture) }
10
+
11
+ context 'when a name of the fixture has a link to the home path' do
12
+ context 'when the home_path is defined' do
13
+ it 'writes a proper path to the fixture' do
14
+ expect(fixture).to receive(:set_home_path).with(path)
15
+
16
+ subject
17
+ end
18
+ end
19
+
20
+ context 'when the home_path is not defined' do
21
+ before do
22
+ options.stub(:home_path).and_return(nil)
23
+ end
24
+
25
+ it 'raises an argument error about wrong way of defining fixtures' do
26
+ msg = 'You are trying to use a home path for test_with_home_path fixture. ' \
27
+ 'Home path cannot be used since it is not defined, please refer to the documentation ' \
28
+ 'to make sure you define the home path properly.'
29
+
30
+ expect { subject }.to raise_error(
31
+ ArgumentError, msg
32
+ )
33
+ end
34
+ end
35
+ end
36
+
37
+ context 'when a name of the fixture has no link to the home path' do
38
+ let(:fixture) { double(:has_link_to_home_path? => false) }
39
+
40
+ it 'does not set any home path' do
41
+ expect(fixture).to_not receive(:set_home_path)
42
+
43
+ subject
44
+ end
45
+ end
46
+ end
47
+ end