danger-wcc 0.0.6 → 0.1.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 (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