coverband 5.2.6.rc.3 → 5.2.6.rc.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '039bd98899c0794752cb3244029b3bce0d9d6ebda8ddf449423e94e44741acb5'
4
- data.tar.gz: 5b19acc65170a2f2c6d66a750a7e958759e90caca808943426481828c26dedfa
3
+ metadata.gz: 45ab4b4c0eec8a0b642cb2236bb4fbf4b3117ec6af3c4279b37236f360fbeab6
4
+ data.tar.gz: 07010dd790b47cecc8fd5318bc27ec779c8f801a33943694d794a6c23686723f
5
5
  SHA512:
6
- metadata.gz: 51e2ef52b7bd14f677845d6d565872ab9a607990ff28e89ba020f5fe8f8a65d728400f241ea2d70647580f2387e2115f9d033e450704d821d9a1664be5457f76
7
- data.tar.gz: 62dc029eb498529c31e81a297db3afb5a1d95a716d0802ed0b99128b8405f937b6d90c61eb3d0dc49df4f2faf9b9c2545ae5f54dbda9db2d04e3b6465001a75d
6
+ metadata.gz: 054ac7588139476dd9f0b51caa28023f037867eac12a89d523efa0ed220791e340a468f26a1fe5f67661986008449e492be2f005f948377f7d4e728604ed8c86
7
+ data.tar.gz: d1c38bb92fb95e3125cb25eb188cefce1efe86ce68932078cd75a4ae417dd1626263aa3849f45edd37d72cbd86ba72627b78271354c6d6ddd23648859c47e5cf
data/changes.md CHANGED
@@ -5,6 +5,7 @@ __NOTE: the current RCs include below, but this might turn into coverband 6.0__
5
5
  - add support for translation keys
6
6
  - refactor non Coverage.so based trackers
7
7
  - adds CSP report support (thanks @jwg2s)
8
+ - add JSON reporter (thanks @mark-davenport-fountain)
8
9
 
9
10
  ### Coverband 5.2.5
10
11
 
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Outputs data in json format similar to what is shown in the HTML page
4
+ # Top level and file level coverage numbers
5
+ module Coverband
6
+ module Reporters
7
+ class JSONReport < Base
8
+ attr_accessor :filtered_report_files
9
+
10
+ def initialize(store, options = {})
11
+ coverband_reports = Coverband::Reporters::Base.report(store, options)
12
+ self.filtered_report_files = self.class.fix_reports(coverband_reports)
13
+ end
14
+
15
+ def report
16
+ report_as_json
17
+ end
18
+
19
+ private
20
+
21
+ def report_as_json
22
+ result = Coverband::Utils::Results.new(filtered_report_files)
23
+ source_files = result.source_files
24
+ {
25
+ **coverage_totals(source_files),
26
+ files: coverage_files(result, source_files)
27
+ }.to_json
28
+ end
29
+
30
+ def coverage_totals(source_files)
31
+ {
32
+ total_files: source_files.length,
33
+ lines_of_code: source_files.lines_of_code,
34
+ lines_covered: source_files.covered_lines,
35
+ lines_missed: source_files.missed_lines,
36
+ covered_strength: source_files.covered_strength,
37
+ covered_percent: source_files.covered_percent
38
+ }
39
+ end
40
+
41
+ # Using a hash indexed by file name for quick lookups
42
+ def coverage_files(result, source_files)
43
+ source_files.each_with_object({}) do |source_file, hash|
44
+ hash[source_file.short_name] = {
45
+ never_loaded: source_file.never_loaded,
46
+ runtime_percentage: result.runtime_relevant_coverage(source_file),
47
+ lines_of_code: source_file.lines.count,
48
+ lines_covered: source_file.covered_lines.count,
49
+ lines_missed: source_file.missed_lines.count,
50
+ covered_percent: source_file.covered_percent,
51
+ covered_strength: source_file.covered_strength
52
+ }
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -90,6 +90,8 @@ module Coverband
90
90
  [200, coverband_headers(content_type: "text/json"), [debug_data]]
91
91
  when %r{\/load_file_details}
92
92
  [200, coverband_headers(content_type: "text/json"), [load_file_details]]
93
+ when %r{\/json}
94
+ [200, coverband_headers(content_type: "text/json"), [json]]
93
95
  when %r{\/$}
94
96
  [200, coverband_headers, [index]]
95
97
  else
@@ -109,6 +111,10 @@ module Coverband
109
111
  open_report: false).report
110
112
  end
111
113
 
114
+ def json
115
+ Coverband::Reporters::JSONReport.new(Coverband.configuration.store).report
116
+ end
117
+
112
118
  def settings
113
119
  Coverband::Utils::HTMLFormatter.new(nil, base_path: base_path).format_settings!
114
120
  end
@@ -5,5 +5,5 @@
5
5
  # use format "4.2.1.rc.1" ~> 4.2.1.rc to prerelease versions like v4.2.1.rc.2 and v4.2.1.rc.3
6
6
  ###
7
7
  module Coverband
