defmastership 1.0.5 → 1.0.10

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/bin/defmastership +33 -22
  4. data/cucumber.yml +1 -1
  5. data/defmastership.gemspec +12 -6
  6. data/features/changeref.feature +82 -129
  7. data/features/definition_checksum.feature +298 -0
  8. data/features/definition_version.feature +204 -0
  9. data/features/export.feature +35 -34
  10. data/features/modify.feature +165 -0
  11. data/features/rename_included_files.feature +121 -0
  12. data/lib/defmastership.rb +17 -3
  13. data/lib/defmastership/batch_modifier.rb +35 -0
  14. data/lib/defmastership/{ref_changer.rb → change_ref_line_modifier.rb} +18 -35
  15. data/lib/defmastership/change_ref_modifier.rb +15 -0
  16. data/lib/defmastership/constants.rb +14 -1
  17. data/lib/defmastership/csv_formatter.rb +22 -17
  18. data/lib/defmastership/csv_formatter_body.rb +19 -11
  19. data/lib/defmastership/csv_formatter_header.rb +15 -10
  20. data/lib/defmastership/definition.rb +14 -3
  21. data/lib/defmastership/definition_parser.rb +46 -0
  22. data/lib/defmastership/document.rb +59 -85
  23. data/lib/defmastership/filters.rb +30 -0
  24. data/lib/defmastership/line_modifier_base.rb +29 -0
  25. data/lib/defmastership/modifier_base.rb +29 -0
  26. data/lib/defmastership/rename_included_files_line_modifier.rb +126 -0
  27. data/lib/defmastership/rename_included_files_modifier.rb +15 -0
  28. data/lib/defmastership/update_def_checksum_line_modifier.rb +38 -0
  29. data/lib/defmastership/update_def_checksum_modifier.rb +21 -0
  30. data/lib/defmastership/update_def_version_line_modifier.rb +58 -0
  31. data/lib/defmastership/update_def_version_modifier.rb +25 -0
  32. data/lib/defmastership/version.rb +1 -1
  33. data/spec/spec_helper.rb +1 -0
  34. data/spec/unit/defmastership/batch_modifier_spec.rb +123 -0
  35. data/spec/unit/defmastership/{ref_changer_spec.rb → change_ref_line_modifier_spec.rb} +48 -26
  36. data/spec/unit/defmastership/change_ref_modifier_spec.rb +76 -0
  37. data/spec/unit/defmastership/comment_filter_spec.rb +8 -4
  38. data/spec/unit/defmastership/csv_formatter_body_spec.rb +88 -82
  39. data/spec/unit/defmastership/csv_formatter_header_spec.rb +68 -22
  40. data/spec/unit/defmastership/csv_formatter_spec.rb +207 -109
  41. data/spec/unit/defmastership/definition_parser_spec.rb +63 -0
  42. data/spec/unit/defmastership/definition_spec.rb +45 -4
  43. data/spec/unit/defmastership/document_spec.rb +236 -35
  44. data/spec/unit/defmastership/rename_included_files_line_modifier_spec.rb +203 -0
  45. data/spec/unit/defmastership/rename_included_files_modifier_spec.rb +67 -0
  46. data/spec/unit/defmastership/update_def_checksum_line_modifier_spec.rb +78 -0
  47. data/spec/unit/defmastership/update_def_checksum_modifier_spec.rb +75 -0
  48. data/spec/unit/defmastership/update_def_version_line_modifier_spec.rb +127 -0
  49. data/spec/unit/defmastership/update_def_version_modifier_spec.rb +80 -0
  50. metadata +44 -9
  51. data/lib/defmastership/batch_changer.rb +0 -41
  52. data/lib/defmastership/project_ref_changer.rb +0 -28
  53. data/spec/unit/defmastership/batch_changer_spec.rb +0 -109
  54. data/spec/unit/defmastership/project_ref_changer_spec.rb +0 -80
@@ -13,88 +13,134 @@ RSpec.describe(DefMastership::CSVFormatterHeader) do
13
13
  end
14
14
 
15
15
  describe '#header' do
16
- describe '#fixed_header' do
17
- it { expect(formatter.fixed_header).to(eq(%w[Type Reference Value])) }
16
+ describe '#fixed' do
17
+ it { expect(formatter.fixed).to(eq(%w[Type Reference Value Checksum])) }
18
18
  end
