danger-jacoco-instacart 0.1.11 → 0.1.12.SNAPSHOT.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9fec5fb323f06e8bdffbfdc200b32801b1a74aaf596c374618afca9248326f1
4
- data.tar.gz: 60d06a3074b5aa763632d8bd5661ebc82908cb514346e172b5d383d053d061ae
3
+ metadata.gz: b68f00cbed8e16eb566459431cfb6d296b84b2fec8b87f5e07cb40e513b08b1c
4
+ data.tar.gz: a14e683220953972e2ee3fa84ff6f4fd795c60701c8108d187a24f710b10eced
5
5
  SHA512:
6
- metadata.gz: 2d29d01cf0b2971a5fda3d26e7d82085b42853b852388d1ac84c284bc9856de86628d98d4f44b29e8bb68ccb9628c73a028271153cd8248551bb3e572f1be1ad
7
- data.tar.gz: 02da2696139039613c08b30e576a2b2e512d8ce5770780e6e186af6fefff990c6030388b749d242932143da338c20b61bb12c1230cd13b0b91f6686650c4c2c4
6
+ metadata.gz: 0a8ed5dfd7cf494b6e1ceb45f87d06d8666e6f92ec1e31b73a75bdf00a2cc209c67854d3d0eee1eb367b4311ac280a22115fb075d904538f611ccb44ac94d5e7
7
+ data.tar.gz: 6c2cc47baf7fea31de40f60b531a442a5daad3460b2ecf6360dc6e1860077a4888fff6e9e071c0d4775c87224533e66edf1483586418220953762ed76621399a
data/.yardoc/checksums CHANGED
@@ -1,6 +1,6 @@
1
1
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/danger_jacoco.rb 38229d934b3315bb2a5a4eec18eb65f3c54d304f
2
- /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/gem_version.rb ed9d8db86045983fb4286a8695d1d67276512c90
3
- /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/plugin.rb 4d411eb29a16b42105f2775fd15d9ca0dc8e3093
2
+ /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/gem_version.rb 4109fe221b49a7d872a2d1bebf772583ed7c4437
3
+ /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/plugin.rb 17233d007f6187a47676390d6499ab5c7cb3a2b8
4
4
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/sax_parser.rb 370e2799f8dbdf7d642c820214e6ea84c30c9cb0
5
5
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/counter.rb 368f4a9811617b7a174ddf837a8fac49a4bc32a6
6
6
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/report.rb 7cf45ee71ff347a130320f6190ddb25525c7095d
data/.yardoc/object_types CHANGED
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jacoco
4
- VERSION = '0.1.11'
4
+ VERSION = '0.1.12.SNAPSHOT.1'
5
5
  end
data/lib/jacoco/plugin.rb CHANGED
@@ -20,9 +20,10 @@ module Danger
20
20
  # @tags jacoco, coverage, java, android, kotlin
21
21
  #
22
22
  class DangerJacoco < Plugin # rubocop:disable Metrics/ClassLength
23
- attr_accessor :minimum_project_coverage_percentage, :minimum_class_coverage_percentage, :only_check_new_files,
24
- :files_extension, :minimum_package_coverage_map, :minimum_class_coverage_map,
25
- :fail_no_coverage_data_found, :title, :class_column_title, :subtitle_success, :subtitle_failure
23
+ attr_accessor :minimum_project_coverage_percentage, :minimum_class_coverage_percentage,
24
+ :minimum_composable_class_coverage_percentage, :only_check_new_files, :files_extension,
25
+ :minimum_package_coverage_map, :minimum_class_coverage_map, :fail_no_coverage_data_found,
26
+ :title, :class_column_title, :subtitle_success, :subtitle_failure
26
27
 
27
28
  # Initialize the plugin with configured parameters or defaults
28
29
  def setup
@@ -44,6 +45,7 @@ module Danger
44
45
  def setup_minimum_coverages
45
46
  @minimum_project_coverage_percentage = 0 unless minimum_project_coverage_percentage
46
47
  @minimum_class_coverage_percentage = 0 unless minimum_class_coverage_percentage
48
+ @minimum_composable_class_coverage_percentage = 0 unless minimum_composable_class_coverage_percentage
47
49
  @minimum_package_coverage_map = {} unless minimum_package_coverage_map
48
50
  @minimum_class_coverage_map = {} unless minimum_class_coverage_map
49
51
  end
@@ -79,9 +81,10 @@ module Danger
79
81
  @fail_no_coverage_data_found = fail_no_coverage_data_found
80
82
 
81
83
  setup
82
- classes = classes(delimiter)
84
+ class_to_file_path_hash = classes(delimiter)
85
+ classnames = class_to_file_path_hash.keys
83
86
 
