defmastership 1.3.2 → 1.3.3

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +2 -5
  3. data/config/mutant.yml +2 -1
  4. data/config/rubocop.yml +20 -8
  5. data/defmastership.gemspec +4 -14
  6. data/features/changeref.feature +78 -0
  7. data/features/definition_checksum.feature +118 -0
  8. data/features/definition_version.feature +168 -0
  9. data/features/export.feature +67 -22
  10. data/features/external_ref_checksum.feature +169 -0
  11. data/features/external_ref_version.feature +173 -0
  12. data/features/internal_ref_checksum.feature +77 -0
  13. data/features/internal_ref_version.feature +81 -0
  14. data/features/rename_included_files.feature +28 -0
  15. data/lib/defmastership/app.rb +5 -6
  16. data/lib/defmastership/comment_filter.rb +2 -0
  17. data/lib/defmastership/def_type_list.rb +25 -0
  18. data/lib/defmastership/definition_parser.rb +2 -6
  19. data/lib/defmastership/document.rb +6 -9
  20. data/lib/defmastership/modifier/change_ref.rb +11 -34
  21. data/lib/defmastership/modifier/factory.rb +5 -1
  22. data/lib/defmastership/modifier/rename_included_files.rb +9 -0
  23. data/lib/defmastership/modifier/replacement_formatter.rb +37 -0
  24. data/lib/defmastership/modifier/update_def.rb +5 -1
  25. data/lib/defmastership/modifier/update_eref_checksum.rb +46 -0
  26. data/lib/defmastership/modifier/update_eref_common.rb +77 -0
  27. data/lib/defmastership/modifier/update_eref_version.rb +46 -0
  28. data/lib/defmastership/modifier/update_iref_checksum.rb +51 -0
  29. data/lib/defmastership/modifier/update_iref_common.rb +45 -0
  30. data/lib/defmastership/modifier/update_iref_version.rb +58 -0
  31. data/lib/defmastership/version.rb +1 -1
  32. data/spec/spec_helper.rb +11 -10
  33. data/spec/unit/defmastership/app_spec.rb +32 -19
  34. data/spec/unit/defmastership/batch_modifier_spec.rb +9 -7
  35. data/spec/unit/defmastership/def_type_list_spec.rb +22 -0
  36. data/spec/unit/defmastership/definition_spec.rb +8 -51
  37. data/spec/unit/defmastership/document_spec.rb +12 -36
  38. data/spec/unit/defmastership/export/body_formatter_spec.rb +5 -18
  39. data/spec/unit/defmastership/export/csv/formatter_spec.rb +1 -0
  40. data/spec/unit/defmastership/export/header_formatter_spec.rb +2 -6
  41. data/spec/unit/defmastership/hash_spec.rb +2 -0
  42. data/spec/unit/defmastership/modifier/change_ref_spec.rb +33 -70
  43. data/spec/unit/defmastership/modifier/factory_spec.rb +40 -17
  44. data/spec/unit/defmastership/modifier/modifier_common_spec.rb +2 -0
  45. data/spec/unit/defmastership/modifier/rename_included_files_spec.rb +62 -46
  46. data/spec/unit/defmastership/modifier/update_def_checksum_spec.rb +2 -9
  47. data/spec/unit/defmastership/modifier/update_def_spec.rb +76 -21
  48. data/spec/unit/defmastership/modifier/update_def_version_spec.rb +6 -32
  49. data/spec/unit/defmastership/modifier/update_eref_checksum_spec.rb +200 -0
  50. data/spec/unit/defmastership/modifier/update_eref_version_spec.rb +215 -0
  51. data/spec/unit/defmastership/modifier/update_iref_checksum_spec.rb +133 -0
  52. data/spec/unit/defmastership/modifier/update_iref_version_spec.rb +162 -0
  53. data/tasks/code_quality.rake +1 -8
  54. data/tasks/test.rake +15 -0
  55. metadata +34 -3
@@ -12,6 +12,7 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
12
12
  it { is_expected.to(have_attributes(from_regexp: '')) }
13
13
  it { is_expected.to(have_attributes(to_template: '')) }
14
14
  it { is_expected.to(have_attributes(next_ref: 0)) }
