danger-changelog 0.6.0 → 0.7.0

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/danger.yml +23 -0
  3. data/.github/workflows/lint.yml +16 -0
  4. data/.github/workflows/test.yml +20 -0
  5. data/.gitignore +1 -0
  6. data/.rubocop.yml +10 -0
  7. data/.rubocop_todo.yml +1 -39
  8. data/CHANGELOG.md +11 -0
  9. data/CONTRIBUTING.md +1 -1
  10. data/Dangerfile +1 -0
  11. data/Gemfile +14 -0
  12. data/LICENSE.txt +1 -1
  13. data/README.md +20 -3
  14. data/RELEASING.md +1 -1
  15. data/danger-changelog.gemspec +0 -11
  16. data/lib/changelog/changelog_file.rb +5 -3
  17. data/lib/changelog/changelog_line/changelog_entry_line.rb +31 -1
  18. data/lib/changelog/changelog_line/changelog_header_line.rb +2 -2
  19. data/lib/changelog/changelog_line/changelog_line.rb +2 -0
  20. data/lib/changelog/changelog_line/changelog_line_parser.rb +2 -2
  21. data/lib/changelog/config.rb +4 -2
  22. data/lib/changelog/gem_version.rb +1 -1
  23. data/lib/changelog/parsers/base.rb +2 -2
  24. data/lib/changelog/parsers/intridea_format.rb +2 -1
  25. data/lib/changelog/parsers/keep_a_changelog.rb +2 -2
  26. data/lib/changelog/parsers/validation_result.rb +31 -0
  27. data/lib/changelog/parsers.rb +1 -0
  28. data/lib/changelog/plugin.rb +10 -9
  29. data/spec/changelog_spec.rb +88 -254
  30. data/spec/config_spec.rb +11 -3
  31. data/spec/{changelog_entry_line_spec.rb → intridea/changelog_entry_line_spec.rb} +1 -1
  32. data/spec/intridea/changelog_file_spec.rb +120 -0
  33. data/spec/{changelog_header_line_spec.rb → intridea/changelog_header_line_spec.rb} +1 -1
  34. data/spec/{changelog_line_parser_spec.rb → intridea/changelog_line_parser_spec.rb} +1 -1
  35. data/spec/{changelog_placeholder_line_spec.rb → intridea/changelog_placeholder_line_spec.rb} +5 -3
  36. data/spec/intridea/changelog_spec.rb +150 -0
  37. data/spec/{fixtures/changelogs → intridea/fixtures}/dates.md +3 -0
  38. data/spec/intridea/fixtures/extra_trailing_space.md +3 -0
  39. data/spec/keep_a_changelog/changelog_spec.rb +84 -0
  40. data/spec/keep_a_changelog/fixtures/invalid_line.md +23 -0
  41. data/spec/keep_a_changelog/fixtures/lines_with_links.md +14 -0
  42. data/spec/keep_a_changelog/fixtures/missing_a_version_header.md +20 -0
  43. data/spec/plugin_spec.rb +10 -0
  44. metadata +50 -173
  45. data/.travis.yml +0 -14
  46. data/spec/changelog_file_spec.rb +0 -110
  47. /data/spec/{fixtures/changelogs → intridea/fixtures}/customized.md +0 -0
  48. /data/spec/{fixtures/changelogs → intridea/fixtures}/imbalanced.md +0 -0
  49. /data/spec/{fixtures/changelogs → intridea/fixtures}/lines.md +0 -0
  50. /data/spec/{fixtures/changelogs → intridea/fixtures}/minimal.md +0 -0
  51. /data/spec/{fixtures/changelogs → intridea/fixtures}/missing_your_contribution_here.md +0 -0
  52. /data/spec/{fixtures/changelogs → intridea/fixtures}/semver.md +0 -0
  53. /data/spec/{fixtures/changelogs/keep_a_changelog.md → keep_a_changelog/fixtures/complete.md} +0 -0
