danger-wcc 0.0.6 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/danger-wcc.gemspec +6 -3
  3. data/lib/version.rb +1 -1
  4. data/lib/wcc/dependencies.rb +100 -0
  5. data/lib/wcc/plugin.rb +18 -3
  6. data/lib/wcc/util/yarn_info.rb +98 -0
  7. data/lib/wcc/utils.rb +16 -4
  8. data/lib/wcc/yarn_deduplicate.rb +71 -0
  9. data/spec/fixtures/dependencies/package.json +112 -0
  10. data/spec/fixtures/dependencies/package.json.diff +28 -0
  11. data/spec/fixtures/dependencies/package.json_patch_bumps_minor.diff +13 -0
  12. data/spec/fixtures/dependencies/package.json_patch_bumps_minor.json +112 -0
  13. data/spec/fixtures/dependencies/package.json_second_level_effect.diff +17 -0
  14. data/spec/fixtures/dependencies/package.json_second_level_effect.json +133 -0
  15. data/spec/fixtures/dependencies/yarn.lock +19609 -0
  16. data/spec/fixtures/dependencies/yarn.lock_patch_bumps_minor.lock +19614 -0
  17. data/spec/fixtures/dependencies/yarn.lock_second_level_effect.lock +20022 -0
  18. data/spec/fixtures/dependencies/yarn_list_second_level_effect.txt +1243 -0
  19. data/spec/fixtures/dependencies/yarn_list_second_level_effect.txt.diff +141 -0
  20. data/spec/fixtures/dependencies/yarn_minor_version.diff +33 -0
  21. data/spec/fixtures/dependencies/yarn_minor_version.txt +1151 -0
  22. data/spec/fixtures/dependencies/yarn_old.txt +1152 -0
  23. data/spec/fixtures/dependencies/yarn_patch_bumps_minor.diff +28 -0
  24. data/spec/fixtures/yarn_deduplicate/list.a.txt +293 -0
  25. data/spec/fixtures/yarn_deduplicate/list.b.txt +295 -0
  26. data/spec/fixtures/yarn_deduplicate/list.diff +11 -0
  27. data/spec/fixtures/yarn_deduplicate/yarn.lock +20031 -0
  28. data/spec/wcc/dependencies_spec.rb +130 -0
  29. data/spec/wcc/plugin_spec.rb +7 -3
  30. data/spec/wcc/yarn_deduplicate_spec.rb +57 -0
  31. metadata +79 -20