15
+ it { is_expected.to(have_attributes(config: { def_type: '', from_regexp: '', to_template: '', next_ref: 0 })) }
15
16
  end
16
17
 
17
18
  describe '.replacement_methods' do
@@ -21,29 +22,13 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
21
22
  end
22
23
  end
23
24
 
24
- describe '#config' do
25
- context 'when not initalized' do
26
- it do
27
- expect(refchanger.config).to(
28
- include(from_regexp: '', to_template: '', next_ref: 0)
29
- )
30
- end
31
- end
32
- end
33
-
34
25
  describe '#replace_refdef' do
35
26
  context 'when really simple rule' do
36
- subject(:refchanger) do
37
- described_class.new(
38
- from_regexp: 'TEMP',
39
- to_template: 'TUTU'
40
- )
41
- end
27
+ subject(:refchanger) { described_class.new(from_regexp: 'TEMP', to_template: 'TUTU') }
42
28
 
43
29
  context 'when valid definition' do
44
30
  it do
45
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
46
- .to(eq('[define, whatever, TUTU]'))
31
+ expect(refchanger.replace_refdef('[define, whatever, TEMP]')).to(eq('[define, whatever, TUTU]'))
47
32
  end
48
33
 
49
34
  it do
@@ -56,32 +41,23 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
56
41
  .to(eq('[define, whatever, TUTU(~12345678)]'))
57
42
  end
58
43
 
59
- it do
60
- expect(refchanger.replace_refdef('[define, whatever, TEMP(a)]'))
61
- .to(eq('[define, whatever, TUTU(a)]'))
62
- end
44
+ it { expect(refchanger.replace_refdef('[define, whatever, TEMP(a)]')).to(eq('[define, whatever, TUTU(a)]')) }
63
45
  end
64
46
 
65
47
  context 'when no valid definition' do
66
48
  it do
67
- expect(refchanger.replace_refdef('[pouet, whatever, TEMP]'))
68
- .to(eq('[pouet, whatever, TEMP]'))
49
+ expect(refchanger.replace_refdef('[pouet, whatever, TEMP]')).to(eq('[pouet, whatever, TEMP]'))
69
50
  end
70
51
  end
71
52
  end
72
53
 
73
54
  context 'when template is variable' do
74
55
  subject(:refchanger) do
75
- described_class.new(
76
- from_regexp: 'TEMP',
77
- to_template: 'TOTO-%<next_ref>04d',
78
- next_ref: 124
79
- )
56
+ described_class.new(from_regexp: 'TEMP', to_template: 'TOTO-%<next_ref>04d', next_ref: 124)
80
57
  end
81
58
 
82
59
  it do
83
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
84
- .to(eq('[define, whatever, TOTO-0124]'))
60
+ expect(refchanger.replace_refdef('[define, whatever, TEMP]')).to(eq('[define, whatever, TOTO-0124]'))
85
61
  end
86
62
 
87
63
  it do
@@ -99,15 +75,11 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
99
75
  )
100
76
  end
101
77
 
102
- it do
103
- expect(refchanger.replace_refdef('[define, whatever, TOTO-TEMP]'))
104
- .to(eq('[define, whatever, TOTO-0132]'))
105
- end
78
+ it { expect(refchanger.replace_refdef('[define, whatever, TOTO-TEMP]')).to(eq('[define, whatever, TOTO-0132]')) }
106
79
 
107
80
  it do
108
81
  refchanger.replace_refdef('[define, whatever, TOTO-TEMP]')
109
- expect(refchanger.replace_refdef('[define, whatever, TITI-TEMP]'))
110
- .to(eq('[define, whatever, TITI-0133]'))
82
+ expect(refchanger.replace_refdef('[define, whatever, TITI-TEMP]')).to(eq('[define, whatever, TITI-0133]'))
111
83
  end
112
84
 
113
85
  it do
@@ -118,29 +90,18 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
118
90
  end
119
91
 
120
92
  context 'when definition is in literal block' do
121
- subject(:refchanger) do
122
- described_class.new(
123
- from_regexp: 'TEMP',
124
- to_template: 'TUTU'
125
- )
126
- end
93
+ subject(:refchanger) { described_class.new(from_regexp: 'TEMP', to_template: 'TUTU') }
127
94
 
