danger-wcc 0.0.3 → 0.1.1
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/.rubocop.yml +22 -15
- data/danger-wcc.gemspec +3 -3
- data/lib/version.rb +1 -1
- data/lib/wcc/commit_lint.rb +2 -1
- data/lib/wcc/commit_lint/commit_check.rb +0 -1
- data/lib/wcc/commit_lint/empty_line_check.rb +0 -1
- data/lib/wcc/commit_lint/subject_cap_check.rb +0 -1
- data/lib/wcc/commit_lint/subject_length_check.rb +0 -1
- data/lib/wcc/commit_lint/subject_period_check.rb +0 -1
- data/lib/wcc/commit_lint/subject_words_check.rb +0 -1
- data/lib/wcc/defaults.reek +8 -8
- data/lib/wcc/dependencies.rb +100 -0
- data/lib/wcc/jshint.rb +2 -2
- data/lib/wcc/plugin.rb +30 -12
- data/lib/wcc/reek.rb +2 -2
- data/lib/wcc/rubocop_exceptions.rb +13 -8
- data/lib/wcc/todos.rb +5 -4
- data/lib/wcc/util/yarn_info.rb +84 -0
- data/lib/wcc/utils.rb +17 -5
- data/lib/wcc/yarn_deduplicate.rb +72 -0
- data/spec/fixtures/dependencies/package.json +112 -0
- data/spec/fixtures/dependencies/package.json.diff +28 -0
- data/spec/fixtures/dependencies/package.json_patch_bumps_minor.diff +13 -0
- data/spec/fixtures/dependencies/package.json_patch_bumps_minor.json +112 -0
- data/spec/fixtures/dependencies/package.json_second_level_effect.diff +17 -0
- data/spec/fixtures/dependencies/package.json_second_level_effect.json +133 -0
- data/spec/fixtures/dependencies/yarn.lock +19609 -0
- data/spec/fixtures/dependencies/yarn.lock_patch_bumps_minor.lock +19614 -0
- data/spec/fixtures/dependencies/yarn.lock_second_level_effect.lock +20022 -0
- data/spec/fixtures/dependencies/yarn_list_second_level_effect.txt +1243 -0
- data/spec/fixtures/dependencies/yarn_list_second_level_effect.txt.diff +141 -0
- data/spec/fixtures/dependencies/yarn_minor_version.diff +33 -0
- data/spec/fixtures/dependencies/yarn_minor_version.txt +1151 -0
- data/spec/fixtures/dependencies/yarn_old.txt +1152 -0
- data/spec/fixtures/dependencies/yarn_patch_bumps_minor.diff +28 -0
- data/spec/fixtures/exception_inline_disabled_rule.diff +12 -0
- data/spec/fixtures/rubocop_exception.rb +3 -0
- data/spec/fixtures/yarn_deduplicate/list.a.txt +293 -0
- data/spec/fixtures/yarn_deduplicate/list.b.txt +295 -0
- data/spec/fixtures/yarn_deduplicate/list.diff +11 -0
- data/spec/fixtures/yarn_deduplicate/yarn.lock +20031 -0
- data/spec/fixtures_helper.rb +0 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/wcc/commit_lint_spec.rb +6 -10
- data/spec/wcc/dependencies_spec.rb +129 -0
- data/spec/wcc/github_spec.rb +13 -7
- data/spec/wcc/jshint_spec.rb +1 -1
- data/spec/wcc/plugin_spec.rb +22 -17
- data/spec/wcc/reek_spec.rb +1 -1
- data/spec/wcc/rubocop_exceptions_spec.rb +34 -15
- data/spec/wcc/todos_spec.rb +10 -10
- data/spec/wcc/utils_spec.rb +2 -2
- data/spec/wcc/yarn_deduplicate_spec.rb +57 -0
- data/spec/wcc_spec.rb +1 -1
- metadata +71 -10
data/spec/fixtures_helper.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# https://github.com/jonallured/danger-commit_lint
|
5
5
|
# which is licensed under the MIT License
|
6
6
|
|
7
|
-
require File.expand_path('
|
7
|
+
require File.expand_path('../spec_helper', __dir__)
|
8
8
|
|
9
9
|
TEST_MESSAGES = {
|
10
10
|
subject_cap: 'this subject needs a capital',
|
@@ -16,7 +16,7 @@ TEST_MESSAGES = {
|
|
16
16
|
'separating the subject and the body.",
|
17
17
|
all_errors: "this is a really long subject and it even ends in a period.\n'\
|
18
18
|
'Not to mention the missing empty line!",
|
19
|
-
valid:
|
19
|
+
valid: "This is a valid message\n\nYou can tell because it meets all the '\
|
20
20
|
'criteria and the linter does not complain."
|
21
21
|
}.freeze
|
22
22
|
|
@@ -24,8 +24,6 @@ NOOP_MESSAGE = Danger::DangerWCC::CommitLint::NOOP_MESSAGE
|
|
24
24
|
SUBJECT_LENGTH_CHECK_MESSAGE = 'Please limit commit subject line to 50 '\
|
25
25
|
'characters.'
|
26
26
|
|
27
|
-
# rubocop:enable Metrics/LineLength
|
28
|
-
|
29
27
|
def report_counts(status_report)
|
30
28
|
status_report.values.flatten.count
|
31
29
|
end
|
@@ -132,7 +130,7 @@ module Danger
|
|
132
130
|
|
133
131
|
checks.each do |check, _|
|
134
132
|
commit = double(:commit,
|
135
|
-
|
133
|
+
message: TEST_MESSAGES[check], sha: sha)
|
136
134
|
allow(@git).to receive(:commits).and_return([commit])
|
137
135
|
|
138
136
|
commit_lint disable: [check]
|
@@ -195,7 +193,7 @@ module Danger
|
|
195
193
|
|
196
194
|
checks.each do |check, warning|
|
197
195
|
commit = double(:commit,
|
198
|
-
|
196
|
+
message: TEST_MESSAGES[check], sha: sha)
|
199
197
|
allow(@git).to receive(:commits).and_return([commit])
|
200
198
|
|
201
199
|
expect {
|
@@ -281,7 +279,7 @@ module Danger
|
|
281
279
|
|
282
280
|
checks.each do |check, warning|
|
283
281
|
commit = double(:commit,
|
284
|
-
|
282
|
+
message: TEST_MESSAGES[check], sha: sha)
|
285
283
|
allow(@git).to receive(:commits).and_return([commit])
|
286
284
|
|
287
285
|
expect {
|
@@ -369,7 +367,7 @@ module Danger
|
|
369
367
|
|
370
368
|
options.each_with_index do |(check, opts), i|
|
371
369
|
commit = double(:commit,
|
372
|
-
|
370
|
+
message: TEST_MESSAGES[:valid], sha: sha)
|
373
371
|
allow(@git).to receive(:commits).and_return([commit])
|
374
372
|
|
375
373
|
arg = {}
|
@@ -388,5 +386,3 @@ module Danger
|
|
388
386
|
end
|
389
387
|
end
|
390
388
|
end
|
391
|
-
|
392
|
-
# rubocop:enable Metrics/ClassLength
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('../spec_helper', __dir__)
|
4
|
+
|
5
|
+
module Danger
|
6
|
+
describe Danger::DangerWCC do
|
7
|
+
before do
|
8
|
+
@dangerfile = testing_dangerfile
|
9
|
+
@my_plugin = @dangerfile.wcc
|
10
|
+
@git = @dangerfile.git
|
11
|
+
@github = @dangerfile.github
|
12
|
+
|
13
|
+
allow(@github).to receive(:html_link) do |text|
|
14
|
+
"<a href=\"github_html_link\">#{text}</a>"
|
15
|
+
end
|
16
|
+
|
17
|
+
allow(File).to receive(:exist?).and_call_original
|
18
|
+
allow(File).to receive(:read).and_call_original
|
19
|
+
allow(File).to receive(:exist?).with('yarn.lock')
|
20
|
+
.and_return(true)
|
21
|
+
allow(File).to receive(:readlines).with('yarn.lock')
|
22
|
+
.and_return(load_fixture('dependencies/yarn.lock').split("\n"))
|
23
|
+
allow(File).to receive(:read).with('package.json')
|
24
|
+
.and_return(load_fixture('dependencies/package.json'))
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'yarn dependencies' do
|
28
|
+
let(:subject) { Danger::DangerWCC::Dependencies.new(@my_plugin) }
|
29
|
+
|
30
|
+
it 'Errors when minor version changes' do
|
31
|
+
allow(subject).to receive(:run_and_diff)
|
32
|
+
.with(/yarn list/)
|
33
|
+
.and_return(load_fixture('dependencies/yarn_minor_version.diff'))
|
34
|
+
allow(@git).to receive(:diff)
|
35
|
+
.and_return([
|
36
|
+
load_diff(
|
37
|
+
'spec/fixtures/dependencies/package.json',
|
38
|
+
'dependencies/package.json'
|
39
|
+
)
|
40
|
+
])
|
41
|
+
|
42
|
+
# act
|
43
|
+
subject.perform
|
44
|
+
|
45
|
+
expect(@dangerfile.violation_report[:warnings])
|
46
|
+
.to eq([Violation.new(
|
47
|
+
'Dangerous change! react-instantsearch was updated '\
|
48
|
+
'from 5.3.2 to 5.7.0 without a corresponding '\
|
49
|
+
'change to package.json!',
|
50
|
+
false,
|
51
|
+
'yarn.lock',
|
52
|
+
15_613,
|
53
|
+
type: :error
|
54
|
+
)])
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'Errors when patch bump causes minor version changes' do
|
58
|
+
allow(File).to receive(:readlines).with('yarn.lock')
|
59
|
+
.and_return(
|
60
|
+
load_fixture('dependencies/yarn.lock_patch_bumps_minor.lock')
|
61
|
+
.split("\n")
|
62
|
+
)
|
63
|
+
|
64
|
+
allow(subject).to receive(:run_and_diff)
|
65
|
+
.with(/yarn list/)
|
66
|
+
.and_return(load_fixture('dependencies/yarn_patch_bumps_minor.diff'))
|
67
|
+
allow(@git).to receive(:diff)
|
68
|
+
.and_return(
|
69
|
+
[
|
70
|
+
load_diff(
|
71
|
+
'spec/fixtures/dependencies/'\
|
72
|
+
'package.json_patch_bumps_minor.json',
|
73
|
+
'dependencies/package.json_patch_bumps_minor'
|
74
|
+
)
|
75
|
+
]
|
76
|
+
)
|
77
|
+
|
78
|
+
# act
|
79
|
+
subject.perform
|
80
|
+
|
81
|
+
expect(@dangerfile.violation_report[:warnings])
|
82
|
+
.to eq([Violation.new(
|
83
|
+
'Dangerous change! lodash was updated '\
|
84
|
+
'from 4.17.15 to 4.18.1 without a corresponding '\
|
85
|
+
'change to package.json!',
|
86
|
+
false,
|
87
|
+
'yarn.lock',
|
88
|
+
# make sure we pick out the right lodash! There's 3 of them.
|
89
|
+
12_111,
|
90
|
+
type: :error
|
91
|
+
)])
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'ignores all changes when top level major version changes' do
|
95
|
+
allow(File).to receive(:readlines).with('yarn.lock')
|
96
|
+
.and_return(
|
97
|
+
load_fixture('dependencies/yarn.lock_second_level_effect.lock')
|
98
|
+
.split("\n")
|
99
|
+
)
|
100
|
+
allow(File).to receive(:read).with('package.json')
|
101
|
+
.and_return(
|
102
|
+
load_fixture('dependencies/'\
|
103
|
+
'package.json_second_level_effect.json')
|
104
|
+
)
|
105
|
+
|
106
|
+
allow(subject).to receive(:run_and_diff)
|
107
|
+
.with(/yarn list/)
|
108
|
+
.and_return(load_fixture(
|
109
|
+
'dependencies/yarn_list_second_level_effect.txt.diff'
|
110
|
+
))
|
111
|
+
allow(@git).to receive(:diff)
|
112
|
+
.and_return(
|
113
|
+
[
|
114
|
+
load_diff(
|
115
|
+
'package.json',
|
116
|
+
'dependencies/package.json_second_level_effect'
|
117
|
+
)
|
118
|
+
]
|
119
|
+
)
|
120
|
+
|
121
|
+
# act
|
122
|
+
subject.perform
|
123
|
+
|
124
|
+
expect(@dangerfile.violation_report[:warnings].map(&:message))
|
125
|
+
.to eq([])
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/spec/wcc/github_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require File.expand_path('
|
3
|
+
require File.expand_path('../spec_helper', __dir__)
|
4
4
|
require 'webmock'
|
5
5
|
|
6
6
|
module Danger
|
@@ -37,8 +37,10 @@ module Danger
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it '#add_labels adds existing labels to issue' do
|
40
|
-
stub = stub_request(
|
41
|
-
|
40
|
+
stub = stub_request(
|
41
|
+
:post,
|
42
|
+
API_URL + '/repos/watermarkchurch/danger-wcc/issues/2/labels'
|
43
|
+
)
|
42
44
|
.with(body: '["backlog","bug","duplicate"]')
|
43
45
|
|
44
46
|
# act
|
@@ -49,11 +51,15 @@ module Danger
|
|
49
51
|
end
|
50
52
|
|
51
53
|
it '#add_labels creates new labels before adding to issue' do
|
52
|
-
stub = stub_request(
|
53
|
-
|
54
|
+
stub = stub_request(
|
55
|
+
:post,
|
56
|
+
API_URL + '/repos/watermarkchurch/danger-wcc/labels'
|
57
|
+
)
|
54
58
|
.with(body: '{"name":"new_label","color":"ffffff"}')
|
55
|
-
stub_request(
|
56
|
-
|
59
|
+
stub_request(
|
60
|
+
:post,
|
61
|
+
API_URL + '/repos/watermarkchurch/danger-wcc/issues/2/labels'
|
62
|
+
)
|
57
63
|
.with(body: '["backlog","new_label"]')
|
58
64
|
|
59
65
|
# act
|
data/spec/wcc/jshint_spec.rb
CHANGED
data/spec/wcc/plugin_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require File.expand_path('
|
3
|
+
require File.expand_path('../spec_helper', __dir__)
|
4
4
|
|
5
5
|
module Danger
|
6
6
|
describe Danger::DangerWCC do
|
@@ -16,18 +16,24 @@ module Danger
|
|
16
16
|
end
|
17
17
|
|
18
18
|
describe 'all' do
|
19
|
-
it 'runs all
|
20
|
-
|
19
|
+
it 'runs all default and passes default options' do
|
20
|
+
%i[
|
21
|
+
rubocop_exceptions todos brakeman
|
22
|
+
dependencies yarn_deduplicate
|
23
|
+
].each do |check|
|
21
24
|
expect(@my_plugin).to receive(check)
|
22
25
|
.with({})
|
23
26
|
end
|
27
|
+
%i[commit_lint flay reek jshint].each do |check|
|
28
|
+
expect(@my_plugin).to_not receive(check)
|
29
|
+
end
|
24
30
|
|
25
31
|
# act
|
26
32
|
@my_plugin.all
|
27
33
|
end
|
28
34
|
|
29
35
|
it 'errors if all checks disabled' do
|
30
|
-
disabled = Danger::DangerWCC::
|
36
|
+
disabled = Danger::DangerWCC::DEFAULT_OPTIONS.keys
|
31
37
|
options = disabled.each_with_object({}) { |v, h| h[v] = false; }
|
32
38
|
|
33
39
|
# expect
|
@@ -42,20 +48,19 @@ module Danger
|
|
42
48
|
end
|
43
49
|
|
44
50
|
it 'runs only enabled checks' do
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
+
options = {
|
52
|
+
rubocop_exceptions: false,
|
53
|
+
yarn_deduplicate: false,
|
54
|
+
todos: false,
|
55
|
+
brakeman: false,
|
56
|
+
reek: true
|
57
|
+
}
|
51
58
|
|
52
59
|
# expect
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
expect(@my_plugin).to_not receive(check)
|
58
|
-
end
|
60
|
+
expect(@my_plugin).to receive(:reek)
|
61
|
+
expect(@my_plugin).to receive(:dependencies)
|
62
|
+
expect(@my_plugin).to_not receive(:rubocop_exceptions)
|
63
|
+
expect(@my_plugin).to_not receive(:commit_lint)
|
59
64
|
|
60
65
|
# act
|
61
66
|
@my_plugin.all options
|
@@ -63,7 +68,7 @@ module Danger
|
|
63
68
|
|
64
69
|
it 'passes options' do
|
65
70
|
options =
|
66
|
-
Danger::DangerWCC::
|
71
|
+
Danger::DangerWCC::DEFAULT_OPTIONS.keys.each_with_object({}) do |v, h|
|
67
72
|
h[v] = false
|
68
73
|
end
|
69
74
|
options[:commit_lint] = { test: { options: 1 } }
|
data/spec/wcc/reek_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require File.expand_path('
|
3
|
+
require File.expand_path('../spec_helper', __dir__)
|
4
4
|
|
5
5
|
module Danger
|
6
6
|
describe Danger::DangerWCC do
|
@@ -30,9 +30,9 @@ module Danger
|
|
30
30
|
.to eq([Violation.new('Rubocop rule Rails/SomeRule disabled in '\
|
31
31
|
'<a href="github_html_link">spec/fixtures/rubocop_exception.rb</a>'\
|
32
32
|
" \nPlease provide an explanation why this rule was disabled.",
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
false,
|
34
|
+
'spec/fixtures/rubocop_exception.rb',
|
35
|
+
5)])
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'Errors when rubocop exception not reenabled' do
|
@@ -52,9 +52,28 @@ module Danger
|
|
52
52
|
"\n\nThe rule was not reenabled!\n"\
|
53
53
|
'Please add a `rubocop:enable` comment so the rule is disabled '\
|
54
54
|
'for the minimal scope.',
|
55
|
-
|
55
|
+
false,
|
56
|
+
'spec/fixtures/rubocop_exception.rb',
|
57
|
+
10)])
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'does not require reenabling for inline comments' do
|
61
|
+
allow(@git).to receive(:diff)
|
62
|
+
.and_return([load_diff(
|
56
63
|
'spec/fixtures/rubocop_exception.rb',
|
57
|
-
|
64
|
+
'exception_inline_disabled_rule'
|
65
|
+
)])
|
66
|
+
|
67
|
+
# act
|
68
|
+
@my_plugin.rubocop_exceptions
|
69
|
+
|
70
|
+
expect(@dangerfile.violation_report[:warnings])
|
71
|
+
.to eq([Violation.new('Rubocop rule Rails/SomeRule disabled in '\
|
72
|
+
'<a href="github_html_link">spec/fixtures/rubocop_exception.rb</a>'\
|
73
|
+
" \nPlease provide an explanation why this rule was disabled.",
|
74
|
+
false,
|
75
|
+
'spec/fixtures/rubocop_exception.rb',
|
76
|
+
40)])
|
58
77
|
end
|
59
78
|
|
60
79
|
it 'Messages when exception added with context' do
|
@@ -71,9 +90,9 @@ module Danger
|
|
71
90
|
.to eq([Violation.new('Rubocop rule Metrics/LineLength disabled in '\
|
72
91
|
'<a href="github_html_link">spec/fixtures/rubocop_exception.rb</a>'\
|
73
92
|
" explanation:\n\t> Disabling because I want to.",
|
74
|
-
|
75
|
-
|
76
|
-
|
93
|
+
false,
|
94
|
+
'spec/fixtures/rubocop_exception.rb',
|
95
|
+
15)])
|
77
96
|
end
|
78
97
|
|
79
98
|
it 'Messages when exception added with multiline context' do
|
@@ -92,9 +111,9 @@ module Danger
|
|
92
111
|
' explanation:'\
|
93
112
|
"\n\t> I want to disable this because.."\
|
94
113
|
"\n\t> I forgot the reasons.",
|
95
|
-
|
96
|
-
|
97
|
-
|
114
|
+
false,
|
115
|
+
'spec/fixtures/rubocop_exception.rb',
|
116
|
+
30)])
|
98
117
|
end
|
99
118
|
|
100
119
|
it 'Messages when exception added in between existing comments' do
|
@@ -112,9 +131,9 @@ module Danger
|
|
112
131
|
'<a href="github_html_link">spec/fixtures/rubocop_exception.rb</a>'\
|
113
132
|
' explanation:'\
|
114
133
|
"\n\t> here is my comment why we are disabling ABC",
|
115
|
-
|
116
|
-
|
117
|
-
|
134
|
+
false,
|
135
|
+
'spec/fixtures/rubocop_exception.rb',
|
136
|
+
21)])
|
118
137
|
end
|
119
138
|
|
120
139
|
it 'Does not message when no exception added' do
|
data/spec/wcc/todos_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require File.expand_path('
|
3
|
+
require File.expand_path('../spec_helper', __dir__)
|
4
4
|
|
5
5
|
module Danger
|
6
6
|
describe Danger::DangerWCC do
|
@@ -27,9 +27,9 @@ module Danger
|
|
27
27
|
.to eq([Violation.new('TODO added in '\
|
28
28
|
'<a href="github_html_link">spec/fixtures/todo.rb</a>'\
|
29
29
|
' - is there a card associated with that?',
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
false,
|
31
|
+
'spec/fixtures/todo.rb',
|
32
|
+
9)])
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'Does not warn when TODO removed' do
|
@@ -68,9 +68,9 @@ module Danger
|
|
68
68
|
'<a href="github_html_link">spec/fixtures/todo.rb</a> '\
|
69
69
|
'referencing [https://zube.io/watermark/asdf1234]'\
|
70
70
|
'(https://zube.io/watermark/asdf1234)',
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
false,
|
72
|
+
'spec/fixtures/todo.rb',
|
73
|
+
13)])
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'Sends message when todo below link' do
|
@@ -87,9 +87,9 @@ module Danger
|
|
87
87
|
'<a href="github_html_link">spec/fixtures/todo.rb</a> '\
|
88
88
|
'referencing [https://www.github.com/watermarkchurch/asdf/1234]'\
|
89
89
|
'(https://www.github.com/watermarkchurch/asdf/1234)',
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
false,
|
91
|
+
'spec/fixtures/todo.rb',
|
92
|
+
18)])
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|