@@ -0,0 +1,130 @@
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
+ allow(Dir).to receive(:glob).and_return([])
26
+ end
27
+
28
+ describe 'yarn dependencies' do
29
+ let(:subject) { Danger::DangerWCC::Dependencies.new(@my_plugin) }
30
+
31
+ it 'Errors when minor version changes' do
32
+ allow(subject).to receive(:run_and_diff)
33
+ .with(/yarn list/)
34
+ .and_return(load_fixture('dependencies/yarn_minor_version.diff'))
35
+ allow(@git).to receive(:diff)
36
+ .and_return([
37
+ load_diff(
38
+ 'spec/fixtures/dependencies/package.json',
39
+ 'dependencies/package.json'
40
+ )
41
+ ])
42
+
43
+ # act
44
+ subject.perform
45
+
46
+ expect(@dangerfile.violation_report[:warnings])
47
+ .to eq([Violation.new(
48
+ 'Dangerous change! react-instantsearch was updated '\
49
+ 'from 5.3.2 to 5.7.0 without a corresponding '\
50
+ 'change to package.json!',
51
+ false,
52
+ 'yarn.lock',
53
+ 15_613,
54
+ type: :error
55
+ )])
56
+ end
57
+
58
+ it 'Errors when patch bump causes minor version changes' do
59
+ allow(File).to receive(:readlines).with('yarn.lock')
60
+ .and_return(
61
+ load_fixture('dependencies/yarn.lock_patch_bumps_minor.lock')
62
+ .split("\n")
63
+ )
64
+
65
+ allow(subject).to receive(:run_and_diff)
66
+ .with(/yarn list/)
67
+ .and_return(load_fixture('dependencies/yarn_patch_bumps_minor.diff'))
68
+ allow(@git).to receive(:diff)
69
+ .and_return(
70
+ [
71
+ load_diff(
72
+ 'spec/fixtures/dependencies/'\
73
+ 'package.json_patch_bumps_minor.json',
74
+ 'dependencies/package.json_patch_bumps_minor'
75
+ )
76
+ ]
77
+ )
78
+
79
+ # act
80
+ subject.perform
81
+
82
+ expect(@dangerfile.violation_report[:warnings])
83
+ .to eq([Violation.new(
84
+ 'Dangerous change! lodash was updated '\
85
+ 'from 4.17.15 to 4.18.1 without a corresponding '\
86
+ 'change to package.json!',
87
+ false,
88
+ 'yarn.lock',
89
+ # make sure we pick out the right lodash! There's 3 of them.
90
+ 12_111,
91
+ type: :error
92
+ )])
93
+ end
94
+
95
+ it 'ignores all changes when top level major version changes' do
96
+ allow(File).to receive(:readlines).with('yarn.lock')
97
+ .and_return(
98
+ load_fixture('dependencies/yarn.lock_second_level_effect.lock')
99
+ .split("\n")
100
+ )
101
+ allow(File).to receive(:read).with('package.json')
102
+ .and_return(
103
+ load_fixture('dependencies/'\
104
+ 'package.json_second_level_effect.json')
105
+ )
106
+
107
+ allow(subject).to receive(:run_and_diff)
108
+ .with(/yarn list/)
109
+ .and_return(load_fixture(
110
+ 'dependencies/yarn_list_second_level_effect.txt.diff'
111
+ ))
112
+ allow(@git).to receive(:diff)
113
+ .and_return(
114
+ [
115
+ load_diff(
116
+ 'package.json',
117
+ 'dependencies/package.json_second_level_effect'
118
+ )
119
+ ]
120
+ )
121
+
122
+ # act
123
+ subject.perform
124
+
125
+ expect(@dangerfile.violation_report[:warnings].map(&:message))
126
+ .to eq([])
127
+ end
128
+ end
129
+ end
130
+ end
@@ -17,11 +17,14 @@ module Danger
17
17
 
18
18
  describe 'all' do
19
19
  it 'runs all default and passes default options' do
20
- %i[rubocop_exceptions flay todos brakeman].each do |check|
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
24
- %i[commit_lint reek jshint].each do |check|
27
+ %i[commit_lint flay reek jshint].each do |check|
25
28
  expect(@my_plugin).to_not receive(check)
26
29
  end
27
30
 
@@ -47,6 +50,7 @@ module Danger
47
50
  it 'runs only enabled checks' do