128
95
  before do
129
96
  refchanger.replace_refdef('....')
130
97
  end
131
98
 
132
- it do
133
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
134
- .to(eq('[define, whatever, TEMP]'))
135
- end
99
+ it { expect(refchanger.replace_refdef('[define, whatever, TEMP]')).to(eq('[define, whatever, TEMP]')) }
136
100
  end
137
101
 
138
- context 'when defintion is after literal block' do
102
+ context 'when definition is after literal block' do
139
103
  subject(:refchanger) do
140
- described_class.new(
141
- from_regexp: 'TEMP',
142
- to_template: 'TUTU'
143
- )
104
+ described_class.new(from_regexp: 'TEMP', to_template: 'TUTU')
144
105
  end
145
106
 
146
107
  before do
@@ -149,10 +110,22 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
149
110
  refchanger.replace_refdef("....\n")
150
111
  end
151
112
 
152
- it do
153
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
154
- .to(eq('[define, whatever, TUTU]'))
155
- end
113
+ it { expect(refchanger.replace_refdef('[define, whatever, TEMP]')).to(eq('[define, whatever, TUTU]')) }
114
+ end
115
+
116
+ context 'when definition do no fit with a definition\'s type value' do
117
+ subject(:refchanger) { described_class.new(def_type: 'req', from_regexp: 'TEMP', to_template: 'TUTU') }
118
+
119
+ it { expect(refchanger.replace_refdef('[define, whatever, TEMP]')).to(eq('[define, whatever, TEMP]')) }
120
+ it { expect(refchanger.replace_refdef('[define, req, TEMP]')).to(eq('[define, req, TUTU]')) }
121
+ end
122
+
123
+ context 'when definition do no fit with a definition\'s type list' do
124
+ subject(:refchanger) { described_class.new(def_type: %w[req pouet], from_regexp: 'TEMP', to_template: 'TUTU') }
125
+
126
+ it { expect(refchanger.replace_refdef('[define, whatever, TEMP]')).to(eq('[define, whatever, TEMP]')) }
127
+ it { expect(refchanger.replace_refdef('[define, req, TEMP]')).to(eq('[define, req, TUTU]')) }
128
+ it { expect(refchanger.replace_refdef('[define, pouet, TEMP]')).to(eq('[define, pouet, TUTU]')) }
156
129
  end
157
130
  end
158
131
 
@@ -170,15 +143,8 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
170
143
  refchanger.replace_refdef('[define, whatever, TITI-TEMP421]')
171
144
  end
172
145
 
173
- it do
174
- expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP1234]'))
175
- .to(eq('defs:iref[TOTO-TEMP1234]'))
176
- end
177
-
178
- it do
179
- expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP123]'))
180
- .to(eq('defs:iref[TOTO-0132]'))
181
- end
146
+ it { expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP1234]')).to(eq('defs:iref[TOTO-TEMP1234]')) }
147
+ it { expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP123]')).to(eq('defs:iref[TOTO-0132]')) }
182
148
 
183
149
  it do
184
150
  expect(
@@ -225,8 +191,7 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
225
191
  ['tag=!TITI-TEMP421;TOTO-TEMP123', 'tag=!TITI-0133;TOTO-0132']
226
192
  ].each do |from, to|
227
193
  it do
228
- expect(refchanger.replace_include_tags("include::path/target[#{from}]"))
229
- .to(eq("include::path/target[#{to}]"))
194
+ expect(refchanger.replace_include_tags("include::path/target[#{from}]")).to(eq("include::path/target[#{to}]"))
230
195
  end
231
196
  end
232
197
 
@@ -297,9 +262,7 @@ MIF
297
262
  it { expect(File).to(have_received(:readlines).with('path/target')) }
298
263
 
299
264
  it do
300
- expect(File).to(
301
- have_received(:writelines).with('path/target', mofified_included_file.split)
302
- )
265
+ expect(File).to(have_received(:writelines).with('path/target', mofified_included_file.split))
303
266
  end
304
267
 
305
268
  it { expect(File).not_to(have_received(:readlines).with('otherpath/othertarget')) }