8
- VERSION = "5.2.6.rc.3"
8
+ VERSION = "5.2.6.rc.4"
9
9
  end
data/lib/coverband.rb CHANGED
@@ -137,6 +137,7 @@ module Coverband
137
137
  require "coverband/utils/lines_classifier"
138
138
  require "coverband/utils/results"
139
139
  require "coverband/reporters/html_report"
140
+ require "coverband/reporters/json_report"
140
141
  init_web
141
142
  end
142
143
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../../test_helper", File.dirname(__FILE__))
4
+
5
+ class ReportJSONTest < Minitest::Test
6
+ def setup
7
+ super
8
+ @store = Coverband.configuration.store
9
+ Coverband.configure do |config|
10
+ config.store = @store
11
+ config.root = fixtures_root
12
+ config.ignore = ["notsomething.rb", "lib/*"]
13
+ end
14
+ mock_file_hash
15
+ end
16
+
17
+ test "includes totals" do
18
+ @store.send(:save_report, basic_coverage)
19
+
20
+ json = Coverband::Reporters::JSONReport.new(@store).report
21
+ parsed = JSON.parse(json)
22
+ expected_keys = ["total_files", "lines_of_code", "lines_covered", "lines_missed", "covered_strength", "covered_percent"]
23
+ assert expected_keys - parsed.keys == []
24
+ end
25
+
26
+ test "honors ignore list" do
27
+ @store.send(:save_report, basic_coverage)
28
+
29
+ json = Coverband::Reporters::JSONReport.new(@store).report
30
+ parsed = JSON.parse(json)
31
+ expected_files = ["app/controllers/sample_controller.rb", "app/models/user.rb"]
32
+ assert_equal parsed["files"].keys, expected_files
33
+ end
34
+
35
+ test "includes metrics for files" do
36
+ @store.send(:save_report, basic_coverage)
37
+
38
+ json = Coverband::Reporters::JSONReport.new(@store).report
39
+ parsed = JSON.parse(json)
40
+
41
+ expected_keys = ["never_loaded", "runtime_percentage", "lines_of_code", "lines_covered", "lines_missed", "covered_percent", "covered_strength"]
42
+
43
+ assert_equal parsed["files"].length, 2
44
+ parsed["files"].keys.each do |file|
45
+ assert_equal parsed["files"][file].keys, expected_keys
46
+ end
47
+ end
48
+ end
data/test/test_helper.rb CHANGED
@@ -33,6 +33,7 @@ require "coverband/utils/source_file"
33
33
  require "coverband/utils/lines_classifier"
34
34
  require "coverband/utils/results"
35
35
  require "coverband/reporters/html_report"
36
+ require "coverband/reporters/json_report"
36
37
  require "webmock/minitest"
37
38
 
38
39
  require_relative "unique_files"
@@ -93,13 +94,13 @@ Mocha::Configuration.prevent(:stubbing_non_existent_method)
93
94
  def test(name, &block)
94
95
  test_name = "test_#{name.gsub(/\s+/, "_")}".to_sym
95
96
  defined = begin
96
- instance_method(test_name)
97
+ instance_method(test_name)
97
98
  rescue
98
99
  false
99
- end
100
+ end
100
101
  raise "#{test_name} is already defined in #{self}" if defined
101
102
 
102
- if block_given?
103
+ if block
103
104
  define_method(test_name, &block)
104
105
  else
105
106
  define_method(test_name) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coverband
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.6.rc.3
4
+ version: 5.2.6.rc.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Mayer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-02-11 00:00:00.000000000 Z
12
+ date: 2023-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: benchmark-ips
@@ -315,6 +315,7 @@ files:
315
315
  - lib/coverband/reporters/base.rb
316
316
  - lib/coverband/reporters/console_report.rb
317
317
  - lib/coverband/reporters/html_report.rb
318
+ - lib/coverband/reporters/json_report.rb
318
319
  - lib/coverband/reporters/web.rb
319
320
  - lib/coverband/utils/absolute_file_converter.rb
320
321
  - lib/coverband/utils/configuration_template.rb
@@ -396,6 +397,7 @@ files:
396
397
  - test/coverband/reporters/base_test.rb
397
398
  - test/coverband/reporters/console_test.rb
398
399
  - test/coverband/reporters/html_test.rb
400
+ - test/coverband/reporters/json_test.rb
399
401
  - test/coverband/reporters/web_test.rb
400
402
  - test/coverband/utils/absolute_file_converter_test.rb
401
403
  - test/coverband/utils/dead_methods_test.rb
@@ -556,6 +558,7 @@ test_files:
556
558
  - test/coverband/reporters/base_test.rb
557
559
  - test/coverband/reporters/console_test.rb
558
560
  - test/coverband/reporters/html_test.rb
561
+ - test/coverband/reporters/json_test.rb
559
562
  - test/coverband/reporters/web_test.rb
560
563
  - test/coverband/utils/absolute_file_converter_test.rb
561
564
  - test/coverband/utils/dead_methods_test.rb