defmastership 1.3.2 → 1.3.4
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.
- checksums.yaml +4 -4
- data/Gemfile +9 -9
- data/Guardfile +2 -5
- data/Rakefile +1 -1
- data/config/mutant.yml +2 -1
- data/config/rubocop.yml +20 -8
- data/defmastership.gemspec +6 -15
- data/features/changeref.feature +108 -0
- data/features/definition_checksum.feature +118 -0
- data/features/definition_version.feature +168 -0
- data/features/export.feature +122 -22
- data/features/external_ref_checksum.feature +169 -0
- data/features/external_ref_version.feature +173 -0
- data/features/internal_ref_checksum.feature +77 -0
- data/features/internal_ref_version.feature +81 -0
- data/features/rename_included_files.feature +55 -0
- data/features/step_definitions/git_steps.rb +3 -0
- data/lib/defmastership/app.rb +35 -8
- data/lib/defmastership/comment_filter.rb +2 -0
- data/lib/defmastership/def_type_list.rb +25 -0
- data/lib/defmastership/definition_parser.rb +2 -6
- data/lib/defmastership/document.rb +6 -9
- data/lib/defmastership/export/csv/formatter.rb +8 -60
- data/lib/defmastership/export/formatter.rb +88 -0
- data/lib/defmastership/export/json/formatter.rb +34 -0
- data/lib/defmastership/export/xlsx/formatter.rb +87 -0
- data/lib/defmastership/export/yaml/formatter.rb +34 -0
- data/lib/defmastership/modifier/change_ref.rb +24 -39
- data/lib/defmastership/modifier/factory.rb +5 -1
- data/lib/defmastership/modifier/modifier_common.rb +4 -4
- data/lib/defmastership/modifier/rename_included_files.rb +16 -5
- data/lib/defmastership/modifier/replacement_formatter.rb +37 -0
- data/lib/defmastership/modifier/update_def.rb +7 -2
- data/lib/defmastership/modifier/update_eref_checksum.rb +46 -0
- data/lib/defmastership/modifier/update_eref_common.rb +78 -0
- data/lib/defmastership/modifier/update_eref_version.rb +46 -0
- data/lib/defmastership/modifier/update_iref_checksum.rb +52 -0
- data/lib/defmastership/modifier/update_iref_common.rb +45 -0
- data/lib/defmastership/modifier/update_iref_version.rb +59 -0
- data/lib/defmastership/version.rb +1 -1
- data/spec/spec_helper.rb +11 -10
- data/spec/unit/defmastership/app_spec.rb +57 -20
- data/spec/unit/defmastership/batch_modifier_spec.rb +9 -7
- data/spec/unit/defmastership/def_type_list_spec.rb +22 -0
- data/spec/unit/defmastership/definition_spec.rb +8 -51
- data/spec/unit/defmastership/document_spec.rb +12 -36
- data/spec/unit/defmastership/export/body_formatter_spec.rb +5 -18
- data/spec/unit/defmastership/export/csv/formatter_spec.rb +45 -231
- data/spec/unit/defmastership/export/formatter_spec.rb +97 -0
- data/spec/unit/defmastership/export/header_formatter_spec.rb +2 -6
- data/spec/unit/defmastership/export/json/formatter_spec.rb +85 -0
- data/spec/unit/defmastership/export/xlsx/formatter_spec.rb +82 -0
- data/spec/unit/defmastership/export/yaml/formatter_spec.rb +85 -0
- data/spec/unit/defmastership/hash_spec.rb +2 -0
- data/spec/unit/defmastership/modifier/change_ref_spec.rb +66 -97
- data/spec/unit/defmastership/modifier/factory_spec.rb +40 -17
- data/spec/unit/defmastership/modifier/modifier_common_spec.rb +7 -5
- data/spec/unit/defmastership/modifier/rename_included_files_spec.rb +105 -85
- data/spec/unit/defmastership/modifier/update_def_checksum_spec.rb +6 -13
- data/spec/unit/defmastership/modifier/update_def_spec.rb +79 -22
- data/spec/unit/defmastership/modifier/update_def_version_spec.rb +13 -37
- data/spec/unit/defmastership/modifier/update_eref_checksum_spec.rb +209 -0
- data/spec/unit/defmastership/modifier/update_eref_version_spec.rb +227 -0
- data/spec/unit/defmastership/modifier/update_iref_checksum_spec.rb +133 -0
- data/spec/unit/defmastership/modifier/update_iref_version_spec.rb +162 -0
- data/tasks/code_quality.rake +1 -8
- data/tasks/test.rake +15 -0
- metadata +59 -6
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
# Copyright (c) 2020 Jerome Arbez-Gindre
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require('defmastership/document')
|
|
4
5
|
require('defmastership/export/csv/formatter')
|
|
5
6
|
|
|
7
|
+
COLUMN_METHODS = %i[type reference value checksum].freeze
|
|
8
|
+
|
|
6
9
|
RSpec.describe(Defmastership::Export::CSV::Formatter) do
|
|
7
|
-
subject(:formatter) { described_class.new(document, ';') }
|
|
10
|
+
subject(:formatter) { described_class.new(document, separator: ';') }
|
|
8
11
|
|
|
9
12
|
let(:document) { instance_double(Defmastership::Document, 'document') }
|
|
10
13
|
|
|
@@ -20,6 +23,7 @@ RSpec.describe(Defmastership::Export::CSV::Formatter) do
|
|
|
20
23
|
instance_double(Defmastership::Export::BodyFormatter, 'bodies[1]')
|
|
21
24
|
]
|
|
22
25
|
end
|
|
26
|
+
|
|
23
27
|
let(:csv) { instance_double(CSV, 'csv') }
|
|
24
28
|
|
|
25
29
|
before do
|
|
@@ -45,10 +49,8 @@ RSpec.describe(Defmastership::Export::CSV::Formatter) do
|
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
context 'when no variable columns' do
|
|
48
|
-
methods = %i[type reference value checksum]
|
|
49
|
-
|
|
50
52
|
before do
|
|
51
|
-
|
|
53
|
+
COLUMN_METHODS.each do |method|
|
|
52
54
|
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
53
55
|
bodies.each_with_index do |body, index|
|
|
54
56
|
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
@@ -59,88 +61,7 @@ RSpec.describe(Defmastership::Export::CSV::Formatter) do
|
|
|
59
61
|
|
|
60
62
|
it { expect(CSV).to(have_received(:open).with('whatever', 'w:ISO-8859-1', col_sep: ';')) }
|
|
61
63
|
|
|
62
|
-
|
|
63
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
64
|
-
|
|
65
|
-
2.times do |index|
|
|
66
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
71
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
72
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
context 'when summary' do
|
|
76
|
-
methods = %i[type reference summary value checksum]
|
|
77
|
-
|
|
78
|
-
before do
|
|
79
|
-
methods.each do |method|
|
|
80
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
81
|
-
bodies.each_with_index do |body, index|
|
|
82
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
allow(document).to(receive(:summaries?).with(no_args).and_return([:whatever]))
|
|
86
|
-
formatter.export_to('whatever')
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
methods.each do |method|
|
|
90
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
91
|
-
|
|
92
|
-
2.times do |index|
|
|
93
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
98
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
99
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
context 'when wrong_explicit_checksum' do
|
|
103
|
-
methods = %i[type reference value checksum wrong_explicit_checksum]
|
|
104
|
-
|
|
105
|
-
before do
|
|
106
|
-
methods.each do |method|
|
|
107
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
108
|
-
bodies.each_with_index do |body, index|
|
|
109
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(true))
|
|
113
|
-
formatter.export_to('whatever')
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
methods.each do |method|
|
|
117
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
118
|
-
|
|
119
|
-
2.times do |index|
|
|
120
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
125
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
126
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
context 'when explicit_version' do
|
|
130
|
-
methods = %i[type reference value checksum explicit_version]
|
|
131
|
-
|
|
132
|
-
before do
|
|
133
|
-
methods.each do |method|
|
|
134
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
135
|
-
bodies.each_with_index do |body, index|
|
|
136
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
allow(document).to(receive(:explicit_version?).with(no_args).and_return(true))
|
|
140
|
-
formatter.export_to('whatever')
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
methods.each do |method|
|
|
64
|
+
COLUMN_METHODS.each do |method|
|
|
144
65
|
it { expect(header).to(have_received(method).with(no_args)) }
|
|
145
66
|
|
|
146
67
|
2.times do |index|
|
|
@@ -148,162 +69,55 @@ RSpec.describe(Defmastership::Export::CSV::Formatter) do
|
|
|
148
69
|
end
|
|
149
70
|
end
|
|
150
71
|
|
|
151
|
-
it { expect(csv).to(have_received(:<<).with(
|
|
152
|
-
it { expect(csv).to(have_received(:<<).with(
|
|
153
|
-
it { expect(csv).to(have_received(:<<).with(
|
|
72
|
+
it { expect(csv).to(have_received(:<<).with(COLUMN_METHODS.map { |method| "#{method} header" })) }
|
|
73
|
+
it { expect(csv).to(have_received(:<<).with(COLUMN_METHODS.map { |method| "#{method} def0 body" })) }
|
|
74
|
+
it { expect(csv).to(have_received(:<<).with(COLUMN_METHODS.map { |method| "#{method} def1 body" })) }
|
|
154
75
|
end
|
|
76
|
+
end
|
|
155
77
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
before do
|
|
160
|
-
methods.each do |method|
|
|
161
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
162
|
-
bodies.each_with_index do |body, index|
|
|
163
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
allow(document).to(receive(:labels).with(no_args).and_return([:whatever]))
|
|
167
|
-
formatter.export_to('whatever')
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
methods.each do |method|
|
|
171
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
172
|
-
|
|
173
|
-
2.times do |index|
|
|
174
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
179
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
180
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
context 'when eref' do
|
|
184
|
-
methods = %i[type reference value checksum eref]
|
|
185
|
-
|
|
186
|
-
before do
|
|
187
|
-
methods.each do |method|
|
|
188
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
189
|
-
bodies.each_with_index do |body, index|
|
|
190
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
allow(document).to(receive(:eref).with(no_args).and_return([:whatever]))
|
|
194
|
-
formatter.export_to('whatever')
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
methods.each do |method|
|
|
198
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
199
|
-
|
|
200
|
-
2.times do |index|
|
|
201
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
206
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
207
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
context 'when iref' do
|
|
211
|
-
methods = %i[type reference value checksum iref]
|
|
212
|
-
|
|
213
|
-
before do
|
|
214
|
-
methods.each do |method|
|
|
215
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
216
|
-
bodies.each_with_index do |body, index|
|
|
217
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
allow(document).to(receive(:iref).with(no_args).and_return(true))
|
|
221
|
-
formatter.export_to('whatever')
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
methods.each do |method|
|
|
225
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
78
|
+
describe '#export_to with default separator' do
|
|
79
|
+
subject(:formatter) { described_class.new(document) }
|
|
226
80
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
234
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
81
|
+
let(:header) { instance_double(Defmastership::Export::HeaderFormatter, 'header') }
|
|
82
|
+
let(:bodies) do
|
|
83
|
+
[
|
|
84
|
+
instance_double(Defmastership::Export::BodyFormatter, 'bodies[0]'),
|
|
85
|
+
instance_double(Defmastership::Export::BodyFormatter, 'bodies[1]')
|
|
86
|
+
]
|
|
235
87
|
end
|
|
236
88
|
|
|
237
|
-
|
|
238
|
-
methods = %i[type reference value checksum attributes]
|
|
89
|
+
let(:csv) { instance_double(CSV, 'csv') }
|
|
239
90
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
91
|
+
before do
|
|
92
|
+
allow(CSV).to(receive(:open).with('whatever', 'w:ISO-8859-1', col_sep: ',').and_yield(csv))
|
|
93
|
+
allow(csv).to(receive(:<<))
|
|
94
|
+
allow(Defmastership::Export::HeaderFormatter).to(receive(:new).with(document).and_return(header))
|
|
95
|
+
bodies.each_with_index do |body, index|
|
|
96
|
+
allow(Defmastership::Export::BodyFormatter).to(
|
|
97
|
+
receive(:new).with(
|
|
98
|
+
document,
|
|
99
|
+
:"def#{index}"
|
|
100
|
+
).and_return(body)
|
|
101
|
+
)
|
|
249
102
|
end
|
|
103
|
+
allow(document).to(receive(:definitions).and_return(%i[def0 def1]))
|
|
104
|
+
allow(document).to(receive(:summaries?).with(no_args).and_return(false))
|
|
105
|
+
allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
|
|
106
|
+
allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
|
|
107
|
+
allow(document).to(receive(:labels).with(no_args).and_return([]))
|
|
108
|
+
allow(document).to(receive(:eref).with(no_args).and_return([]))
|
|
109
|
+
allow(document).to(receive(:iref).with(no_args).and_return(false))
|
|
110
|
+
allow(document).to(receive(:attributes).with(no_args).and_return([]))
|
|
250
111
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
112
|
+
%i[type reference value checksum].each do |method|
|
|
113
|
+
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
114
|
+
bodies.each_with_index do |body, index|
|
|
115
|
+
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
256
116
|
end
|
|
257
117
|
end
|
|
258
|
-
|
|
259
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
260
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
261
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
118
|
+
formatter.export_to('whatever')
|
|
262
119
|
end
|
|
263
120
|
|
|
264
|
-
|
|
265
|
-
methods = %i[
|
|
266
|
-
type
|
|
267
|
-
reference
|
|
268
|
-
summary
|
|
269
|
-
value
|
|
270
|
-
checksum
|
|
271
|
-
wrong_explicit_checksum
|
|
272
|
-
explicit_version
|
|
273
|
-
labels
|
|
274
|
-
eref
|
|
275
|
-
iref
|
|
276
|
-
attributes
|
|
277
|
-
]
|
|
278
|
-
|
|
279
|
-
before do
|
|
280
|
-
methods.each do |method|
|
|
281
|
-
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
282
|
-
bodies.each_with_index do |body, index|
|
|
283
|
-
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
284
|
-
end
|
|
285
|
-
end
|
|
286
|
-
allow(document).to(receive(:summaries?).with(no_args).and_return(true))
|
|
287
|
-
allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(true))
|
|
288
|
-
allow(document).to(receive(:explicit_version?).with(no_args).and_return(true))
|
|
289
|
-
allow(document).to(receive(:labels).with(no_args).and_return([:whatever]))
|
|
290
|
-
allow(document).to(receive(:eref).with(no_args).and_return([:whatever]))
|
|
291
|
-
allow(document).to(receive(:iref).with(no_args).and_return(true))
|
|
292
|
-
allow(document).to(receive(:attributes).with(no_args).and_return([:whatever]))
|
|
293
|
-
formatter.export_to('whatever')
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
methods.each do |method|
|
|
297
|
-
it { expect(header).to(have_received(method).with(no_args)) }
|
|
298
|
-
|
|
299
|
-
2.times do |index|
|
|
300
|
-
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
301
|
-
end
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
|
|
305
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
|
|
306
|
-
it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
|
|
307
|
-
end
|
|
121
|
+
it { expect(CSV).to(have_received(:open).with('whatever', 'w:ISO-8859-1', col_sep: ',')) }
|
|
308
122
|
end
|
|
309
123
|
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Copyright (c) 2020 Jerome Arbez-Gindre
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require('defmastership/export/formatter')
|
|
5
|
+
|
|
6
|
+
# Defmastership::Export::Formatter is an abstract class and need to be derived for test
|
|
7
|
+
class ConcreteFormatter < Defmastership::Export::Formatter
|
|
8
|
+
def export_to(_filename)
|
|
9
|
+
# allow to indirectly test a private method
|
|
10
|
+
build_column_list
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
RSpec.describe(Defmastership::Export::Formatter) do
|
|
15
|
+
context('when class is not derived') do
|
|
16
|
+
subject(:formatter) { described_class.new(:whatever) }
|
|
17
|
+
|
|
18
|
+
describe '#export_to' do
|
|
19
|
+
it {
|
|
20
|
+
expect { formatter.export_to(:something) }
|
|
21
|
+
.to(raise_error(
|
|
22
|
+
NotImplementedError,
|
|
23
|
+
'Defmastership::Export::Formatter has not implemented the \'export_to\' method'
|
|
24
|
+
))
|
|
25
|
+
}
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context('when class is derived') do
|
|
30
|
+
subject(:formatter) { ConcreteFormatter.new(document) }
|
|
31
|
+
|
|
32
|
+
let(:document) { instance_double(Defmastership::Document, 'document') }
|
|
33
|
+
|
|
34
|
+
describe '#export_to' do
|
|
35
|
+
it {
|
|
36
|
+
expect { formatter.export_to(:something) }
|
|
37
|
+
.not_to(raise_error(NotImplementedError))
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#header' do
|
|
42
|
+
let(:header_formatter) { instance_double(Defmastership::Export::HeaderFormatter, 'header_formatter') }
|
|
43
|
+
|
|
44
|
+
before do
|
|
45
|
+
allow(Defmastership::Export::HeaderFormatter).to(receive(:new).and_return(header_formatter))
|
|
46
|
+
allow(header_formatter).to(receive_messages(type: ['type value'], reference: ['reference value']))
|
|
47
|
+
formatter.header(%i[type reference])
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it { expect(Defmastership::Export::HeaderFormatter).to(have_received(:new).with(document)) }
|
|
51
|
+
it { expect(header_formatter).to(have_received(:type)) }
|
|
52
|
+
it { expect(header_formatter).to(have_received(:reference)) }
|
|
53
|
+
it { expect(formatter.header(%i[type reference])).to(eq(['type value', 'reference value'])) }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe '#body' do
|
|
57
|
+
let(:body_formatter) { instance_double(Defmastership::Export::BodyFormatter, 'body_formatter') }
|
|
58
|
+
|
|
59
|
+
before do
|
|
60
|
+
allow(Defmastership::Export::BodyFormatter).to(receive(:new).and_return(body_formatter))
|
|
61
|
+
allow(body_formatter).to(receive_messages(type: ['type value'], reference: ['reference value']))
|
|
62
|
+
formatter.body(:definition, %i[type reference])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it { expect(Defmastership::Export::BodyFormatter).to(have_received(:new).with(document, :definition)) }
|
|
66
|
+
it { expect(body_formatter).to(have_received(:type)) }
|
|
67
|
+
it { expect(body_formatter).to(have_received(:reference)) }
|
|
68
|
+
it { expect(formatter.body(:definition, %i[type reference])).to(eq(['type value', 'reference value'])) }
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#build_column_list' do
|
|
72
|
+
before do
|
|
73
|
+
allow(document).to(
|
|
74
|
+
receive_messages(
|
|
75
|
+
summaries?: true,
|
|
76
|
+
wrong_explicit_checksum?: false,
|
|
77
|
+
explicit_version?: false,
|
|
78
|
+
labels: ['toto'],
|
|
79
|
+
eref: [],
|
|
80
|
+
iref: false,
|
|
81
|
+
attributes: []
|
|
82
|
+
)
|
|
83
|
+
)
|
|
84
|
+
formatter.export_to(:whatever)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it { expect(document).to(have_received(:summaries?)) }
|
|
88
|
+
it { expect(document).to(have_received(:wrong_explicit_checksum?)) }
|
|
89
|
+
it { expect(document).to(have_received(:explicit_version?)) }
|
|
90
|
+
it { expect(document).to(have_received(:labels)) }
|
|
91
|
+
it { expect(document).to(have_received(:eref)) }
|
|
92
|
+
it { expect(document).to(have_received(:iref)) }
|
|
93
|
+
it { expect(document).to(have_received(:attributes)) }
|
|
94
|
+
it { expect(formatter.export_to(:whatever)).to(eq(%i[type reference summary value checksum labels])) }
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Copyright (c) 2020 Jerome Arbez-Gindre
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require('defmastership/document')
|
|
4
5
|
require('defmastership/export/header_formatter')
|
|
5
6
|
|
|
6
7
|
RSpec.describe(Defmastership::Export::HeaderFormatter) do
|
|
@@ -110,12 +111,7 @@ RSpec.describe(Defmastership::Export::HeaderFormatter) do
|
|
|
110
111
|
|
|
111
112
|
context 'when eref' do
|
|
112
113
|
before do
|
|
113
|
-
allow(document).to(
|
|
114
|
-
receive(:eref).and_return(
|
|
115
|
-
whatever: { prefix: 'A' },
|
|
116
|
-
other: { prefix: 'C', url: 'D' }
|
|
117
|
-
)
|
|
118
|
-
)
|
|
114
|
+
allow(document).to(receive(:eref).and_return(whatever: { prefix: 'A' }, other: { prefix: 'C', url: 'D' }))
|
|
119
115
|
end
|
|
120
116
|
|
|
121
117
|
it { expect(formatter.eref).to(eq(%w[A C])) }
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Copyright (c) 2020 Jerome Arbez-Gindre
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require('defmastership/document')
|
|
5
|
+
require('defmastership/export/json/formatter')
|
|
6
|
+
|
|
7
|
+
RSpec.describe(Defmastership::Export::JSON::Formatter) do
|
|
8
|
+
subject(:formatter) { described_class.new(document) }
|
|
9
|
+
|
|
10
|
+
let(:document) { instance_double(Defmastership::Document, 'document') }
|
|
11
|
+
|
|
12
|
+
describe '.new' do
|
|
13
|
+
it { is_expected.not_to(be_nil) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe '#export_to' do
|
|
17
|
+
let(:header) { instance_double(Defmastership::Export::HeaderFormatter, 'header') }
|
|
18
|
+
let(:bodies) do
|
|
19
|
+
[
|
|
20
|
+
instance_double(Defmastership::Export::BodyFormatter, 'bodies[0]'),
|
|
21
|
+
instance_double(Defmastership::Export::BodyFormatter, 'bodies[1]')
|
|
22
|
+
]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
let(:json) { instance_double(JSON, 'json') }
|
|
26
|
+
let(:expected_hash_array) do
|
|
27
|
+
[
|
|
28
|
+
{
|
|
29
|
+
'checksum header': 'checksum def0 body',
|
|
30
|
+
'reference header': 'reference def0 body',
|
|
31
|
+
'type header': 'type def0 body',
|
|
32
|
+
'value header': 'value def0 body'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
'checksum header': 'checksum def1 body',
|
|
36
|
+
'reference header': 'reference def1 body',
|
|
37
|
+
'type header': 'type def1 body',
|
|
38
|
+
'value header': 'value def1 body'
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
before do
|
|
44
|
+
allow(Defmastership::Export::HeaderFormatter).to(receive(:new).with(document).and_return(header))
|
|
45
|
+
bodies.each_with_index do |body, index|
|
|
46
|
+
allow(Defmastership::Export::BodyFormatter).to(
|
|
47
|
+
receive(:new).with(
|
|
48
|
+
document,
|
|
49
|
+
:"def#{index}"
|
|
50
|
+
).and_return(body)
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
allow(document).to(receive(:definitions).and_return(%i[def0 def1]))
|
|
54
|
+
allow(document).to(receive(:summaries?).with(no_args).and_return(false))
|
|
55
|
+
allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
|
|
56
|
+
allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
|
|
57
|
+
allow(document).to(receive(:labels).with(no_args).and_return([]))
|
|
58
|
+
allow(document).to(receive(:eref).with(no_args).and_return([]))
|
|
59
|
+
allow(document).to(receive(:iref).with(no_args).and_return(false))
|
|
60
|
+
allow(document).to(receive(:attributes).with(no_args).and_return([]))
|
|
61
|
+
|
|
62
|
+
COLUMN_METHODS.each do |method|
|
|
63
|
+
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
64
|
+
bodies.each_with_index do |body, index|
|
|
65
|
+
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
allow(JSON).to(receive(:pretty_generate)).and_return('the generated json')
|
|
70
|
+
allow(File).to(receive(:write).with('filename', 'the generated json'))
|
|
71
|
+
formatter.export_to('filename')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
COLUMN_METHODS.each do |method|
|
|
75
|
+
it { expect(header).to(have_received(method).with(no_args)) }
|
|
76
|
+
|
|
77
|
+
2.times do |index|
|
|
78
|
+
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it { expect(JSON).to(have_received(:pretty_generate).with(expected_hash_array)) }
|
|
83
|
+
it { expect(File).to(have_received(:write).with('filename', 'the generated json')) }
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Copyright (c) 2020 Jerome Arbez-Gindre
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require('defmastership/export/xlsx/formatter')
|
|
5
|
+
require('rubyXL')
|
|
6
|
+
|
|
7
|
+
RSpec.describe(Defmastership::Export::XLSX::Formatter) do
|
|
8
|
+
subject(:formatter) { described_class.new(document) }
|
|
9
|
+
|
|
10
|
+
let(:document) { instance_double(Defmastership::Document, 'document') }
|
|
11
|
+
|
|
12
|
+
describe '.new' do
|
|
13
|
+
it { is_expected.not_to(be_nil) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe '#export_to' do
|
|
17
|
+
let(:header) { instance_double(Defmastership::Export::HeaderFormatter, 'header') }
|
|
18
|
+
let(:bodies) do
|
|
19
|
+
[
|
|
20
|
+
instance_double(Defmastership::Export::BodyFormatter, 'bodies[0]'),
|
|
21
|
+
instance_double(Defmastership::Export::BodyFormatter, 'bodies[1]')
|
|
22
|
+
]
|
|
23
|
+
end
|
|
24
|
+
let(:workbook) { instance_double(RubyXL::Workbook, 'workbook') }
|
|
25
|
+
let(:worksheet) { instance_double(RubyXL::Worksheet, 'worksheet') }
|
|
26
|
+
|
|
27
|
+
before do
|
|
28
|
+
allow(RubyXL::Workbook).to(receive(:new).and_return(workbook))
|
|
29
|
+
allow(workbook).to(receive(:worksheets).with(no_args).and_return([worksheet]))
|
|
30
|
+
allow(worksheet).to(receive(:add_cell))
|
|
31
|
+
allow(workbook).to(receive(:write))
|
|
32
|
+
allow(Defmastership::Export::HeaderFormatter).to(receive(:new).with(document).and_return(header))
|
|
33
|
+
bodies.each_with_index do |body, index|
|
|
34
|
+
allow(Defmastership::Export::BodyFormatter).to(
|
|
35
|
+
receive(:new).with(
|
|
36
|
+
document,
|
|
37
|
+
:"def#{index}"
|
|
38
|
+
).and_return(body)
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
allow(document).to(receive(:definitions).and_return(%i[def0 def1]))
|
|
42
|
+
allow(document).to(receive(:summaries?).with(no_args).and_return(false))
|
|
43
|
+
allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
|
|
44
|
+
allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
|
|
45
|
+
allow(document).to(receive(:labels).with(no_args).and_return([]))
|
|
46
|
+
allow(document).to(receive(:eref).with(no_args).and_return([]))
|
|
47
|
+
allow(document).to(receive(:iref).with(no_args).and_return(false))
|
|
48
|
+
allow(document).to(receive(:attributes).with(no_args).and_return([]))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'when no variable columns' do
|
|
52
|
+
before do
|
|
53
|
+
COLUMN_METHODS.each do |method|
|
|
54
|
+
allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
|
|
55
|
+
bodies.each_with_index do |body, index|
|
|
56
|
+
allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
formatter.export_to('whatever')
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it { expect(RubyXL::Workbook).to(have_received(:new)) }
|
|
63
|
+
it { expect(workbook).to(have_received(:worksheets)) }
|
|
64
|
+
|
|
65
|
+
COLUMN_METHODS.each do |method|
|
|
66
|
+
it { expect(header).to(have_received(method).with(no_args)) }
|
|
67
|
+
|
|
68
|
+
2.times do |index|
|
|
69
|
+
it { expect(bodies[index]).to(have_received(method).with(no_args)) }
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
COLUMN_METHODS.each_with_index do |method, index|
|
|
74
|
+
it { expect(worksheet).to(have_received(:add_cell).with(0, index, "#{method} header")) }
|
|
75
|
+
it { expect(worksheet).to(have_received(:add_cell).with(1, index, "#{method} def0 body")) }
|
|
76
|
+
it { expect(worksheet).to(have_received(:add_cell).with(2, index, "#{method} def1 body")) }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it { expect(workbook).to(have_received(:write).with('whatever')) }
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|