@@ -14,32 +14,55 @@ module Defmastership
14
14
  class TuTu
15
15
  include ModifierCommon
16
16
  end
17
+
18
+ # Modifier example
19
+ class Nono
20
+ include ModifierCommon
21
+ end
17
22
  end
18
23
  end
19
24
 
20
25
  RSpec.describe(Defmastership::Modifier::Factory) do
21
26
  describe('.from_config') do
22
- let(:toto) { instance_double(Defmastership::Modifier::Toto, 'toto') }
23
- let(:toto_config) { { type: 'toto', config: { p: 'whatever' } } }
24
- let(:tutu) { instance_double(Defmastership::Modifier::TuTu, 'tutu') }
25
- let(:tutu_config) { { type: 'tu_tu', config: { p: 'whatever' } } }
26
-
27
- before do
28
- allow(Defmastership::Modifier::Toto).to(receive(:new).with(toto_config[:config]).and_return(toto))
29
- allow(Defmastership::Modifier::TuTu).to(receive(:new).with(tutu_config[:config]).and_return(tutu))
30
- end
27
+ context 'when :config is not empty' do
28
+ let(:toto) { instance_double(Defmastership::Modifier::Toto, 'toto') }
29
+ let(:toto_config) { { type: 'toto', config: { p: 'whatever' } } }
30
+ let(:tutu) { instance_double(Defmastership::Modifier::TuTu, 'tutu') }
31
+ let(:tutu_config) { { type: 'tu_tu', config: { p: 'whatever' } } }
31
32
 
32
- it { expect(described_class.from_config(toto_config)).to(be(toto)) }
33
- it { expect(described_class.from_config(tutu_config)).to(be(tutu)) }
33
+ before do
34
+ allow(Defmastership::Modifier::Toto).to(receive(:new).and_return(toto))
35
+ allow(Defmastership::Modifier::TuTu).to(receive(:new).and_return(tutu))
36
+ end
34
37
 
35
- it do
36
- described_class.from_config(toto_config)
37
- expect(Defmastership::Modifier::Toto).to(have_received(:new).with(toto_config[:config]))
38
+ it { expect(described_class.from_config(toto_config)).to(be(toto)) }
39
+ it { expect(described_class.from_config(tutu_config)).to(be(tutu)) }
40
+
41
+ it do
42
+ described_class.from_config(toto_config)
43
+ expect(Defmastership::Modifier::Toto).to(have_received(:new).with(toto_config[:config]))
44
+ end
45
+
46
+ it do
47
+ described_class.from_config(tutu_config)
48
+ expect(Defmastership::Modifier::TuTu).to(have_received(:new).with(tutu_config[:config]))
49
+ end
38
50
  end
39
51
 
40
- it do
41
- described_class.from_config(tutu_config)
42
- expect(Defmastership::Modifier::TuTu).to(have_received(:new).with(tutu_config[:config]))
52
+ context 'when :config is empty' do
53
+ let(:nono) { instance_double(Defmastership::Modifier::Nono, 'nono') }
54
+ let(:nono_config) { { type: 'nono' } }
55
+
56
+ before do
57
+ allow(Defmastership::Modifier::Nono).to(receive(:new).and_return(nono))
58
+ end
59
+
60
+ it { expect(described_class.from_config(nono_config)).to(be(nono)) }
61
+
62
+ it do
63
+ described_class.from_config(nono_config)
64
+ expect(Defmastership::Modifier::Nono).to(have_received(:new).with({}))
65
+ end
43
66
  end
44
67
  end
45
68
  end
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2023 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
+ require('defmastership/modifier/modifier_common')
5
+
4
6
  # just a class for test
5
7
  class DummyClassParent
6
8
  # This method smells of :reek:ControlParameter
@@ -24,12 +24,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
24
24
 
25
25
  describe '#replace' do
26
26
  context 'when NOT valid include' do
27
- subject(:includeschanger) do
28
- described_class.new(
29
- from_regexp: 'orig',
30
- to_template: 'dest'
31
- )
32
- end
27
+ subject(:includeschanger) { described_class.new(from_regexp: 'orig', to_template: 'dest') }
33
28
 
34
29
  before do
35
30
  allow(File).to(receive(:rename))
