defmastership 1.0.17 → 1.0.19

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitlab-ci.yml +37 -11
  4. data/Gemfile +71 -1
  5. data/Guardfile +44 -0
  6. data/Rakefile +16 -61
  7. data/bin/defmastership +9 -6
  8. data/config/cucumber.yml +3 -0
  9. data/config/mutant.yml +27 -3
  10. data/config/reek.yml +129 -105
  11. data/config/rubocop.yml +72 -28
  12. data/defmastership.gemspec +5 -13
  13. data/features/changeref.feature +0 -8
  14. data/features/definition_checksum.feature +30 -10
  15. data/features/definition_version.feature +168 -10
  16. data/features/export.feature +64 -17
  17. data/features/modify.feature +1 -5
  18. data/features/rename_included_files.feature +27 -4
  19. data/features/step_definitions/git_steps.rb +19 -0
  20. data/lib/defmastership/batch_modifier.rb +17 -12
  21. data/lib/defmastership/change_ref_modifier.rb +88 -6
  22. data/lib/defmastership/comment_filter.rb +1 -1
  23. data/lib/defmastership/constants.rb +10 -7
  24. data/lib/defmastership/csv_formatter.rb +16 -12
  25. data/lib/defmastership/csv_formatter_body.rb +18 -15
  26. data/lib/defmastership/csv_formatter_header.rb +1 -1
  27. data/lib/defmastership/definition.rb +59 -20
  28. data/lib/defmastership/document.rb +101 -74
  29. data/lib/defmastership/matching_line.rb +17 -0
  30. data/lib/defmastership/modifier.rb +42 -0
  31. data/lib/defmastership/modifier_factory.rb +12 -0
  32. data/lib/defmastership/parsing_state.rb +15 -9
  33. data/lib/defmastership/rename_included_files_modifier.rb +172 -5
  34. data/lib/defmastership/set_join_hack.rb +11 -0
  35. data/lib/defmastership/update_def_checksum_modifier.rb +8 -13
  36. data/lib/defmastership/update_def_modifier.rb +49 -0
  37. data/lib/defmastership/update_def_version_modifier.rb +81 -15
  38. data/lib/defmastership/version.rb +1 -1
  39. data/lib/defmastership.rb +1 -6
  40. data/spec/spec_helper.rb +3 -1
  41. data/spec/unit/def_mastership/batch_modifier_spec.rb +40 -36
  42. data/spec/unit/def_mastership/change_ref_modifier_spec.rb +196 -51
  43. data/spec/unit/def_mastership/csv_formatter_body_spec.rb +60 -31
  44. data/spec/unit/def_mastership/csv_formatter_header_spec.rb +1 -1
  45. data/spec/unit/def_mastership/csv_formatter_spec.rb +79 -87
  46. data/spec/unit/def_mastership/definition_parser_spec.rb +1 -1
  47. data/spec/unit/def_mastership/definition_spec.rb +16 -6
  48. data/spec/unit/def_mastership/document_spec.rb +81 -38
  49. data/spec/unit/def_mastership/matching_line_spec.rb +37 -0
  50. data/spec/unit/def_mastership/modifier_factory_spec.rb +38 -0
  51. data/spec/unit/def_mastership/modifier_spec.rb +85 -0
  52. data/spec/unit/def_mastership/parsing_state_spec.rb +1 -1
  53. data/spec/unit/def_mastership/rename_included_files_modifier_spec.rb +219 -47
  54. data/spec/unit/def_mastership/string_spec.rb +1 -1
  55. data/spec/unit/def_mastership/update_def_checksum_modifier_spec.rb +82 -50
  56. data/spec/unit/def_mastership/update_def_modifier_spec.rb +121 -0
  57. data/spec/unit/def_mastership/update_def_version_modifier_spec.rb +327 -56
  58. data/tasks/code_quality.rake +74 -0
  59. data/tasks/console.rake +8 -0
  60. data/tasks/package.task +9 -0
  61. data/tasks/test.rake +30 -0
  62. metadata +33 -145
  63. data/.rubocop.yml +0 -76
  64. data/config/devtools.yml +0 -2
  65. data/config/flay.yml +0 -3
  66. data/config/flog.yml +0 -2
  67. data/config/yardstick.yml +0 -2
  68. data/cucumber.yml +0 -2
  69. data/lib/defmastership/change_ref_line_modifier.rb +0 -85
  70. data/lib/defmastership/line_modifier_base.rb +0 -29
  71. data/lib/defmastership/modifier_base.rb +0 -36
  72. data/lib/defmastership/rename_included_files_line_modifier.rb +0 -126
  73. data/lib/defmastership/update_def_checksum_line_modifier.rb +0 -38
  74. data/lib/defmastership/update_def_version_line_modifier.rb +0 -58
  75. data/spec/unit/def_mastership/change_ref_line_modifier_spec.rb +0 -250
  76. data/spec/unit/def_mastership/rename_included_files_line_modifier_spec.rb +0 -207
  77. data/spec/unit/def_mastership/update_def_checksum_line_modifier_spec.rb +0 -82
  78. data/spec/unit/def_mastership/update_def_version_line_modifier_spec.rb +0 -131
  79. /data/{.rspec → config/rspec} +0 -0