19
19
 
20
- describe '#labels_header' do
20
+ describe '#explicit_version' do
21
+ context 'when no explicit version' do
22
+ before do
23
+ allow(document).to(receive(:explicit_version?).and_return(false))
24
+ formatter.explicit_version
25
+ end
26
+
27
+ it { expect(document).to(have_received(:explicit_version?)) }
28
+
29
+ it { expect(formatter.explicit_version).to(eq([])) }
30
+ end
31
+
32
+ context 'when explicit version' do
33
+ before do
34
+ allow(document).to(receive(:explicit_version?).and_return(true))
35
+ formatter.explicit_version
36
+ end
37
+
38
+ it { expect(formatter.explicit_version).to(eq(['Version'])) }
39
+ end
40
+ end
41
+
42
+ describe '#wrong_explicit_checksum' do
43
+ context 'when no wrong explicit checksum' do
44
+ before do
45
+ allow(document).to(receive(:wrong_explicit_checksum?).and_return(false))
46
+ formatter.wrong_explicit_checksum
47
+ end
48
+
49
+ it { expect(document).to(have_received(:wrong_explicit_checksum?)) }
50
+
51
+ it { expect(formatter.wrong_explicit_checksum).to(eq([])) }
52
+ end
53
+
54
+ context 'when wrong explicit checksum' do
55
+ before do
56
+ allow(document).to(receive(:wrong_explicit_checksum?).and_return(true))
57
+ formatter.wrong_explicit_checksum
58
+ end
59
+
60
+ it { expect(formatter.wrong_explicit_checksum).to(eq(['Wrong explicit checksum'])) }
61
+ end
62
+ end
63
+
64
+ describe '#labels' do
21
65
  context 'when no labels' do
22
66
  before do
23
67
  allow(document).to(receive(:labels).and_return([]))
24
- formatter.labels_header
68
+ formatter.labels
25
69
  end
26
70
 
27
71
  it { expect(document).to(have_received(:labels)) }
28
72
 
29
- it { expect(formatter.labels_header).to(eq([])) }
73
+ it { expect(formatter.labels).to(eq([])) }
30
74
  end
31
75
 
32
76
  context 'when there is labels' do
33
77
  before { allow(document).to(receive(:labels).and_return(['Whatever'])) }
34
78
 
35
- it { expect(formatter.labels_header).to(eq(['Labels'])) }
79
+ it { expect(formatter.labels).to(eq(['Labels'])) }
36
80
  end
37
81
  end
38
82
 
39
- describe '#eref_header' do
83
+ describe '#eref' do
40
84
  context 'when no eref' do
41
85
  before do
42
86
  allow(document).to(receive(:eref).and_return({}))
43
- formatter.eref_header
87
+ formatter.eref
44
88
  end
45
89
 
46
90
  it { expect(document).to(have_received(:eref)) }
47
91
 
48
- it { expect(formatter.eref_header).to(eq([])) }
92
+ it { expect(formatter.eref).to(eq([])) }
49
93
  end
50
94
 
51
95
  context 'when eref' do
52
96
  before do
53
- allow(document).to(receive(:eref).and_return(
54
- whatever: { prefix: 'A' },
55
- other: { prefix: 'C', url: 'D' }
56
- ))
97
+ allow(document).to(
98
+ receive(:eref).and_return(
99
+ whatever: { prefix: 'A' },
100
+ other: { prefix: 'C', url: 'D' }
101
+ )
102
+ )
57
103
  end
58
104
 
59
- it { expect(formatter.eref_header).to(eq(['A', 'C D'])) }
105
+ it { expect(formatter.eref).to(eq(%w[A C])) }
60
106
  end
61
107
  end
62
108
 
63
- describe '#iref_header' do
109
+ describe '#iref' do
64
110
  context 'when no iref' do
65
111
  before do
66
112
  allow(document).to(receive(:iref).and_return(false))
67
- formatter.iref_header
113
+ formatter.iref
68
114
  end
69
115
 
70
116
  it { expect(document).to(have_received(:iref)) }
71
117
 