@@ -42,10 +37,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
42
37
  end
43
38
  end
44
39
 
45
- it do
46
- expect(includeschanger.replace('badinclude::orig[]'))
47
- .to(eq('badinclude::orig[]'))
48
- end
40
+ it { expect(includeschanger.replace('badinclude::orig[]')).to(eq('badinclude::orig[]')) }
49
41
 
50
42
  it do
51
43
  includeschanger.replace('badinclude::orig[]')
@@ -60,10 +52,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
60
52
  end
61
53
  end
62
54
 
63
- it do
64
- expect(includeschanger.replace('include::orig[]'))
65
- .to(eq('include::orig[]'))
66
- end
55
+ it { expect(includeschanger.replace('include::orig[]')).to(eq('include::orig[]')) }
67
56
 
68
57
  it do
69
58
  includeschanger.replace('include::orig[]')
@@ -77,19 +66,12 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
77
66
  includeschanger.replace('--')
78
67
  end
79
68
 
80
- it do
81
- expect(includeschanger.replace('// include::orig[]'))
82
- .to(eq('// include::orig[]'))
83
- end
69
+ it { expect(includeschanger.replace('// include::orig[]')).to(eq('// include::orig[]')) }
84
70
  end
85
71
 
86
72
  context 'when the cancel regexp is met' do
87
73
  subject(:includeschanger) do
88
- described_class.new(
89
- from_regexp: 'orig',
90
- cancel_if_match: 'orig',
91
- to_template: 'dest'
92
- )
74
+ described_class.new(from_regexp: 'orig', cancel_if_match: 'orig', to_template: 'dest')
93
75
  end
94
76
 
95
77
  before do
@@ -97,10 +79,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
97
79
  includeschanger.replace('--')
98
80
  end
99
81
 
100
- it do
101
- expect(includeschanger.replace("include::orig[]\n"))
102
- .to(eq("include::orig[]\n"))
103
- end
82
+ it { expect(includeschanger.replace("include::orig[]\n")).to(eq("include::orig[]\n")) }
104
83
  end
105
84
  end
106
85
 
@@ -111,11 +90,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
111
90
 
112
91
  context 'when really simple rule' do
113
92
  subject(:includeschanger) do
114
- described_class.new(
115
- from_regexp: 'orig',
116
- cancel_if_match: '_no_cancel_',
117
- to_template: 'dest'
118
- )
93
+ described_class.new(from_regexp: 'orig', cancel_if_match: '_no_cancel_', to_template: 'dest')
119
94
  end
120
95
 
121
96
  before do
@@ -166,10 +141,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
166
141
 
167
142
  context 'when complex from_regexp' do
168
143
  subject(:includeschanger) do
169
- described_class.new(
170
- from_regexp: '(?<origin>.*\.extension)',
171
- to_template: '%<reference>s_%<origin>s'
172
- )
144
+ described_class.new(from_regexp: '(?<origin>.*\.extension)', to_template: '%<reference>s_%<origin>s')
173
145
  end
174
146
 
175
147
  before do
@@ -194,12 +166,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
194
166
  end
195
167
 
196
168
  context 'when path with variable' do
197
- subject(:includeschanger) do
198
- described_class.new(
199
- from_regexp: 'orig',
200
- to_template: 'dest'
201
- )
202
- end
169
+ subject(:includeschanger) { described_class.new(from_regexp: 'orig', to_template: 'dest') }
203
170
 
204
171
  before do
205
172
  includeschanger.replace(':any: one')
@@ -209,10 +176,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
209
176
  includeschanger.replace('--')
210
177
  end
211
178
 
212
- it do
213
- expect(includeschanger.replace('include::{any}/orig[]'))
214
- .to(eq('include::{any}/dest[]'))
215
- end
179
+ it { expect(includeschanger.replace('include::{any}/orig[]')).to(eq('include::{any}/dest[]')) }
216
180
 
217
181
  it do
218
182
  includeschanger.replace('include::{any}{var}/orig[]')
@@ -234,6 +198,58 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
234
198
  expect(includeschanger).to(have_attributes(changes: [%w[one_two/orig one_two/dest]]))
235
199
  end
236
200
  end