48
51
  options = {
49
52
  rubocop_exceptions: false,
53
+ yarn_deduplicate: false,
50
54
  todos: false,
51
55
  brakeman: false,
52
56
  reek: true
@@ -54,7 +58,7 @@ module Danger
54
58
 
55
59
  # expect
56
60
  expect(@my_plugin).to receive(:reek)
57
- expect(@my_plugin).to receive(:flay)
61
+ expect(@my_plugin).to receive(:dependencies)
58
62
  expect(@my_plugin).to_not receive(:rubocop_exceptions)
59
63
  expect(@my_plugin).to_not receive(:commit_lint)
60
64
 
@@ -0,0 +1,57 @@
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(:pr_json)
14
+ .and_return(JSON.parse(load_fixture('github_pr.json')))
15
+ allow(subject).to receive(:run)
16
+ .with(/npm/)
17
+ .and_return('')
18
+ allow(subject).to receive(:run_and_diff)
19
+ .and_return(load_fixture('yarn_deduplicate/list.diff'))
20
+
21
+ allow(File).to receive(:exist?).and_call_original
22
+ allow(File).to receive(:read).and_call_original
23
+ allow(File).to receive(:exist?).with('yarn.lock')
24
+ .and_return(true)
25
+ allow(File).to receive(:readlines).with('yarn.lock')
26
+ .and_return(load_fixture('yarn_deduplicate/yarn.lock').split("\n"))
27
+ end
28
+
29
+ describe 'yarn_deduplicate' do
30
+ let(:subject) { Danger::DangerWCC::YarnDeduplicate.new(@my_plugin) }
31
+
32
+ it 'runs yarn-deduplicate and parses diff' do
33
+ # act
34
+ subject.perform
35
+
36
+ # assert
37
+ warnings = @dangerfile.violation_report[:warnings]
38
+ expect(warnings.length).to eq(2)
39
+
40
+ expect(warnings[0].message)
41
+ .to include('You have an opportunity to deduplicate "@babel/core".')
42
+ expect(warnings[0].message)
43
+ .to include('It\'s using 7.4.0 but could use the existing version '\
44
+ '7.12.10.')
45
+ expect(warnings[0].message)
46
+ .to include('npx yarn-deduplicate -s fewer --packages "@babel/core"')
47
+ expect(warnings[0].file).to eq('yarn.lock')
48
+ expect(warnings[0].line).to eq(24)
49
+
50
+ expect(warnings[1].message)
51
+ .to include('npx yarn-deduplicate -s fewer --packages "@babel/core"')
52
+ expect(warnings[1].file).to eq('yarn.lock')
53
+ expect(warnings[1].line).to eq(24)
54
+ end
55
+ end
56
+ end
57
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-wcc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Watermark Dev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-10 00:00:00.000000000 Z
11
+ date: 2021-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: brakeman
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ">"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ">"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: danger-plugin-api
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,13 +39,27 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: flay
42
+ name: git_diff
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: brakeman
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
- type: :runtime
62
+ type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
@@ -53,19 +67,19 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: git_diff
70
+ name: flay
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '0.4'
62
- type: :runtime
75
+ version: '0'
76
+ type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: '0.4'
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: reek
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -73,7 +87,7 @@ dependencies:
73
87
  - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
- type: :runtime
90
+ type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
@@ -279,17 +293,35 @@ files:
279
293
  - lib/wcc/commit_lint/subject_words_check.rb
280
294
  - lib/wcc/default.jshintrc
281
295
  - lib/wcc/defaults.reek
296
+ - lib/wcc/dependencies.rb
282
297
  - lib/wcc/github.rb
283
298
  - lib/wcc/jshint.rb
284
299
  - lib/wcc/plugin.rb
285
300
  - lib/wcc/reek.rb
286
301
  - lib/wcc/rubocop_exceptions.rb
287
302
  - lib/wcc/todos.rb
303
+ - lib/wcc/util/yarn_info.rb
288
304
  - lib/wcc/utils.rb
305
+ - lib/wcc/yarn_deduplicate.rb
289
306
  - spec/fixtures/brakeman/a.tmp
290
307
  - spec/fixtures/brakeman/b.tmp
291
308
  - spec/fixtures/brakeman/brakeman.diff
292
309
  - spec/fixtures/brakeman/brakeman.out
310
+ - spec/fixtures/dependencies/package.json
311
+ - spec/fixtures/dependencies/package.json.diff
312
+ - spec/fixtures/dependencies/package.json_patch_bumps_minor.diff
313
+ - spec/fixtures/dependencies/package.json_patch_bumps_minor.json
314
+ - spec/fixtures/dependencies/package.json_second_level_effect.diff
315
+ - spec/fixtures/dependencies/package.json_second_level_effect.json
316
+ - spec/fixtures/dependencies/yarn.lock
317
+ - spec/fixtures/dependencies/yarn.lock_patch_bumps_minor.lock
318
+ - spec/fixtures/dependencies/yarn.lock_second_level_effect.lock
319
+ - spec/fixtures/dependencies/yarn_list_second_level_effect.txt
320
+ - spec/fixtures/dependencies/yarn_list_second_level_effect.txt.diff
321
+ - spec/fixtures/dependencies/yarn_minor_version.diff
322
+ - spec/fixtures/dependencies/yarn_minor_version.txt
323
+ - spec/fixtures/dependencies/yarn_old.txt
324
+ - spec/fixtures/dependencies/yarn_patch_bumps_minor.diff
293
325
  - spec/fixtures/exception_context.diff
294
326
  - spec/fixtures/exception_inline_disabled_rule.diff
295
327
  - spec/fixtures/exception_insert_context.diff
@@ -316,9 +348,14 @@ files:
316
348
  - spec/fixtures/todo_link_same_line.diff
317
349
  - spec/fixtures/todo_no_link.diff
318
350
  - spec/fixtures/todo_removed.diff
351
+ - spec/fixtures/yarn_deduplicate/list.a.txt
352
+ - spec/fixtures/yarn_deduplicate/list.b.txt
353
+ - spec/fixtures/yarn_deduplicate/list.diff
354
+ - spec/fixtures/yarn_deduplicate/yarn.lock
319
355
  - spec/fixtures_helper.rb
320
356
  - spec/spec_helper.rb
321
357
  - spec/wcc/commit_lint_spec.rb
358
+ - spec/wcc/dependencies_spec.rb
322
359
  - spec/wcc/github_spec.rb
323
360
  - spec/wcc/jshint_spec.rb
324
361
  - spec/wcc/plugin_spec.rb
@@ -326,12 +363,13 @@ files:
326
363
  - spec/wcc/rubocop_exceptions_spec.rb
327
364
  - spec/wcc/todos_spec.rb
328
365
  - spec/wcc/utils_spec.rb
366
+ - spec/wcc/yarn_deduplicate_spec.rb
329
367
  - spec/wcc_spec.rb
330
368
  homepage: https://github.com/watermarkchurch/danger-wcc
331
369
  licenses:
332
370
  - Apache-2.0
333
371
  metadata: {}
334
- post_install_message:
372
+ post_install_message:
335
373
  rdoc_options: []
336
374
  require_paths:
337
375
  - lib
@@ -346,9 +384,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
346
384
  - !ruby/object:Gem::Version
347
385
  version: '0'
348
386
  requirements: []
349
- rubyforge_project:
387
+ rubyforge_project:
350
388
  rubygems_version: 2.5.2
351
- signing_key:
389
+ signing_key:
352
390
  specification_version: 4
353
391
  summary: A Danger plugin for Watermark Church custom rules.
354
392
  test_files:
@@ -356,6 +394,21 @@ test_files:
356
394
  - spec/fixtures/brakeman/b.tmp
357
395
  - spec/fixtures/brakeman/brakeman.diff
358
396
  - spec/fixtures/brakeman/brakeman.out
397
+ - spec/fixtures/dependencies/package.json
398
+ - spec/fixtures/dependencies/package.json.diff
399
+ - spec/fixtures/dependencies/package.json_patch_bumps_minor.diff
400
+ - spec/fixtures/dependencies/package.json_patch_bumps_minor.json
401
+ - spec/fixtures/dependencies/package.json_second_level_effect.diff
402
+ - spec/fixtures/dependencies/package.json_second_level_effect.json
403
+ - spec/fixtures/dependencies/yarn.lock
404
+ - spec/fixtures/dependencies/yarn.lock_patch_bumps_minor.lock
405
+ - spec/fixtures/dependencies/yarn.lock_second_level_effect.lock
406
+ - spec/fixtures/dependencies/yarn_list_second_level_effect.txt
407
+ - spec/fixtures/dependencies/yarn_list_second_level_effect.txt.diff
408
+ - spec/fixtures/dependencies/yarn_minor_version.diff
409
+ - spec/fixtures/dependencies/yarn_minor_version.txt
410
+ - spec/fixtures/dependencies/yarn_old.txt
411
+ - spec/fixtures/dependencies/yarn_patch_bumps_minor.diff
359
412
  - spec/fixtures/exception_context.diff
360
413
  - spec/fixtures/exception_inline_disabled_rule.diff
361
414
  - spec/fixtures/exception_insert_context.diff
@@ -382,9 +435,14 @@ test_files:
382
435
  - spec/fixtures/todo_link_same_line.diff
383
436
  - spec/fixtures/todo_no_link.diff
384
437
  - spec/fixtures/todo_removed.diff
438
+ - spec/fixtures/yarn_deduplicate/list.a.txt
439
+ - spec/fixtures/yarn_deduplicate/list.b.txt
440
+ - spec/fixtures/yarn_deduplicate/list.diff
441
+ - spec/fixtures/yarn_deduplicate/yarn.lock
385
442
  - spec/fixtures_helper.rb
386
443
  - spec/spec_helper.rb
387
444
  - spec/wcc/commit_lint_spec.rb
445
+ - spec/wcc/dependencies_spec.rb
388
446
  - spec/wcc/github_spec.rb
389
447
  - spec/wcc/jshint_spec.rb
390
448
  - spec/wcc/plugin_spec.rb
@@ -392,4 +450,5 @@ test_files:
392
450
  - spec/wcc/rubocop_exceptions_spec.rb
393
451
  - spec/wcc/todos_spec.rb
394
452
  - spec/wcc/utils_spec.rb
453
+ - spec/wcc/yarn_deduplicate_spec.rb
395
454
  - spec/wcc_spec.rb