72
- it { expect(formatter.iref_header).to(eq([])) }
118
+ it { expect(formatter.iref).to(eq([])) }
73
119
  end
74
120
 
75
121
  context 'when iref' do
76
122
  before { allow(document).to(receive(:iref).and_return(true)) }
77
123
 
78
- it { expect(formatter.iref_header).to(eq(['Internal links'])) }
124
+ it { expect(formatter.iref).to(eq(['Internal links'])) }
79
125
  end
80
126
  end
81
127
 
82
- describe '#attributes_header' do
128
+ describe '#attributes' do
83
129
  context 'when no attributes' do
84
130
  before do
85
131
  allow(document).to(receive(:attributes).and_return({}))
86
- formatter.attributes_header
132
+ formatter.attributes
87
133
  end
88
134
 
89
135
  it { expect(document).to(have_received(:attributes)) }
90
136
 
91
- it { expect(formatter.attributes_header).to(eq([])) }
137
+ it { expect(formatter.attributes).to(eq([])) }
92
138
  end
93
139
 
94
140
  context 'when attributes' do
95
141
  before { allow(document).to(receive(:attributes).and_return(whatever: 'A', other: 'B')) }
96
142
 
97
- it { expect(formatter.attributes_header).to(eq(%w[A B])) }
143
+ it { expect(formatter.attributes).to(eq(%w[A B])) }
98
144
  end
99
145
  end
100
146
  end
@@ -3,6 +3,7 @@
3
3
 
4
4
  require('defmastership')
5
5
  require('ostruct')
6
+ require('csv')
6
7
 
7
8
  RSpec.describe(DefMastership::CSVFormatter) do
8
9
  subject(:formatter) { described_class.new(document, ';') }
@@ -13,160 +14,257 @@ RSpec.describe(DefMastership::CSVFormatter) do
13
14
  it { is_expected.not_to(be(nil)) }
14
15
  end
15
16
 
16
- describe '#header' do
17
- context 'when minimal' do
17
+ describe '#export_to' do
18
+ let(:header) { instance_double(DefMastership::CSVFormatterHeader, 'header') }
19
+ let(:body) { instance_double(DefMastership::CSVFormatterBody, 'body') }
20
+ let(:csv) { instance_double(CSV, 'csv') }
21
+
22
+ before do
23
+ allow(CSV).to(receive(:open).and_yield(csv))
24
+ allow(csv).to(receive(:<<))
25
+ allow(DefMastership::CSVFormatterHeader).to(receive(:new).with(document).and_return(header))
26
+ allow(DefMastership::CSVFormatterBody).to(receive(:new).with(document).and_return(body))
27
+ allow(document).to(receive(:definitions).and_return(%i[def1 def2]))
28
+ allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
29
+ allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
30
+ allow(document).to(receive(:labels).with(no_args).and_return([]))
31
+ allow(document).to(receive(:eref).with(no_args).and_return([]))
32
+ allow(document).to(receive(:iref).with(no_args).and_return(false))
33
+ allow(document).to(receive(:attributes).with(no_args).and_return([]))
34
+ end
35
+
36
+ context 'when no variable columns' do
37
+ methods = %i[fixed]
38
+
18
39
  before do
19
- allow(document).to(receive(:labels).with(no_args).and_return([]))
20
- allow(document).to(receive(:eref).with(no_args).and_return({}))
21
- allow(document).to(receive(:iref).with(no_args).and_return(false))
22
- allow(document).to(receive(:attributes).with(no_args).and_return({}))
23
- formatter.header
40
+ methods.each do |method|
41
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
42
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
43
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
44
+ end
45
+ formatter.export_to('whatever')
46
+ end
47
+
48
+ methods.each do |method|
49
+ it { expect(header).to(have_received(method).with(no_args)) }
50
+ it { expect(body).to(have_received(method).with(:def1)) }
51
+ it { expect(body).to(have_received(method).with(:def2)) }
24
52
  end
25
53
 
26
- it { expect(document).to(have_received(:labels).with(no_args)) }
54
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
55
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
56
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
57
+ end
27
58
 
28
- it { expect(document).to(have_received(:eref).with(no_args)) }
59
+ context 'when wrong_explicit_checksum' do
60
+ methods = %i[fixed wrong_explicit_checksum]
29
61
 