84
- parser = Jacoco::SAXParser.new(classes)
87
+ parser = Jacoco::SAXParser.new(classnames)
85
88
  Nokogiri::XML::SAX::Parser.new(parser).parse(File.open(path))
86
89
 
87
90
  total_covered = total_coverage(path)
@@ -90,7 +93,7 @@ module Danger
90
93
  report_markdown = header
91
94
  report_markdown += "| #{class_column_title} | Covered | Required | Status |\n"
92
95
  report_markdown += "|:---|:---:|:---:|:---:|\n"
93
- class_coverage_above_minimum = markdown_class(parser, report_markdown, report_url)
96
+ class_coverage_above_minimum = markdown_class(parser, report_markdown, report_url, class_to_file_path_hash)
94
97
  subtitle = class_coverage_above_minimum ? subtitle_success : subtitle_failure
95
98
  report_markdown.insert(header.length, "#### #{subtitle}\n")
96
99
  markdown(report_markdown)
@@ -104,12 +107,17 @@ module Danger
104
107
  def classes(delimiter)
105
108
  git = @dangerfile.git
106
109
  affected_files = only_check_new_files ? git.added_files : git.added_files + git.modified_files
110
+ class_to_file_path_hash = {}
107
111
  affected_files.select { |file| files_extension.reduce(false) { |state, el| state || file.end_with?(el) } }
108
- .map { |file| file.split('.').first.split(delimiter)[1] }
112
+ .each do |file| # "src/java/com/example/CachedRepository.java"
113
+ classname = file.split('.').first.split(delimiter)[1] # "com/example/CachedRepository"
114
+ class_to_file_path_hash[classname] = file
115
+ end
116
+ class_to_file_path_hash
109
117
  end
110
118
 
111
119
  # It returns a specific class code coverage and an emoji status as well
112
- def report_class(jacoco_class)
120
+ def report_class(jacoco_class, file_path)
113
121
  report_result = {
114
122
  covered: 'No coverage data found : -',
115
123
  status: ':black_joker:',
@@ -119,7 +127,7 @@ module Danger
119
127
  counter = coverage_counter(jacoco_class)
120
128
  unless counter.nil?
121
129
  coverage = (counter.covered.fdiv(counter.covered + counter.missed) * 100).floor
122
- required_coverage = required_class_coverage(jacoco_class)
130
+ required_coverage = required_class_coverage(jacoco_class, file_path)
123
131
  status = coverage_status(coverage, required_coverage)
124
132
 
125
133
  report_result = {
@@ -133,13 +141,19 @@ module Danger
133
141
  end
134
142
 
135
143
  # Determines the required coverage for the class
136
- def required_class_coverage(jacoco_class)
144
+ # rubocop:disable Metrics/AbcSize
145
+ # rubocop:disable Metrics/CyclomaticComplexity
146
+ def required_class_coverage(jacoco_class, file_path)
137
147
  key = minimum_class_coverage_map.keys.detect { |k| jacoco_class.name.match(k) } || jacoco_class.name
138
148
  required_coverage = minimum_class_coverage_map[key]
149
+ includes_composables = File.read(file_path).include? '@Composable' if File.exist?(file_path)
150
+ required_coverage = minimum_composable_class_coverage_percentage if required_coverage.nil? && includes_composables
139
151
  required_coverage = package_coverage(jacoco_class.name) if required_coverage.nil?
140
152
  required_coverage = minimum_class_coverage_percentage if required_coverage.nil?
141
153
  required_coverage
142
154
  end
155
+ # rubocop:enable Metrics/AbcSize
156
+ # rubocop:enable Metrics/CyclomaticComplexity
143
157
 
144
158
  # it returns the most suitable coverage by package name to class or nil
145
159
  def package_coverage(class_name)
@@ -213,22 +227,34 @@ module Danger
213
227
 
214
228
  # rubocop:disable Style/SignalException
215
229
  def report_fails(class_coverage_above_minimum, total_covered)
230
+ total_failure_message = ''
216
231
  if total_covered[:covered] < minimum_project_coverage_percentage
217
232
  # fail danger if total coverage is smaller than minimum_project_coverage_percentage
218
233
  covered = total_covered[:covered]
219
- fail("Total coverage of #{covered}%. Improve this to at least #{minimum_project_coverage_percentage}%")
234
+ total_failure_message = "Total coverage of #{covered}%." \
235
+ " Improve this to at least #{minimum_project_coverage_percentage}%"
236
+ fail(total_failure_message)
237
+ # rubocop:disable Lint/UnreachableCode (rubocop mistakenly thinks that raise is unreachable since priorly called "fail" raises by itself, but in fact "fail" is caught and handled)
238
+ raise CoverageRequirementsNotMetError, total_failure_message if class_coverage_above_minimum
239
+ # rubocop:enable Lint/UnreachableCode
220
240
  end
221
241
 
222
242
  return if class_coverage_above_minimum
223
243
 
224
- fail("Class coverage is below minimum. Improve to at least #{minimum_class_coverage_percentage}%")
244
+ class_failure_message = 'Class coverage is below minimum.' \
245
+ " Improve to at least #{minimum_class_coverage_percentage}%"
246
+ fail(class_failure_message)
247
+ # rubocop:disable Lint/UnreachableCode (rubocop mistakenly thinks that raise is unreachable since priorly called "fail" raises by itself, but in fact "fail" is caught and handled)
248
+ raise CoverageRequirementsNotMetError, "#{total_failure_message}. #{class_failure_message}"
249
+ # rubocop:enable Lint/UnreachableCode
225
250
  end
226
251
  # rubocop:enable Style/SignalException
227
252
 
228
- def markdown_class(parser, report_markdown, report_url)
253
+ def markdown_class(parser, report_markdown, report_url, class_to_file_path_hash)
229
254
  class_coverage_above_minimum = true
230
255
  parser.classes.each do |jacoco_class| # Check metrics for each classes
231
- rp = report_class(jacoco_class)
256
+ file_path = class_to_file_path_hash[jacoco_class.name]
257
+ rp = report_class(jacoco_class, file_path)
232
258
  rl = report_link(jacoco_class.name, report_url)
233
259
  ln = "| #{rl} | #{rp[:covered]}% | #{rp[:required_coverage_percentage]}% | #{rp[:status]} |\n"
234
260
  report_markdown << ln
@@ -249,3 +275,10 @@ module Danger
249
275
  end
250
276
  end
251
277
  end
278
+
279
+ # Exception that is being thrown when any of the coverage requirements aren't met
280
+ class CoverageRequirementsNotMetError < StandardError
281
+ def initialize(msg = 'Coverage requirements not met')
282
+ super
283
+ end
284
+ end
data/spec/jacoco_spec.rb CHANGED
@@ -33,7 +33,7 @@ module Danger
33
33
  @my_plugin.minimum_project_coverage_percentage = 50
34
34
  @my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 100 }
35
35
 
36
- @my_plugin.report path_a
36
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%. Class coverage is below minimum. Improve to at least 0%/)
37
37
 