@@ -1,38 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- module DefMastership
5
- # modify one line after another
6
- class UpdateDefChecksumLineModifier < LineModifierBase
7
- attr_accessor :document
8
-
9
- def self.from_config(hash)
10
- new.from_config(hash)
11
- end
12
-
13
- def initialize
14
- super
15
- @config = {
16
- def_type: ''
17
- }
18
- end
19
-
20
- def replace(line)
21
- match = matched?(line)
22
-
23
- return line unless match
24
- return line unless match[:type] == def_type
25
-
26
- line.gsub(Regexp.new("#{match[:reference]}#{DMRegexp::DEF_VERSION_AND_CHECKSUM}")) do
27
- "#{match[:reference]}(#{match[:explicit_version]}#{@document.ref_to_def(match[:reference]).sha256})"
28
- end
29
- end
30
-
31
- def matched?(line)
32
- return if line.commented?
33
- return unless line =~ DMRegexp::DEFINITION
34
-
35
- Regexp.last_match
36
- end
37
- end
38
- end
@@ -1,58 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- module DefMastership
5
- # modify one line after another
6
- class UpdateDefVersionLineModifier < LineModifierBase
7
- attr_accessor :document, :ref_document
8
-
9
- def self.from_config(hash)
10
- new.from_config(hash)
11
- end
12
-
13
- def initialize
14
- super
15
- @config = {
16
- def_type: '',
17
- ref_document: '',
18
- first_version: ''
19
- }
20
- end
21
-
22
- def replace(line)
23
- match = matched?(line)
24
-
25
- return line unless match
26
- return line unless match[:type] == def_type
27
-
28
- version_and_checksum = ''
29
- if match[:explicit_checksum] || version_string(match)
30
- version_and_checksum = "(#{version_string(match)}#{match[:explicit_checksum]})"
31
- end
32
-
33
- line.gsub(Regexp.new("#{match[:reference]}#{DMRegexp::DEF_VERSION_AND_CHECKSUM}")) do
34
- "#{match[:reference]}#{version_and_checksum}"
35
- end
36
- end
37
-
38
- private
39
-
40
- def matched?(line)
41
- return if line.commented?
42
- return unless line =~ DMRegexp::DEFINITION
43
-
44
- Regexp.last_match
45
- end
46
-
47
- def version_string(match)
48
- ref_definition = @ref_document.ref_to_def(match[:reference])
49
- definition = @document.ref_to_def(match[:reference])
50
-
51
- return if ref_definition.nil?
52
- return ref_definition.explicit_version if definition.sha256 == ref_definition.sha256
53
-
54
- ref_version = @ref_document.ref_to_def(match[:reference]).explicit_version
55
- ref_version.nil? ? @config[:first_version] : ref_version.next
56
- end
57
- end
58
- end
@@ -1,250 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::ChangeRefLineModifier) do
7
- subject(:refchanger) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be_nil) }
11
- it { is_expected.to(have_attributes(from_regexp: '')) }
12
- it { is_expected.to(have_attributes(to_template: '')) }
13
- it { is_expected.to(have_attributes(next_ref: 0)) }
14
- it { is_expected.to(have_attributes(changes: [])) }
15
-
16
- it do
17
- expect { refchanger.user_defined_attribute }
18
- .to(raise_error(NoMethodError))
19
- end
20
- end
21
-
22
- describe '.from_config' do
23
- subject(:refchanger) do
24
- described_class.from_config(
25
- from_regexp: 'Whatever.+',
26
- to_template: 'Whatever',
27
- next_ref: 17
28
- )
29
- end
30
-
31
- it { is_expected.not_to(be_nil) }
32
- it { is_expected.to(have_attributes(from_regexp: 'Whatever.+')) }
33
- it { is_expected.to(have_attributes(to_template: 'Whatever')) }
34
- it { is_expected.to(have_attributes(next_ref: 17)) }
35
- end
36
-
37
- describe '#from_config' do
38
- before do
39
- refchanger.from_config(
40
- from_regexp: 'Whatever.+',
41
- to_template: 'Whatever',
42
- next_ref: 17,
43
- user_defined_attribute: 'Tadaam'
44
- )
45
- end
46
-
47
- it { is_expected.to(have_attributes(from_regexp: 'Whatever.+')) }
48
- it { is_expected.to(have_attributes(to_template: 'Whatever')) }
49
- it { is_expected.to(have_attributes(next_ref: 17)) }
50
- it { is_expected.to(have_attributes(user_defined_attribute: 'Tadaam')) }
51
- end
52
-
53
- describe '#config' do
54
- context 'when not initalized' do
55
- it do
56
- expect(refchanger.config).to(
57
- include(from_regexp: '', to_template: '', next_ref: 0)
58
- )
59
- end
60
- end
61
-
62
- context 'when initalized with additionnal keys' do
63
- before do
64
- refchanger.from_config(
65
- next_ref: 1256,
66
- user_defined_attribute: 'Tadaam'
67
- )
68
- end
69
-
70
- it { expect(refchanger.config).to(include(from_regexp: '')) }
71
- it { expect(refchanger.config).to(include(to_template: '')) }
72
- it { expect(refchanger.config).to(include(next_ref: 1256)) }
73
- it { expect(refchanger.config).to(include(user_defined_attribute: 'Tadaam')) }
74
- end
75
- end
76
-
77
- describe '#replace_def' do
78
- context 'when really simple rule' do
79
- before do
80
- refchanger.from_config(
81
- from_regexp: 'TEMP',
82
- to_template: 'TUTU'
83
- )
84
- end
85
-
86
- context 'when valid definition' do
87
- it do
88
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
89
- .to(eq('[define, whatever, TUTU]'))
90
- end
91
- end
92
-
93
- context 'when no valid definition' do
94
- it do
95
- expect(refchanger.replace_refdef('[pouet, whatever, TEMP]'))
96
- .to(eq('[pouet, whatever, TEMP]'))
97
- end
98
- end
99
- end
100
-
101
- context 'when template is variable' do
102
- before do
103
- refchanger.from_config(
104
- from_regexp: 'TEMP',
105
- to_template: 'TOTO-%<next_ref>04d',
106
- next_ref: 124
107
- )
108
- end
109
-
110
- it do
111
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
112
- .to(eq('[define, whatever, TOTO-0124]'))
113
- end
114
-
115
- it do
116
- refchanger.replace_refdef('[define, whatever, TEMP]')
117
- expect(refchanger).to(have_attributes(next_ref: 125))
118
- end
119
- end
120
-
121
- context 'when capture group in regexp' do
122
- before do
123
- refchanger.from_config(
124
- from_regexp: '(?<cg>TOTO|TITI)-TEMP[\d]*',
125
- to_template: '%<cg>s-%<next_ref>04d',
126
- next_ref: 132
127
- )
128
- end
129
-
130
- it do
131
- expect(refchanger.replace_refdef('[define, whatever, TOTO-TEMP]'))
132
- .to(eq('[define, whatever, TOTO-0132]'))
133
- end
134
-
135
- it do
136
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP]')
137
- expect(refchanger.replace_refdef('[define, whatever, TITI-TEMP]'))
138
- .to(eq('[define, whatever, TITI-0133]'))
139
- end
140
-
141
- it do
142
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP1]')
143
- refchanger.replace_refdef('[define, whatever, TITI-TEMP2]')
144
- expect(refchanger).to(have_attributes(changes: [%w[TOTO-TEMP1 TOTO-0132], %w[TITI-TEMP2 TITI-0133]]))
145
- end
146
- end
147
-
148
- context 'when definition is in literal block' do
149
- before do
150
- refchanger.from_config(
151
- from_regexp: 'TEMP',
152
- to_template: 'TUTU'
153
- )
154
- refchanger.replace_refdef('....')
155
- end
156
-
157
- it do
158
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
159
- .to(eq('[define, whatever, TEMP]'))
160
- end
161
- end
162
-
163
- context 'when defintion is after literal block' do
164
- before do
165
- refchanger.from_config(
166
- from_regexp: 'TEMP',
167
- to_template: 'TUTU'
168
- )
169
- refchanger.replace_refdef("....\n")
170
- refchanger.replace_refdef('[define, whatever, TEMP]')
171
- refchanger.replace_refdef("....\n")
172
- end
173
-
174
- it do
175
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
176
- .to(eq('[define, whatever, TUTU]'))
177
- end
178
- end
179
- end
180
-
181
- describe '#replace_irefs' do
182
- before do
183
- refchanger.from_config(
184
- from_regexp: '(?<cg>TOTO|TITI)-TEMP[\d]*',
185
- to_template: '%<cg>s-%<next_ref>04d',
186
- next_ref: 132
187
- )
188
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP123]')
189
- refchanger.replace_refdef('[define, whatever, TITI-TEMP421]')
190
- end
191
-
192
- it do
193
- expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP1234]'))
194
- .to(eq('defs:iref[TOTO-TEMP1234]'))
195
- end
196
-
197
- it do
198
- expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP123]'))
199
- .to(eq('defs:iref[TOTO-0132]'))
200
- end
201
-
202
- it do
203
- expect(
204
- refchanger.replace_irefs(
205
- 'defs:iref[TOTO-TEMP123] defs:iref[TITI-TEMP421] bla'
206
- )
207
- ).to(eq('defs:iref[TOTO-0132] defs:iref[TITI-0133] bla'))
208
- end
209
- end
210
-
211
- describe '#replace' do
212
- before do
213
- refchanger.from_config(
214
- from_regexp: 'TEMP',
215
- to_template: 'TUTU'
216
- )
217
- end
218
-
219
- it do
220
- expect(refchanger.replace(:refdef, '[define, whatever, TEMP]'))
221
- .to(eq('[define, whatever, TUTU]'))
222
- end
223
-
224
- it do
225
- expect(refchanger.replace(:refdef, '[define, whatever, TEMP(a~12345678)]'))
226
- .to(eq('[define, whatever, TUTU(a~12345678)]'))
227
- end
228
-
229
- it do
230
- expect(refchanger.replace(:refdef, '[define, whatever, TEMP(~12345678)]'))
231
- .to(eq('[define, whatever, TUTU(~12345678)]'))
232
- end
233
-
234
- it do
235
- expect(refchanger.replace(:refdef, '[define, whatever, TEMP(a)]'))
236
- .to(eq('[define, whatever, TUTU(a)]'))
237
- end
238
-
239
- it do
240
- refchanger.replace(:refdef, '[define, whatever, TEMP]')
241
- expect(refchanger.replace(:irefs, 'defs:iref[TEMP]'))
242
- .to(eq('defs:iref[TUTU]'))
243
- end
244
-
245
- it do
246
- expect { refchanger.replace(:pouet, 'whatever') }
247
- .to(raise_error(NoMethodError))
248
- end
249
- end
250
- end
@@ -1,207 +0,0 @@
1
- # Copyright (c) 2021 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::RenameIncludedFilesLineModifier) do
7
- subject(:includeschanger) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be_nil) }
11
- it { is_expected.to(have_attributes(from_regexp: '')) }
12
- it { is_expected.to(have_attributes(to_template: '')) }
13
- it { is_expected.to(have_attributes(changes: [])) }
14
-
15
- it do
16
- expect { includeschanger.user_defined_attribute }
17
- .to(raise_error(NoMethodError))
18
- end
19
- end
20
-
21
- describe '.from_config' do
22
- subject(:includeschanger) do
23
- described_class.from_config(
24
- from_regexp: 'Whatever.+',
25
- to_template: 'Whatever'
26
- )
27
- end
28
-
29
- it { is_expected.not_to(be_nil) }
30
- it { is_expected.to(have_attributes(from_regexp: 'Whatever.+')) }
31
- it { is_expected.to(have_attributes(to_template: 'Whatever')) }
32
- end
33
-
34
- describe '#replace' do
35
- context 'when NOT valid include' do
36
- before do
37
- includeschanger.from_config(
38
- from_regexp: 'orig',
39
- cancel_if_match: 'REF',
40
- to_template: 'dest'
41
- )
42
- allow(File).to(receive(:rename))
43
- end
44
-
45
- context 'when the include statement do not match' do
46
- before do
47
- ['[define,requirement,REFERENCE]', '--'].each do |line|
48
- includeschanger.replace(line)
49
- end
50
- end
51
-
52
- it do
53
- expect(includeschanger.replace('badinclude::orig[]'))
54
- .to(eq('badinclude::orig[]'))
55
- end
56
-
57
- it do
58
- includeschanger.replace('badinclude::orig[]')
59
- expect(includeschanger).to(have_attributes(changes: []))
60
- end
61
- end
62
-
63
- context 'when the include is not in a definition' do
64
- before do
65
- ['[define,requirement,REFERENCE]', '--', 'text', '--'].each do |line|
66
- includeschanger.replace(line)
67
- end
68
- end
69
-
70
- it do
71
- expect(includeschanger.replace('include::orig[]'))
72
- .to(eq('include::orig[]'))
73
- end
74
-
75
- it do
76
- includeschanger.replace('include::orig[]')
77
- expect(includeschanger).to(have_attributes(changes: []))
78
- end
79
- end
80
-
81
- context 'when the cancel regexp is met' do
82
- before do
83
- ['[define,requirement,REFERENCE]', '--'].each do |line|
84
- includeschanger.replace(line)
85
- end
86
- end
87
-
88
- it do
89
- expect(includeschanger.replace('include::REFERENCE_orig[]'))
90
- .to(eq('include::REFERENCE_orig[]'))
91
- end
92
-
93
- it do
94
- includeschanger.replace('include::REFERENCE_orig[]')
95
- expect(includeschanger).to(have_attributes(changes: []))
96
- end
97
- end
98
- end
99
-
100
- context 'when valid include' do
101
- before do
102
- allow(File).to(receive(:rename))
103
- end
104
-
105
- context 'when really simple rule' do
106
- before do
107
- includeschanger.from_config(
108
- from_regexp: 'orig',
109
- cancel_if_match: 'REF',
110
- to_template: 'dest'
111
- )
112
- includeschanger.replace('[define,requirement,REFERENCE]')
113
- includeschanger.replace('--')
114
- end
115
-
116
- it do
117
- expect(includeschanger.replace("include::orig[]\n"))
118
- .to(eq("include::dest[]\n"))
119
- end
120
-
121
- it do
122
- includeschanger.replace("include::orig[]\n")
123
- expect(File).to(have_received(:rename).with('orig', 'dest'))
124
- end
125
-
126
- it do
127
- includeschanger.replace("include::orig[]\n")
128
- expect(includeschanger).to(have_attributes(changes: [%w[orig dest]]))
129
- end
130
-
131
- it do
132
- expect(includeschanger.replace("include::toto/orig[]\n"))
133
- .to(eq("include::toto/dest[]\n"))
134
- end
135
-
136
- it do
137
- includeschanger.replace("include::toto/orig[]\n")
138
- expect(File).to(have_received(:rename).with('toto/orig', 'toto/dest'))
139
- end
140
-
141
- it do
142
- includeschanger.replace("include::toto/orig[]\n")
143
- expect(includeschanger).to(have_attributes(changes: [%w[toto/orig toto/dest]]))
144
- end
145
- end
146
-
147
- context 'when complex from_regexp' do
148
- before do
149
- includeschanger.from_config(
150
- from_regexp: '(?<origin>.*\.extension)',
151
- to_template: '%<reference>s_%<origin>s'
152
- )
153
- includeschanger.replace('[define,requirement,REF]')
154
- end
155
-
156
- it do
157
- expect(includeschanger.replace('include::any_path/one_file.extension[]'))
158
- .to(eq('include::any_path/REF_one_file.extension[]'))
159
- end
160
-
161
- it do
162
- includeschanger.replace('include::any_path/one_file.extension[]')
163
- expect(File).to(have_received(:rename).with('any_path/one_file.extension', 'any_path/REF_one_file.extension'))
164
- end
165
-
166
- it do
167
- changes = [%w[any_path/one_file.extension any_path/REF_one_file.extension]]
168
- includeschanger.replace('include::any_path/one_file.extension[]')
169
- expect(includeschanger).to(have_attributes(changes: changes))
170
- end
171
- end
172
-
173
- context 'when path with variable' do
174
- before do
175
- includeschanger.from_config(
176
- from_regexp: 'orig',
177
- to_template: 'dest'
178
- )
179
- includeschanger.replace(':any: one')
180
- includeschanger.replace(':path: two')
181
- includeschanger.replace('[define,requirement,REFERENCE]')
182
- includeschanger.replace('--')
183
- end
184
-
185
- it do
186
- expect(includeschanger.replace('include::{any}/orig[]'))
187
- .to(eq('include::{any}/dest[]'))
188
- end
189
-
190
- it do
191
- includeschanger.replace('include::{any}/orig[]')
192
- expect(File).to(have_received(:rename).with('one/orig', 'one/dest'))
193
- end
194
-
195
- it do
196
- includeschanger.replace('include::{any}_{path}/orig[]')
197
- expect(File).to(have_received(:rename).with('one_two/orig', 'one_two/dest'))
198
- end
199
-
200
- it do
201
- includeschanger.replace('include::{any}_{path}/orig[]')
202
- expect(includeschanger).to(have_attributes(changes: [%w[one_two/orig one_two/dest]]))
203
- end
204
- end
205
- end
206
- end
207
- end
@@ -1,82 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::UpdateDefChecksumLineModifier) do
7
- subject(:linemodifier) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be_nil) }
11
- it { is_expected.to(have_attributes(def_type: '')) }
12
- it { is_expected.to(have_attributes(changes: [])) }
13
-
14
- it do
15
- expect { linemodifier.user_defined_attribute }
16
- .to(raise_error(NoMethodError))
17
- end
18
- end
19
-
20
- describe '.from_config' do
21
- subject(:linemodifier) do
22
- described_class.from_config(
23
- def_type: 'requirement'
24
- )
25
- end
26
-
27
- it { is_expected.not_to(be_nil) }
28
- it { is_expected.to(have_attributes(def_type: 'requirement')) }
29
- it { is_expected.to(have_attributes(document: nil)) }
30
- end
31
-
32
- describe '#replace' do
33
- subject(:linemodifier) do
34
- described_class.from_config(
35
- def_type: 'requirement'
36
- )
37
- end
38
-
39
- let(:definition) { instance_double(DefMastership::Definition, 'definition') }
40
- let(:document) { instance_double(DefMastership::Document, 'document') }
41
- let(:definitions) { { 'REFERENCE' => definition } }
42
-
43
- before do
44
- linemodifier.document = document
45
- allow(File).to(receive(:rename))
46
- end
47
-
48
- context 'when definition has not the good type' do
49
- it do
50
- expect(linemodifier.replace('[define,req,REFERENCE]'))
51
- .to(eq('[define,req,REFERENCE]'))
52
- end
53
- end
54
-
55
- context 'when definition has the good type' do
56
- before do
57
- allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
58
- allow(definition).to(receive(:sha256).and_return('~abcd1234'))
59
- end
60
-
61
- it do
62
- expect(linemodifier.replace('[define,requirement,REFERENCE]'))
63
- .to(eq('[define,requirement,REFERENCE(~abcd1234)]'))
64
- end
65
-
66
- it do
67
- expect(linemodifier.replace('[define,requirement,REFERENCE(~bad)]'))
68
- .to(eq('[define,requirement,REFERENCE(~abcd1234)]'))
69
- end
70
-
71
- it do
72
- expect(linemodifier.replace('[define,requirement,REFERENCE(toto~bad)]'))
73
- .to(eq('[define,requirement,REFERENCE(toto~abcd1234)]'))
74
- end
75
-
76
- it do
77
- expect(linemodifier.replace('[define,requirement,REFERENCE(toto)]'))
78
- .to(eq('[define,requirement,REFERENCE(toto~abcd1234)]'))
79
- end
80
- end
81
- end
82
- end