30
- it { expect(document).to(have_received(:iref).with(no_args)) }
62
+ before do
63
+ methods.each do |method|
64
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
65
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
66
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
67
+ end
68
+ allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(true))
69
+ formatter.export_to('whatever')
70
+ end
31
71
 
32
- it { expect(document).to(have_received(:attributes).with(no_args)) }
72
+ methods.each do |method|
73
+ it { expect(header).to(have_received(method).with(no_args)) }
74
+ it { expect(body).to(have_received(method).with(:def1)) }
75
+ it { expect(body).to(have_received(method).with(:def2)) }
76
+ end
33
77
 
34
- it { expect(formatter.header).to(eq(%w[Type Reference Value])) }
78
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
79
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
80
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
35
81
  end
36
82
 
37
- context 'when has everything' do
83
+ context 'when explicit_version' do
84
+ methods = %i[fixed explicit_version]
85
+
38
86
  before do
39
- allow(document).to(receive(:labels)
40
- .with(no_args)
41
- .and_return(['Whatever']))
42
- allow(document).to(receive(:eref)
43
- .with(no_args)
44
- .and_return(whatever: { prefix: 'A' },
45
- other: { prefix: 'C', url: 'D' }))
46
- allow(document).to(receive(:iref).with(no_args).and_return(true))
47
- allow(document).to(receive(:attributes)
48
- .with(no_args)
49
- .and_return(whatever: 'E', other: 'F'))
87
+ methods.each do |method|
88
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
89
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
90
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
91
+ end
92
+ allow(document).to(receive(:explicit_version?).with(no_args).and_return(true))
93
+ formatter.export_to('whatever')
50
94
  end
51
95
 
52
- it do
53
- expect(formatter.header).to(eq(%w[Type Reference Value Labels] +
54
- ['A', 'C D', 'Internal links'] +
55
- %w[E F]))
96
+ methods.each do |method|
97
+ it { expect(header).to(have_received(method).with(no_args)) }
98
+ it { expect(body).to(have_received(method).with(:def1)) }
99
+ it { expect(body).to(have_received(method).with(:def2)) }
56
100
  end
101
+
102
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
103
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
104
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
57
105
  end
58
- end
59
106
 
60
- describe '#body' do
61
- let(:definition) { instance_double(DefMastership::Definition, 'definition') }
107
+ context 'when labels' do
108
+ methods = %i[fixed labels]
62
109
 
63
- context 'when minimal' do
64
110
  before do
65
- allow(document).to(receive(:labels).with(no_args).and_return([]))
66
- allow(document).to(receive(:eref).with(no_args).and_return({}))
67
- allow(document).to(receive(:iref).with(no_args).and_return(false))
68
- allow(document).to(receive(:attributes).with(no_args).and_return({}))
69
- allow(definition).to(receive(:type).with(no_args).and_return('a'))
70
- allow(definition).to(receive(:reference).with(no_args).and_return('b'))
71
- allow(definition).to(receive(:value).with(no_args).and_return('c'))
72
- formatter.body(definition)
111
+ methods.each do |method|
112
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
113
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
114
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
115
+ end
116
+ allow(document).to(receive(:labels).with(no_args).and_return([:whatever]))
117
+ formatter.export_to('whatever')
73
118
  end
74
119
 
75
- it { expect(document).to(have_received(:labels).with(no_args)) }
76
-
77
- it { expect(document).to(have_received(:eref).with(no_args)) }
78
-
79
- it { expect(document).to(have_received(:iref).with(no_args)) }
120
+ methods.each do |method|
121
+ it { expect(header).to(have_received(method).with(no_args)) }
122
+ it { expect(body).to(have_received(method).with(:def1)) }
123
+ it { expect(body).to(have_received(method).with(:def2)) }
124
+ end
80
125
 
81
- it { expect(document).to(have_received(:attributes).with(no_args)) }
126
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
127
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
128
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
129
+ end
82
130
 
83
- it { expect(definition).to(have_received(:type).with(no_args)) }
131
+ context 'when eref' do
132
+ methods = %i[fixed eref]
84
133
 