38
38
  expect(@dangerfile.status_report[:errors]).to eq(['Total coverage of 32.9%. Improve this to at least 50%',
39
39
  'Class coverage is below minimum. Improve to at least 0%'])
@@ -49,8 +49,7 @@ module Danger
49
49
  @my_plugin.minimum_project_coverage_percentage = 50
50
50
  @my_plugin.minimum_class_coverage_map = { '.*Repository' => 60 }
51
51
 
52
- @my_plugin.report path_a
53
-
52
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%. Class coverage is below minimum. Improve to at least 0%/)
54
53
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 60% | :warning: |')
55
54
  end
56
55
 
@@ -60,8 +59,7 @@ module Danger
60
59
  @my_plugin.minimum_project_coverage_percentage = 50
61
60
  @my_plugin.minimum_package_coverage_map = { 'com/example/' => 70 }
62
61
 
63
- @my_plugin.report path_a
64
-
62
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%/)
65
63
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 70% | :warning: |')
66
64
  end
67
65
 
@@ -74,8 +72,7 @@ module Danger
74
72
  'com/' => 90
75
73
  }
76
74
 
77
- @my_plugin.report path_a
78
-
75
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%/)
79
76
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 70% | :warning: |')
80
77
  end
81
78
 
@@ -88,8 +85,7 @@ module Danger
88
85
  'com/' => 30
89
86
  }
90
87
 
91
- @my_plugin.report path_a
92
-
88
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%/)
93
89
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 77% | :warning: |')
94
90
  end
95
91
 
@@ -103,8 +99,7 @@ module Danger
103
99
  }
104
100
  @my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 100 }
105
101
 
106
- @my_plugin.report path_a
107
-
102
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%/)
108
103
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 100% | :warning: |')
109
104
  end
110
105
 
@@ -118,8 +113,7 @@ module Danger
118
113
  }
119
114
  @my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 80 }
120
115
 
121
- @my_plugin.report path_a
122
-
116
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%/)
123
117
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 80% | :warning: |')
124
118
  end
125
119
 
@@ -156,7 +150,7 @@ module Danger
156
150
  @my_plugin.minimum_class_coverage_percentage = 70
157
151
  @my_plugin.only_check_new_files = true
158
152
 
159
- @my_plugin.report path_a
153
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Class coverage is below minimum. Improve to at least 70%/)
160
154
 