201
+
202
+ context 'when definition\'s type does not fit a value' do
203
+ subject(:includeschanger) do
204
+ described_class.new(def_type: 'requirement', from_regexp: 'orig', to_template: 'dest')
205
+ end
206
+
207
+ it do
208
+ includeschanger.replace('[define,whatever,REFERENCE]')
209
+ includeschanger.replace('--')
210
+ expect(includeschanger.replace("include::orig[]\n"))
211
+ .to(eq("include::orig[]\n"))
212
+ end
213
+
214
+ it do
215
+ includeschanger.replace('[define,requirement,REFERENCE]')
216
+ includeschanger.replace('--')
217
+ expect(includeschanger.replace("include::orig[]\n"))
218
+ .to(eq("include::dest[]\n"))
219
+ end
220
+ end
221
+
222
+ context 'when definition\'s type is not included in a list' do
223
+ subject(:includeschanger) do
224
+ described_class.new(def_type: %w[requirement pouet], from_regexp: 'orig', to_template: 'dest')
225
+ end
226
+
227
+ it do
228
+ expect(includeschanger.replace("include::orig[]\n"))
229
+ .to(eq("include::orig[]\n"))
230
+ end
231
+
232
+ it do
233
+ includeschanger.replace('[define,whatever,REFERENCE]')
234
+ includeschanger.replace('--')
235
+ expect(includeschanger.replace("include::orig[]\n"))
236
+ .to(eq("include::orig[]\n"))
237
+ end
238
+
239
+ it do
240
+ includeschanger.replace('[define,requirement,REFERENCE]')
241
+ includeschanger.replace('--')
242
+ expect(includeschanger.replace("include::orig[]\n"))
243
+ .to(eq("include::dest[]\n"))
244
+ end
245
+
246
+ it do
247
+ includeschanger.replace('[define,pouet,REFERENCE]')
248
+ includeschanger.replace('--')
249
+ expect(includeschanger.replace("include::orig[]\n"))
250
+ .to(eq("include::dest[]\n"))
251
+ end
252
+ end
237
253
  end
238
254
  end
239
255
  end
@@ -55,11 +55,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefChecksum) do
55
55
  end
56
56
 
57
57
  describe '#replace' do
58
- subject(:modifier) do
59
- described_class.new(
60
- def_type: 'requirement'
61
- )
62
- end
58
+ subject(:modifier) { described_class.new(def_type: 'requirement') }
63
59
 
64
60
  let(:definition) { instance_double(Defmastership::Definition, 'definition') }
65
61
  let(:document) { instance_double(Defmastership::Document, 'document') }
@@ -70,10 +66,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefChecksum) do
70
66
  end
71
67
 
72
68
  context 'when definition has not the good type' do
73
- it do
74
- expect(modifier.replace_reference('[define,req,REFERENCE]'))
75
- .to(eq('[define,req,REFERENCE]'))
76
- end
69
+ it { expect(modifier.replace_reference('[define,req,REFERENCE]')).to(eq('[define,req,REFERENCE]')) }
77
70
  end
78
71
 
79
72
  context 'when definition has the good type' do
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2020 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
+ require('defmastership/modifier/update_def')
5
+
4
6
  module Defmastership
5
7
  module Modifier
6
8
  # Just a class for tests
@@ -60,19 +62,10 @@ RSpec.describe(Defmastership::Modifier::UpdateDef) do
60
62
  )
61
63
  end
62
64
 
63
- it do
64
- expect(modifier.do_modifications(adoc_sources).fetch('file1.adoc'))
65
- .to(include('REFERENCE_something_'))
66
- end
65
+ it { expect(modifier.do_modifications(adoc_sources).fetch('file1.adoc')).to(include('REFERENCE_something_')) }
67
66
  end
68
67
 
69
68
  describe '#replace_reference' do
70
- subject(:modifier) do
71
- Defmastership::Modifier::ConcreteRef.new(
72
- def_type: 'requirement'
73
- )
74
- end
75
-
76
69
  let(:definition) { instance_double(Defmastership::Definition, 'definition') }
77
70
  let(:document) { instance_double(Defmastership::Document, 'document') }
78
71
  let(:definitions) { { 'REFERENCE' => definition } }