85
- it { expect(definition).to(have_received(:reference).with(no_args)) }
134
+ before do
135
+ methods.each do |method|
136
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
137
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
138
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
139
+ end
140
+ allow(document).to(receive(:eref).with(no_args).and_return([:whatever]))
141
+ formatter.export_to('whatever')
142
+ end
86
143
 
87
- it { expect(definition).to(have_received(:value).with(no_args)) }
144
+ methods.each do |method|
145
+ it { expect(header).to(have_received(method).with(no_args)) }
146
+ it { expect(body).to(have_received(method).with(:def1)) }
147
+ it { expect(body).to(have_received(method).with(:def2)) }
148
+ end
88
149
 
89
- it { expect(formatter.body(definition)).to(eq(%w[a b c])) }
150
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
151
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
152
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
90
153
  end
91
154
 
92
- context 'when has everything' do
155
+ context 'when iref' do
156
+ methods = %i[fixed iref]
157
+
93
158
  before do
94
- allow(document).to(receive(:labels).with(no_args).and_return(['Whatever']))
95
- allow(document).to(receive(:eref).with(no_args).and_return(
96
- a: 'whatever',
97
- b: 'whatever',
98
- c: 'whatever'
99
- ))
159
+ methods.each do |method|
160
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
161
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
162
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
163
+ end
100
164
  allow(document).to(receive(:iref).with(no_args).and_return(true))
101
- allow(document).to(receive(:attributes).with(no_args).and_return(
102
- a: 'whatever',
103
- b: 'whatever',
104
- c: 'whatever'
105
- ))
106
- allow(definition).to(receive(:type).with(no_args).and_return('a'))
107
- allow(definition).to(receive(:reference).with(no_args).and_return('b'))
108
- allow(definition).to(receive(:value).with(no_args).and_return('c'))
109
- allow(definition).to(receive(:labels).with(no_args).and_return(%w[toto tutu]))
110
- allow(definition).to(receive(:eref).with(no_args).and_return(a: %w[A B], b: [], c: ['C']))
111
- allow(definition).to(receive(:iref).with(no_args).and_return(%w[E F]))
112
- allow(definition).to(receive(:attributes).with(no_args).and_return(a: 'X', b: '', c: 'Y'))
113
- formatter.body(definition)
165
+ formatter.export_to('whatever')
114
166
  end
115
167
 
116
- it { expect(definition).to(have_received(:labels).with(no_args)) }
168
+ methods.each do |method|
169
+ it { expect(header).to(have_received(method).with(no_args)) }
170
+ it { expect(body).to(have_received(method).with(:def1)) }
171
+ it { expect(body).to(have_received(method).with(:def2)) }
172
+ end
117
173
 
118
- it { expect(definition).to(have_received(:eref).exactly(3).times.with(no_args)) }
174
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
175
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
176
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
177
+ end
119
178
 
120
- it { expect(definition).to(have_received(:iref).with(no_args)) }
179
+ context 'when attributes' do
180
+ methods = %i[fixed attributes]
121
181
 
122
- it { expect(definition).to(have_received(:attributes).exactly(3).times.with(no_args)) }
182
+ before do
183
+ methods.each do |method|
184
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
185
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
186
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
187
+ end
188
+ allow(document).to(receive(:attributes).with(no_args).and_return([:whatever]))
189
+ formatter.export_to('whatever')
190
+ end
123
191
 
124
- it do
125
- expect(formatter.body(definition)).to(eq(%w[a b c] + ["toto\ntutu"] +
126
- ["A\nB", '', 'C'] +
127
- ["E\nF"] +
128
- ['X', '', 'Y']))
192
+ methods.each do |method|
193
+ it { expect(header).to(have_received(method).with(no_args)) }
194
+ it { expect(body).to(have_received(method).with(:def1)) }
195
+ it { expect(body).to(have_received(method).with(:def2)) }
129
196
  end
197
+
198
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
199
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
200
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
130
201
  end
131
- end
132
202
 
133
- describe '#export_to' do
134
- context 'when #export_to csv file' do
135
- let(:target_file) { 'export.csv' }
136
- let(:definitions) do
137
- [
138
- OpenStruct.new(type: 'a', reference: 'b', value: 'c'),
139
- OpenStruct.new(type: 'd', reference: 'e', value: 'f')
140
- ]
141
- end
203
+ context 'when every colums' do
204
+ methods = %i[fixed wrong_explicit_checksum explicit_version labels eref iref attributes]
142
205
 
143
206
  before do
144
- setup_aruba
145
- allow(document).to(receive(:labels).exactly(3).times.with(no_args).and_return([]))
146
- allow(document).to(receive(:eref).exactly(3).times.with(no_args).and_return({}))
147
- allow(document).to(receive(:iref).exactly(3).times.with(no_args).and_return(false))
148
- allow(document).to(receive(:attributes).exactly(3).times.with(no_args).and_return({}))
149
- allow(document).to(receive(:definitions).with(no_args).and_return(definitions))
150
- formatter.export_to("#{aruba.current_directory}/#{target_file}")
207
+ methods.each do |method|
208
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
209
+ allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
210
+ allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
211
+ end
212
+ allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(true))
213
+ allow(document).to(receive(:explicit_version?).with(no_args).and_return(true))
214
+ allow(document).to(receive(:labels).with(no_args).and_return([:whatever]))
215
+ allow(document).to(receive(:eref).with(no_args).and_return([:whatever]))
216
+ allow(document).to(receive(:iref).with(no_args).and_return(true))
217
+ allow(document).to(receive(:attributes).with(no_args).and_return([:whatever]))
218
+ formatter.export_to('whatever')
151
219
  end
152
220
 
153
- it { expect(document).to(have_received(:labels).exactly(3).times.with(no_args)) }
154
-
155
- it { expect(document).to(have_received(:eref).exactly(3).times.with(no_args)) }
221
+ methods.each do |method|
222
+ it { expect(header).to(have_received(method).with(no_args)) }
223
+ it { expect(body).to(have_received(method).with(:def1)) }
224
+ it { expect(body).to(have_received(method).with(:def2)) }
225
+ end
156
226
 
157
- it { expect(document).to(have_received(:iref).exactly(3).times.with(no_args)) }
227
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
228
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
229
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
230
+ end
231
+ end
158
232
 
159
- it { expect(document).to(have_received(:attributes).exactly(3).times.with(no_args)) }
233
+ context 'when #export_to csv file' do
234
+ let(:target_file) { 'export.csv' }
235
+ let(:definitions) do
236
+ [
237
+ OpenStruct.new(type: 'a', reference: 'b', value: 'c', sha256: 'd'),
238
+ OpenStruct.new(type: 'd', reference: 'e', value: 'f', sha256: 'g')
239
+ ]
240
+ end
160
241
 
161
- it { expect(document).to(have_received(:definitions).with(no_args)) }
242
+ before do
243
+ setup_aruba
244
+ allow(document).to(receive(:labels).with(no_args).and_return([]))
245
+ allow(document).to(receive(:eref).with(no_args).and_return({}))
246
+ allow(document).to(receive(:iref).with(no_args).and_return(false))
247
+ allow(document).to(receive(:attributes).with(no_args).and_return({}))
248
+ allow(document).to(receive(:definitions).with(no_args).and_return(definitions))
249
+ allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
250
+ allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
251
+ formatter.export_to("#{aruba.current_directory}/#{target_file}")
252
+ end
162
253
 
163
- it do
164
- expect(target_file).to(have_file_content(<<~CSV_FILE))
165
- Type;Reference;Value
166
- a;b;c
167
- d;e;f
168
- CSV_FILE
169
- end
254
+ it { expect(document).to(have_received(:labels).with(no_args)) }
255
+ it { expect(document).to(have_received(:eref).with(no_args)) }
256
+ it { expect(document).to(have_received(:iref).with(no_args)) }
257
+ it { expect(document).to(have_received(:attributes).with(no_args)) }
258
+ it { expect(document).to(have_received(:definitions).with(no_args)) }
259
+ it { expect(document).to(have_received(:wrong_explicit_checksum?).with(no_args)) }
260
+ it { expect(document).to(have_received(:explicit_version?).with(no_args)) }
261
+
262
+ it do
263
+ expect(target_file).to(have_file_content(<<~CSV_FILE))
264
+ Type;Reference;Value;Checksum
265
+ a;b;c;d
266
+ d;e;f;g
267
+ CSV_FILE
170
268
  end
171
269
  end
172
270
  end