@@ -1,312 +1,146 @@
1
- require File.expand_path('spec_helper', __dir__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog do
4
- it 'is a Danger plugin' do
5
- expect(Danger::DangerChangelog.new(nil)).to be_a Danger::Plugin
6
- end
7
-
8
- describe 'with Dangerfile' do
9
- let(:filename) { File.expand_path('fixtures/changelogs/minimal.md', __dir__) }
10
- let(:dangerfile) { testing_dangerfile }
11
- let(:changelog) do
12
- dangerfile.changelog.filename = filename
13
- dangerfile.changelog
14
- end
15
- let(:status_report) { changelog.status_report }
16
-
17
- describe 'config' do
18
- it 'placeholder_line' do
19
- expect(changelog.placeholder_line).to eq "* Your contribution here.\n"
20
- end
4
+ let(:dangerfile) { testing_dangerfile }
5
+ let(:changelog) { dangerfile.changelog }
6
+ let(:status_report) { changelog.status_report }
7
+
8
+ describe 'in a PR' do
9
+ before do
10
+ changelog.env.request_source.pr_json = {
11
+ 'number' => 123,
12
+ 'title' => 'being dangerous',
13
+ 'html_url' => 'https://github.com/dblock/danger-changelog/pull/123',
14
+ 'user' => {
15
+ 'login' => 'dblock'
16
+ }
17
+ }
21
18
  end
22
19
 
23
- describe 'in a PR' do
24
- before do
25
- # typical PR JSON looks like https://raw.githubusercontent.com/danger/danger/bffc246a11dac883d76fc6636319bd6c2acd58a3/spec/fixtures/pr_response.json
26
- changelog.env.request_source.pr_json = {
27
- 'number' => 123,
28
- 'title' => 'being dangerous',
29
- 'html_url' => 'https://github.com/dblock/danger-changelog/pull/123',
30
- 'user' => {
31
- 'login' => 'dblock'
32
- }
33
- }
20
+ context 'check!' do
21
+ subject do
22
+ changelog.check!
34
23
  end
35
24
 
36
- context 'have_you_updated_changelog?' do
37
- subject do
38
- changelog.have_you_updated_changelog?
25
+ context 'without CHANGELOG changes' do
26
+ before do
27
+ allow(changelog.git).to receive(:modified_files).and_return(['some-file.txt'])
28
+ allow(changelog.git).to receive(:added_files).and_return(['some-file.txt'])
39
29
  end
40
30
 
41
- context 'without CHANGELOG changes' do
42
- context 'when something was modified' do
43
- before do
44
- allow(changelog.git).to receive(:modified_files).and_return(['some-file.txt'])
45
- allow(changelog.git).to receive(:added_files).and_return(['another-file.txt'])
46
- end
47
-
48
- it 'complains when no CHANGELOG can be found' do
49
- expect(subject).to be false
50
- expect(status_report[:errors]).to eq []
51
- expect(status_report[:warnings]).to eq ["Unless you're refactoring existing code or improving documentation, please update #{filename}."]
52
- expect(status_report[:markdowns].map(&:message)).to eq ["Here's an example of a #{filename} entry:\n\n```markdown\n* [#123](https://github.com/dblock/danger-changelog/pull/123): Being dangerous - [@dblock](https://github.com/dblock).\n```\n"]
53
- end
54
- end
55
-
56
- context 'with a README.md' do
57
- before do
58
- allow(changelog.git).to receive(:modified_files).and_return(['README.md'])
59
- allow(changelog.git).to receive(:added_files).and_return([])
60
- end
61
- it 'has no complaints' do
62
- expect(subject).to be true
63
- expect(status_report[:errors]).to eq []
64
- expect(status_report[:warnings]).to eq []
65
- expect(status_report[:markdowns]).to eq []
66
- end
67
- end
68
-
69
- context 'with files being ignored' do
70
- context 'name' do
71
- before do
72
- changelog.ignore_files = ['WHATEVER.md']
73
- allow(changelog.git).to receive(:modified_files).and_return(['WHATEVER.md'])
74
- allow(changelog.git).to receive(:added_files).and_return([])
75
- end
76
-
77
- it 'has no complaints' do
78
- expect(subject).to be true
79
- expect(status_report[:errors]).to eq []
80
- expect(status_report[:warnings]).to eq []
81
- expect(status_report[:markdowns]).to eq []
82
- end
83
- end
84
- context 'mixed' do
85
- before do
86
- changelog.ignore_files = ['WHATEVER.md', /\.txt$/]
87
- allow(changelog.git).to receive(:modified_files).and_return(['WHATEVER.md'])
88
- allow(changelog.git).to receive(:added_files).and_return(['one.txt', 'two.txt'])
89
- end
90
-
91
- it 'has no complaints' do
92
- expect(subject).to be true
93
- expect(status_report[:errors]).to eq []
94
- expect(status_report[:warnings]).to eq []
95
- expect(status_report[:markdowns]).to eq []
96
- end
97
- end
98
- end
31
+ it 'complains when no CHANGELOG can be found' do
32
+ expect(subject).to be false
33
+ expect(status_report[:errors]).to eq []
34
+ expect(status_report[:warnings]).to eq ["Unless you're refactoring existing code or improving documentation, please update CHANGELOG.md."]
35
+ expect(status_report[:markdowns].map(&:message)).to eq ["Here's an example of a CHANGELOG.md entry:\n\n```markdown\n* [#123](https://github.com/dblock/danger-changelog/pull/123): Being dangerous - [@dblock](https://github.com/dblock).\n```\n"]
99
36
  end
37
+ end
100
38
 
101
- context 'with a new CHANGELOG' do
102
- before do
103
- allow(changelog.git).to receive(:modified_files).and_return([])
104
- allow(changelog.git).to receive(:added_files).and_return([filename])
105
- end
106
-
107
- it 'has no complaints' do
108
- expect(subject).to be true
109
- expect(status_report[:errors]).to eq []
110
- expect(status_report[:warnings]).to eq []
111
- expect(status_report[:markdowns]).to eq []
112
- end
39
+ context 'with CHANGELOG changes' do
40
+ before do
41
+ allow(changelog.git).to receive(:modified_files).and_return([changelog.filename])
42
+ allow(changelog.git).to receive(:added_files).and_return([])
113
43
  end
114
44
 
115
- context 'with CHANGELOG changes' do
116
- before do
117
- allow(changelog.git).to receive(:modified_files).and_return([filename])
118
- allow(changelog.git).to receive(:added_files).and_return([])
119
- end
120
-
121
- it 'has no complaints' do
122
- expect(subject).to be true
123
- expect(status_report[:errors]).to eq []
124
- expect(status_report[:warnings]).to eq []
125
- expect(status_report[:markdowns]).to eq []
126
- end
45
+ it 'has no complaints' do
46
+ expect(subject).to be true
47
+ expect(status_report[:errors]).to eq []
48
+ expect(status_report[:warnings]).to eq []
49
+ expect(status_report[:markdowns]).to eq []
127
50
  end
128
51
  end
52
+ end
129
53
 
130
- context 'is_changelog_format_correct?' do
131
- subject do
132
- changelog.format = Danger::Changelog::Parsers.default_format
133
- changelog.is_changelog_format_correct?
134
- end
54
+ context 'have_you_updated_changelog?' do
55
+ subject do
56
+ changelog.have_you_updated_changelog?
57
+ end
135
58
 
136
- context 'without a CHANGELOG file' do
137
- let(:filename) { 'does-not-exist' }
138
- it 'complains' do
59
+ context 'without CHANGELOG changes' do
60
+ context 'when something was modified' do
61
+ before do
62
+ allow(changelog.git).to receive(:modified_files).and_return(['some-file.txt'])
63
+ allow(changelog.git).to receive(:added_files).and_return(['another-file.txt'])
64
+ end
65
+
66
+ it 'complains when no CHANGELOG can be found' do
139
67
  expect(subject).to be false
140
- expect(status_report[:errors]).to eq ['The does-not-exist file does not exist.']
68
+ expect(status_report[:errors]).to eq []
69
+ expect(status_report[:warnings]).to eq ["Unless you're refactoring existing code or improving documentation, please update #{changelog.filename}."]
70
+ expect(status_report[:markdowns].map(&:message)).to eq ["Here's an example of a #{changelog.filename} entry:\n\n```markdown\n* [#123](https://github.com/dblock/danger-changelog/pull/123): Being dangerous - [@dblock](https://github.com/dblock).\n```\n"]
141
71
  end
142
72
  end
143
73
 
144
- context 'with CHANGELOG changes' do
74
+ context 'with a README.md' do
145
75
  before do
146
- allow(changelog.git).to receive(:modified_files).and_return([filename])
76
+ allow(changelog.git).to receive(:modified_files).and_return(['README.md'])
147
77
  allow(changelog.git).to receive(:added_files).and_return([])
148
78
  end
149
-
150
79
  it 'has no complaints' do
151
80
  expect(subject).to be true
152
81
  expect(status_report[:errors]).to eq []
153
82
  expect(status_report[:warnings]).to eq []
154
83
  expect(status_report[:markdowns]).to eq []
155
84
  end
85
+ end
156
86
 
157
- context 'customized' do
87
+ context 'with files being ignored' do
88
+ context 'name' do
158
89
  before do
159
- changelog.placeholder_line = "* Nothing yet.\n"
90
+ changelog.ignore_files = ['WHATEVER.md']
91
+ allow(changelog.git).to receive(:modified_files).and_return(['WHATEVER.md'])
92
+ allow(changelog.git).to receive(:added_files).and_return([])
160
93
  end
161
94
 
162
- let(:filename) { File.expand_path('fixtures/changelogs/customized.md', __dir__) }
163
- it 'is ok' do
95
+ it 'has no complaints' do
164
96
  expect(subject).to be true
165
97
  expect(status_report[:errors]).to eq []
166
98
  expect(status_report[:warnings]).to eq []
167
99
  expect(status_report[:markdowns]).to eq []
168
100
  end
169
101
  end
170
-
171
- context 'missing your contribution here' do
172
- let(:filename) { File.expand_path('fixtures/changelogs/missing_your_contribution_here.md', __dir__) }
173
-
174
- context 'when placeholder line is customized' do
175
- before do
176
- changelog.placeholder_line = "* Nothing yet.\n"
177
- end
178
-
179
- it 'complains' do
180
- expect(subject).to be false
181
- expect(status_report[:errors]).to eq ["Please put back the `* Nothing yet.` line into #{filename}."]
182
- expect(status_report[:warnings]).to eq []
183
- expect(status_report[:markdowns]).to eq []
184
- end
185
- end
186
-
187
- context 'when placeholder line is default' do
188
- it 'complains' do
189
- expect(subject).to be false
190
- expect(status_report[:errors]).to eq ["Please put back the `* Your contribution here.` line into #{filename}."]
191
- expect(status_report[:warnings]).to eq []
192
- expect(status_report[:markdowns]).to eq []
193
- end
102
+ context 'mixed' do
103
+ before do
104
+ changelog.ignore_files = ['WHATEVER.md', /\.txt$/]
105
+ allow(changelog.git).to receive(:modified_files).and_return(['WHATEVER.md'])
106
+ allow(changelog.git).to receive(:added_files).and_return(['one.txt', 'two.txt'])
194
107
  end
195
108
 
196
- context 'when placeholder line is nil' do
197
- before do
198
- changelog.placeholder_line = nil
199
- end
200
-
201
- it 'is ok' do
202
- expect(subject).to be true
203
- expect(status_report[:errors]).to eq []
204
- expect(status_report[:warnings]).to eq []
205
- expect(status_report[:markdowns]).to eq []
206
- end
207
- end
208
- end
209
-
210
- context 'minimal example' do
211
- let(:filename) { File.expand_path('fixtures/changelogs/minimal.md', __dir__) }
212
- it 'is ok' do
109
+ it 'has no complaints' do
213
110
  expect(subject).to be true
214
111
  expect(status_report[:errors]).to eq []
215
112
  expect(status_report[:warnings]).to eq []
216
113
  expect(status_report[:markdowns]).to eq []
217
114
  end
218
-
219
- context 'when placeholder line is nil' do
220
- before do
221
- changelog.placeholder_line = nil
222
- end
223
-
224
- it 'complains' do
225
- expect(subject).to be false
226
- expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the [expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
227
- expect(status_report[:warnings]).to eq []
228
- expect(status_report[:markdowns].map(&:message)).to eq [
229
- "```markdown\n* Your contribution here.\n```\n"
230
- ]
231
- end
232
- end
233
- end
234
-
235
- context 'with bad lines' do
236
- let(:filename) { File.expand_path('fixtures/changelogs/lines.md', __dir__) }
237
- it 'complains' do
238
- expect(subject).to be false
239
- expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the [expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
240
- expect(status_report[:warnings]).to eq []
241
- expect(status_report[:markdowns].map(&:message)).to eq [
242
- "```markdown\nMissing star - [@dblock](https://github.com/dblock).\n```\n",
243
- "```markdown\n* [#1](https://github.com/dblock/danger-changelog/pull/1) - Not a colon - [@dblock](https://github.com/dblock).\n```\n",
244
- "```markdown\n* [#1](https://github.com/dblock/danger-changelog/pull/1): No final period - [@dblock](https://github.com/dblock)\n```\n",
245
- "```markdown\n# [#1](https://github.com/dblock/danger-changelog/pull/1): Hash instead of star - [@dblock](https://github.com/dblock).\n```\n",
246
- "```markdown\n* [#1](https://github.com/dblock/danger-changelog/pull/1): Extra period. - [@dblock](https://github.com/dblock).\n```\n",
247
- "```markdown\n* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ( - [@dblock](https://github.com/dblock).\n```\n",
248
- "```markdown\n* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ] - [@dblock](https://github.com/dblock).\n```\n"
249
- ]
250
- end
251
115
  end
252
116
  end
253
117
  end
254
- end
255
- end
256
-
257
- describe 'with the Keep a Changelog format' do
258
- let(:filename) { File.expand_path('fixtures/changelogs/keep_a_changelog.md', __dir__) }
259
- let(:dangerfile) { testing_dangerfile }
260
- let(:changelog) do
261
- dangerfile.changelog.format = :keep_a_changelog
262
- dangerfile.changelog.filename = filename
263
- dangerfile.changelog
264
- end
265
- let(:status_report) { changelog.status_report }
266
-
267
- describe 'in a PR' do
268
- before do
269
- changelog.env.request_source.pr_json = {
270
- 'number' => 123,
271
- 'title' => 'being dangerous',
272
- 'html_url' => 'https://github.com/dblock/danger-changelog/pull/123',
273
- 'user' => {
274
- 'login' => 'dblock'
275
- }
276
- }
277
- end
278
118
 
279
- context '#check!' do
280
- subject do
281
- changelog.check!
119
+ context 'with a new CHANGELOG' do
120
+ before do
121
+ allow(changelog.git).to receive(:modified_files).and_return([])
122
+ allow(changelog.git).to receive(:added_files).and_return([changelog.filename])
282
123
  end
283
124
 
284
- context 'without CHANGELOG changes' do
285
- before do
286
- allow(changelog.git).to receive(:modified_files).and_return(['some-file.txt'])
287
- allow(changelog.git).to receive(:added_files).and_return(['some-file.txt'])
288
- end
289
-
290
- it 'complains when no CHANGELOG can be found' do
291
- expect(subject).to be false
292
- expect(status_report[:errors]).to eq []
293
- expect(status_report[:warnings]).to eq ["Unless you're refactoring existing code or improving documentation, please update #{filename}."]
294
- expect(status_report[:markdowns].map(&:message)).to eq ["Here's an example of a #{filename} entry:\n\n```markdown\n* [#123](https://github.com/dblock/danger-changelog/pull/123): Being dangerous - [@dblock](https://github.com/dblock).\n```\n"]
295
- end
125
+ it 'has no complaints' do
126
+ expect(subject).to be true
127
+ expect(status_report[:errors]).to eq []
128
+ expect(status_report[:warnings]).to eq []
129
+ expect(status_report[:markdowns]).to eq []
296
130
  end
131
+ end
297
132
 
298
- context 'with CHANGELOG changes' do
299
- before do
300
- allow(changelog.git).to receive(:modified_files).and_return([filename])
301
- allow(changelog.git).to receive(:added_files).and_return([])
302
- end
133
+ context 'with CHANGELOG changes' do
134
+ before do
135
+ allow(changelog.git).to receive(:modified_files).and_return([changelog.filename])
136
+ allow(changelog.git).to receive(:added_files).and_return([])
137
+ end
303
138
 
304
- it 'has no complaints' do
305
- expect(subject).to be true
306
- expect(status_report[:errors]).to eq []
307
- expect(status_report[:warnings]).to eq []
308
- expect(status_report[:markdowns]).to eq []
309
- end
139
+ it 'has no complaints' do
140
+ expect(subject).to be true
141
+ expect(status_report[:errors]).to eq []
142
+ expect(status_report[:warnings]).to eq []
143
+ expect(status_report[:markdowns]).to eq []
310
144
  end
311
145
  end
312
146
  end
data/spec/config_spec.rb CHANGED
@@ -1,13 +1,21 @@
1
- require File.expand_path('spec_helper', __dir__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog::Config do
4
4
  describe 'placeholder_line' do
5
+ context 'an instance of a dangerfile' do
6
+ let(:dangerfile) { testing_dangerfile }
7
+ let(:changelog) { dangerfile.changelog }
8
+
9
+ it 'defaults placeholder_line' do
10
+ expect(changelog.placeholder_line).to eq "* Your contribution here.\n"
11
+ end
12
+ end
5
13
  context 'when without markdown star' do
6
14
  before do
7
15
  Danger::Changelog.config.placeholder_line = "Nothing yet.\n"
8
16
  end
9
17
 
10
- it 'ads missing star and saves configuration' do
18
+ it 'adds missing star and saves configuration' do
11
19
  expect(Danger::Changelog.config.placeholder_line).to eq "* Nothing yet.\n"
12
20
  end
13
21
  end
@@ -17,7 +25,7 @@ describe Danger::Changelog::Config do
17
25
  Danger::Changelog.config.placeholder_line = '* Nothing yet.'
18
26
  end
19
27
 
20
- it 'ads missing trailing newline and saves configuration' do
28
+ it 'adds missing trailing newline and saves configuration' do
21
29
  expect(Danger::Changelog.config.placeholder_line).to eq "* Nothing yet.\n"
22
30
  end
23
31
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path('spec_helper', __dir__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog::ChangelogEntryLine do
4
4
  it_behaves_like 'validates as changelog entry line', '* Valid without PR link - [@dblock](https://github.com/dblock).'
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ describe Danger::Changelog::ChangelogFile do
4
+ subject do
5
+ Danger::Changelog::ChangelogFile.new(filename).tap(&:parse)
6
+ end
7
+
8
+ describe 'with the default format checker' do
9
+ context 'minimal example' do
10
+ let(:filename) { File.expand_path('fixtures/minimal.md', __dir__) }
11
+ it 'exists?' do
12
+ expect(subject.exists?).to be true
13
+ end
14
+ it 'bad_lines?' do
15
+ expect(subject.bad_lines).to eq []
16
+ expect(subject.bad_lines?).to be false
17
+ end
18
+ it 'is valid' do
19
+ expect(subject.bad_lines?).to be false
20
+ end
21
+ it 'has your contribution here' do
22
+ expect(subject.global_failures?).to be false
23
+ end
24
+ end
25
+ context 'missing your contribution here' do
26
+ let(:filename) { File.expand_path('fixtures/missing_your_contribution_here.md', __dir__) }
27
+ it 'is valid' do
28
+ expect(subject.bad_lines?).to be false
29
+ end
30
+ it 'is missing your contribution here' do
31
+ expect(subject.global_failures?).to be true
32
+ end
33
+ end
34
+ context 'does not exist' do
35
+ let(:filename) { 'whatever.md' }
36
+ it 'exists?' do
37
+ expect(subject.exists?).to be false
38
+ end
39
+ it 'bad_lines?' do
40
+ expect(subject.bad_lines).to be_empty
41
+ expect(subject.bad_lines?).to be false
42
+ end
43
+ end
44
+ context 'with bad lines' do
45
+ let(:filename) { File.expand_path('fixtures/lines.md', __dir__) }
46
+ it 'is invalid' do
47
+ expect(subject.bad_lines?).to be true
48
+ end
49
+ it 'reports all bad lines' do
50
+ expect(subject.bad_lines).to eq [
51
+ ["Missing star - [@dblock](https://github.com/dblock).\n", 'does not start with a star, does not include a pull request link'],
52
+ ["* [#1](https://github.com/dblock/danger-changelog/pull/1) - Not a colon - [@dblock](https://github.com/dblock).\n"],
53
+ ["* [#1](https://github.com/dblock/danger-changelog/pull/1): No final period - [@dblock](https://github.com/dblock)\n", 'is missing a period at the end of the line'],
54
+ ["# [#1](https://github.com/dblock/danger-changelog/pull/1): Hash instead of star - [@dblock](https://github.com/dblock).\n", 'does not start with a star'],
55
+ ["* [#1](https://github.com/dblock/danger-changelog/pull/1): Extra period. - [@dblock](https://github.com/dblock).\n", 'has an extra period or comma at the end of the description'],
56
+ ["* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ( - [@dblock](https://github.com/dblock).\n", 'too many parenthesis'],
57
+ ["* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ] - [@dblock](https://github.com/dblock).\n", 'too many parenthesis']
58
+ ]
59
+ end
60
+ it 'has your contribution here' do
61
+ expect(subject.global_failures?).to be false
62
+ end
63
+ end
64
+ context 'with a line that has an extra trailing space' do
65
+ let(:filename) { File.expand_path('fixtures/extra_trailing_space.md', __dir__) }
66
+ it 'is invalid' do
67
+ expect(subject.bad_lines?).to be true
68
+ end
69
+ it 'reports all bad lines' do
70
+ expect(subject.bad_lines).to eq [
71
+ ["* [#1](https://github.com/dblock/danger-changelog/pull/1): Extra trailing space - [@dblock](https://github.com/dblock). \n", 'has an extra trailing space, is missing a period at the end of the line']
72
+ ]
73
+ end
74
+ end
75
+ context 'with bad dates' do
76
+ let(:filename) { File.expand_path('fixtures/dates.md', __dir__) }
77
+ it 'is invalid' do
78
+ expect(subject.bad_lines?).to be true
79
+ end
80
+ it 'reports all bad dates' do
81
+ expect(subject.bad_lines).to eq [
82
+ ["### 1.2.3 (1/2/2018)\n"],
83
+ ["### 1.2.3 (2018/13/1)\n"],
84
+ ["### 1.2.3 (2018/13)\n"],
85
+ ["### 1.2.3 (2018/1/1/3)\n"]
86
+ ]
87
+ end
88
+ end
89
+ context 'with bad semver' do
90
+ let(:filename) { File.expand_path('fixtures/semver.md', __dir__) }
91
+ it 'is invalid' do
92
+ expect(subject.bad_lines?).to be true
93
+ end
94
+ it 'reports all bad dates' do
95
+ expect(subject.bad_lines).to eq [
96
+ ["### 0 (2018/1/1)\n"],
97
+ ["### 0. (2018/1/1)\n"],
98
+ ["### 0.1. (2018/1/1)\n"]
99
+ ]
100
+ end
101
+ end
102
+ context 'with imbalanced parenthesis' do
103
+ let(:filename) { File.expand_path('fixtures/imbalanced.md', __dir__) }
104
+ it 'is invalid' do
105
+ expect(subject.bad_lines?).to be true
106
+ end
107
+ it 'reports all bad lines' do
108
+ expect(subject.bad_lines).to eq [
109
+ ["### 0.0.0)\n"],
110
+ ["### (0.0.1\n"],
111
+ ["### 1.2.3 (2018/1/1\n"],
112
+ ["### 0.1.0 2018/1/1)\n"],
113
+ ["### 0 ((2018/1/1)\n"],
114
+ ["### 0. [2018/1/1)\n"],
115
+ ["### 0.1. (2018/1/1)]\n"]
116
+ ]
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path('spec_helper', __dir__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog::ChangelogHeaderLine do
4
4
  it_behaves_like 'validates as changelog header line', '# 1.0.1'
@@ -1,4 +1,4 @@
1
- require File.expand_path('spec_helper', __dir__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog::ChangelogLineParser do
4
4
  context 'parse' do
@@ -1,9 +1,11 @@
1
- require File.expand_path('spec_helper', __dir__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog::ChangelogPlaceholderLine do
4
+ let(:config) { Danger::Changelog.config }
5
+
4
6
  context 'with a custom placeholder line' do
5
7
  before do
6
- Danger::Changelog.config.placeholder_line = "* Nothing yet here.\n"
8
+ config.placeholder_line = "* Nothing yet here.\n"
7
9
  end
8
10
 
9
11
  context 'when line is equal to placeholder_line from config' do
@@ -19,7 +21,7 @@ describe Danger::Changelog::ChangelogPlaceholderLine do
19
21
 
20
22
  context 'with a blank placeholder line' do
21
23
  before do
22
- Danger::Changelog.config.placeholder_line = nil
24
+ config.placeholder_line = nil
23
25
  end
24
26
 
25
27
  context 'when line is not blank' do