@@ -81,21 +74,45 @@ RSpec.describe(Defmastership::Modifier::UpdateDef) do
81
74
  allow(File).to(receive(:rename))
82
75
  end
83
76
 
84
- context 'when line do not match' do
77
+ context 'when def_type is not specified' do
78
+ subject(:modifier) do
79
+ Defmastership::Modifier::ConcreteRef.new(def_type: '')
80
+ end
81
+
82
+ before do
83
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
84
+ allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
85
+ allow(definition).to(receive(:sha256_short).and_return('~abcd1234'))
86
+ end
87
+
85
88
  it do
86
- expect(modifier.replace_reference('[define---,req,REFERENCE(abcd)]'))
87
- .to(eq('[define---,req,REFERENCE(abcd)]'))
89
+ expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd)]'))
90
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
88
91
  end
89
92
  end
90
93
 
91
- context 'when definition has not the good type' do
94
+ context 'when def_type is \'all\'' do
95
+ subject(:modifier) do
96
+ Defmastership::Modifier::ConcreteRef.new(def_type: 'all')
97
+ end
98
+
99
+ before do
100
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
101
+ allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
102
+ allow(definition).to(receive(:sha256_short).and_return('~abcd1234'))
103
+ end
104
+
92
105
  it do
93
- expect(modifier.replace_reference('[define,req,REFERENCE(abcd)]'))
94
- .to(eq('[define,req,REFERENCE(abcd)]'))
106
+ expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd)]'))
107
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
95
108
  end
96
109
  end
97
110
 
98
- context 'when definition has the good type' do
111
+ context 'when def_type is a list' do
112
+ subject(:modifier) do
113
+ Defmastership::Modifier::ConcreteRef.new(def_type: %w[requirement pouet])
114
+ end
115
+
99
116
  before do
100
117
  allow(Defmastership::Document).to(receive(:new).and_return(document))
101
118
  allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
@@ -108,13 +125,51 @@ RSpec.describe(Defmastership::Modifier::UpdateDef) do
108
125
  end
109
126
 
110
127
  it do
111
- expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd~bad)]'))
112
- .to(eq('[define,requirement,REFERENCE_something_abcd]'))
128
+ expect(modifier.replace_reference('[define,pouet,REFERENCE(abcd)]'))
129
+ .to(eq('[define,pouet,REFERENCE_something_abcd]'))
113
130
  end
114
131
 
115
132
  it do
116
- expect(modifier.replace_reference('// [define,requirement,REFERENCE(abcd~bad)]'))
117
- .to(eq('// [define,requirement,REFERENCE(abcd~bad)]'))
133
+ expect(modifier.replace_reference('[define,whatever,REFERENCE(abcd)]'))
134
+ .to(eq('[define,whatever,REFERENCE(abcd)]'))
135
+ end
136
+ end
137
+
138
+ context 'when modifier is specific' do
139
+ subject(:modifier) { Defmastership::Modifier::ConcreteRef.new(def_type: 'requirement') }
140
+
141
+ context 'when line do not match' do
142
+ it do
143
+ expect(modifier.replace_reference('[define---,req,REFERENCE(abcd)]'))
144
+ .to(eq('[define---,req,REFERENCE(abcd)]'))
145
+ end
146
+ end
147
+
148
+ context 'when definition has not the good type' do
149
+ it { expect(modifier.replace_reference('[define,req,REFERENCE(abcd)]')).to(eq('[define,req,REFERENCE(abcd)]')) }
150
+ end
151
+
152
+ context 'when definition has the good type' do
153
+ before do
154
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
155
+ allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
156
+ allow(definition).to(receive(:sha256_short).and_return('~abcd1234'))
157
+ end
158
+
159
+ it do
160
+ expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd)]'))
161
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
162
+ end
163
+
164
+ it do
165
+ expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd~bad)]'))
166
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
167
+ end
168
+
169
+ it do
170
+ expect(modifier.replace_reference('// [define,requirement,REFERENCE(abcd~bad)]'))
171
+ .to(eq('// [define,requirement,REFERENCE(abcd~bad)]'))
172
+ end
118
173
  end
119
174
  end
120
175
  end