161
155
  expect(@dangerfile.status_report[:markdowns][0].message).to include('### JaCoCo Code Coverage 55.59% :white_check_mark:')
162
156
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| Class | Covered | Required | Status |')
@@ -171,8 +165,7 @@ module Danger
171
165
  @my_plugin.minimum_class_coverage_percentage = 80
172
166
  @my_plugin.minimum_project_coverage_percentage = 50
173
167
 
174
- @my_plugin.report(path_a, 'http://test.com/')
175
-
168
+ expect { @my_plugin.report(path_a, 'http://test.com/') }.to raise_error(CoverageRequirementsNotMetError, /Total coverage of 32.9%. Improve this to at least 50%. Class coverage is below minimum. Improve to at least 80%/)
176
169
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| [`com/example/CachedRepository`](http://test.com/com.example/CachedRepository.html) | 50% | 80% | :warning: |')
177
170
  end
178
171
 
@@ -234,7 +227,7 @@ module Danger
234
227
  @my_plugin.minimum_project_coverage_percentage = 30
235
228
  @my_plugin.minimum_class_coverage_percentage = 60
236
229
 
237
- @my_plugin.report path_a
230
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Class coverage is below minimum. Improve to at least 60%/)
238
231
 
239
232
  expected = "### JaCoCo Code Coverage 32.9% :white_check_mark:\n"
240
233
  expected += "#### There are classes that do not meet coverage requirement :warning:\n"
@@ -268,7 +261,7 @@ module Danger
268
261
  @my_plugin.minimum_class_coverage_percentage = 60
269
262
  @my_plugin.subtitle_failure = 'Too bad :('
270
263
 
271
- @my_plugin.report path_a
264
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Class coverage is below minimum. Improve to at least 60%/)
272
265
 
273
266
  expected = "### JaCoCo Code Coverage 32.9% :white_check_mark:\n"
274
267
  expected += "#### Too bad :(\n"
@@ -311,7 +304,7 @@ module Danger
311
304
 
312
305
  @my_plugin.minimum_class_coverage_percentage = 50
313
306
 
314
- @my_plugin.report path_a
307
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Class coverage is below minimum. Improve to at least 50%/)
315
308
 
316
309
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 42% | 50% | :warning: |')
317
310
  end
@@ -325,6 +318,42 @@ module Danger
325
318
 
326
319
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 93% | 50% | :white_check_mark: |')
327
320
  end
321
+
322
+ describe 'with CachedRepository containing @Composable annotation' do
323
+ before do
324
+ allow(File).to receive(:exist?).with('src/java/com/example/CachedRepository.java').and_return(true)
325
+ allow(File).to receive(:read).with('src/java/com/example/CachedRepository.java').and_return('package com.kevin.mia.mikaela class Vika { @Composable fun someUiWidget() {} }')
326
+ end
327
+
328
+ it 'applies minimum_composable_class_coverage_percentage' do
329
+ path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
330
+
331
+ @my_plugin.minimum_class_coverage_percentage = 55
332
+ @my_plugin.minimum_composable_class_coverage_percentage = 45
333
+
334
+ @my_plugin.report path_a
335
+
336
+ expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 45% | :white_check_mark: |')
337
+ end
338
+ end
339
+
340
+ describe 'with CachedRepository _not_ containing @Composable annotation' do
341
+ before do
342
+ allow(File).to receive(:exist?).with('src/java/com/example/CachedRepository.java').and_return(true)
343
+ allow(File).to receive(:read).with('src/java/com/example/CachedRepository.java').and_return('package com.kevin.mia.mikaela class Vika { fun main() {} }')
344
+ end
345
+
346
+ it 'does not apply minimum_composable_class_coverage_percentage' do
347
+ path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
348
+
349
+ @my_plugin.minimum_class_coverage_percentage = 55
350
+ @my_plugin.minimum_composable_class_coverage_percentage = 45
351
+
352
+ expect { @my_plugin.report(path_a) }.to raise_error(CoverageRequirementsNotMetError, /Class coverage is below minimum. Improve to at least 55%/)
353
+
354
+ expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 55% | :warning: |')
355
+ end
356
+ end
328
357
  end
329
358
  end
330
359
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-jacoco-instacart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12.SNAPSHOT.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Malinskiy
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-08-25 00:00:00.000000000 Z
12
+ date: 2022-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: danger-plugin-api
@@ -228,9 +228,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
228
  version: '2.6'
229
229
  required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  requirements:
231
- - - ">="
231
+ - - ">"
232
232
  - !ruby/object:Gem::Version
233
- version: '0'
233
+ version: 1.3.1
234
234
  requirements: []
235
235
  rubygems_version: 3.1.2
236
236
  signing_key: