danger-cobertura 1.0.0 → 1.1.0
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/.codeclimate.yml +5 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +4 -1
- data/.travis.yml +16 -1
- data/CHANGELOG.md +9 -0
- data/README.md +35 -2
- data/danger-cobertura.gemspec +5 -1
- data/lib/cobertura/coverage_item.rb +14 -7
- data/lib/cobertura/gem_version.rb +1 -3
- data/lib/cobertura/plugin.rb +100 -22
- data/lib/danger_cobertura.rb +0 -2
- data/lib/danger_plugin.rb +0 -2
- data/spec/assets/coverage.xml +6 -0
- data/spec/cobertura_spec.rb +157 -2
- data/spec/helper/cobertura_helper.rb +12 -0
- data/spec/spec_helper.rb +8 -0
- metadata +37 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 581a9da17cf4517347df716589c098c219abcdac2fdd5887a6cb8ac9626119de
|
4
|
+
data.tar.gz: 97f48312f384759df2a674ba129501597becba3afb5a3b1a168a8a6697ce41d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 858d10f14d3e5c422787929b97c85a02f0616544ba121788d4a90bc650bf05cb722b758243c51fb4e3e83674dcb94d2abe8161a44a67616f5bd0c527ece52652
|
7
|
+
data.tar.gz: a209e03077a94489ac9110048a98f43f9013f9ae85bdebb40e0997afeddf3b46608050b37beca56561babb1b1be9ad9092adbcee39e2c06af40005e84a2715a0
|
data/.codeclimate.yml
ADDED
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# If you don't like these settings, just delete this file :)
|
4
4
|
|
5
5
|
AllCops:
|
6
|
-
TargetRubyVersion: 2.
|
6
|
+
TargetRubyVersion: 2.2
|
7
7
|
|
8
8
|
Style/StringLiterals:
|
9
9
|
EnforcedStyle: double_quotes
|
@@ -150,3 +150,6 @@ PercentLiteralDelimiters:
|
|
150
150
|
|
151
151
|
Security/YAMLLoad:
|
152
152
|
Enabled: false
|
153
|
+
|
154
|
+
Metrics/ModuleLength:
|
155
|
+
Max: 500
|
data/.travis.yml
CHANGED
@@ -5,11 +5,26 @@ cache:
|
|
5
5
|
- bundle
|
6
6
|
|
7
7
|
rvm:
|
8
|
-
- 2.
|
8
|
+
- 2.2
|
9
|
+
- 2.3
|
10
|
+
- 2.4
|
11
|
+
- 2.5
|
12
|
+
|
13
|
+
env:
|
14
|
+
global:
|
15
|
+
- CC_TEST_REPORTER_ID=7cfcaf05ab26fd0e7088ab0b16e902559a6d0c0c6f6785fa908e20efeba53c64
|
16
|
+
|
17
|
+
before_script:
|
18
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
19
|
+
- chmod +x ./cc-test-reporter
|
20
|
+
- ./cc-test-reporter before-build
|
9
21
|
|
10
22
|
script:
|
11
23
|
- bundle exec rake spec
|
12
24
|
|
25
|
+
after_script:
|
26
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
27
|
+
|
13
28
|
deploy:
|
14
29
|
provider: rubygems
|
15
30
|
api_key:
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [1.1.0] - 2018-11-28
|
10
|
+
### Added
|
11
|
+
- Option to add branch and line rate information
|
12
|
+
- Add a filename prefix
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
- Exclude all files with "$" sign in name
|
16
|
+
- Support ruby 2.2 - 2.5
|
17
|
+
|
9
18
|
## [1.0.0] - 2018-11-25
|
10
19
|
### Added
|
11
20
|
- Initial release.
|
data/README.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
[](https://badge.fury.io/rb/danger-cobertura)
|
2
|
+
[](https://travis-ci.org/Kyaak/danger-cobertura)
|
3
|
+
[](https://codeclimate.com/github/Kyaak/danger-cobertura/maintainability)
|
4
|
+
[](https://codeclimate.com/github/Kyaak/danger-cobertura/test_coverage)
|
5
|
+
[](http://inch-ci.org/github/Kyaak/danger-cobertura)
|
6
|
+
[](https://rubygems.org/gems/danger-cobertura)
|
7
|
+
|
1
8
|
# danger-cobertura
|
2
9
|
|
3
10
|
A [cobertura](http://cobertura.github.io/cobertura/) report plugin for [danger](https://danger.systems/ruby).
|
@@ -27,12 +34,20 @@ _It inspects only modified and added files, deleted ones are not considered usef
|
|
27
34
|
|
28
35
|
### Coverage report
|
29
36
|
|
30
|
-
|
37
|
+
#### Minimum
|
38
|
+
|
39
|
+
File | Total
|
31
40
|
-----|-----
|
32
41
|
example_one.py | 50.00
|
33
42
|
example_two.py | 35.60
|
34
43
|
example_three.py | 10.48
|
35
44
|
|
45
|
+
#### Maximum
|
46
|
+
|
47
|
+
File | Total | Line | Branch
|
48
|
+
-----|-----|-----|-----
|
49
|
+
example_one.py | 50.00 | 75.00 | 25.00
|
50
|
+
example_two.py | 35.50 | 20.50 | 50.50
|
36
51
|
|
37
52
|
## Installation
|
38
53
|
|
@@ -50,9 +65,25 @@ cobertura.warn_if_file_less_than(percentage: 50.0)
|
|
50
65
|
</pre>
|
51
66
|
</blockquote>
|
52
67
|
|
53
|
-
<blockquote>Show coverage of all files
|
68
|
+
<blockquote>Show default coverage of all files
|
69
|
+
<pre>
|
70
|
+
cobertura.report = build/reports/coverage.xml
|
71
|
+
cobertura.show_coverage
|
72
|
+
</pre>
|
73
|
+
</blockquote>
|
74
|
+
|
75
|
+
<blockquote>Use filename prefix to find your files - find your files in your filesystem. e.g Java projects are under "src/main/java".
|
76
|
+
<pre>
|
77
|
+
cobertura.report = build/reports/coverage.xml
|
78
|
+
cobertura.filename_prefix = "src/main/java"
|
79
|
+
cobertura.show_coverage
|
80
|
+
</pre>
|
81
|
+
</blockquote>
|
82
|
+
|
83
|
+
<blockquote>Show coverage of all files including line and branch rate
|
54
84
|
<pre>
|
55
85
|
cobertura.report = build/reports/coverage.xml
|
86
|
+
cobertura.additional_headers = [:line, :branch]
|
56
87
|
cobertura.show_coverage
|
57
88
|
</pre>
|
58
89
|
</blockquote>
|
@@ -68,6 +99,8 @@ cobertura.show_coverage
|
|
68
99
|
## Attributes
|
69
100
|
|
70
101
|
__`report`__ - Path to the cobertura xml report, e.g. `build/reports/coverage.xml`
|
102
|
+
__`additional_headers`__ - Array of symbols to include in the coverage report. Available options are `:line`, `:branch`
|
103
|
+
__`filename_prefix`__ - Path prefix to be added to the cobertura class filename attribute. e.g. `src/main/java`
|
71
104
|
|
72
105
|
## Methods
|
73
106
|
|
data/danger-cobertura.gemspec
CHANGED
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
+
spec.required_ruby_version = ">=2.2.0"
|
23
|
+
|
22
24
|
spec.add_runtime_dependency "danger-plugin-api", "~> 1.0"
|
23
25
|
spec.add_runtime_dependency "oga", "~> 2.15"
|
24
26
|
|
@@ -29,9 +31,11 @@ Gem::Specification.new do |spec|
|
|
29
31
|
# Testing support
|
30
32
|
spec.add_development_dependency "mocha", "~> 1.2"
|
31
33
|
spec.add_development_dependency "rspec", "~> 3.4"
|
34
|
+
spec.add_development_dependency "simplecov", "~> 0.16"
|
35
|
+
spec.add_development_dependency "simplecov-console", "~> 0.4"
|
32
36
|
|
33
37
|
# Linting code and docs
|
34
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
38
|
+
spec.add_development_dependency "rubocop", "~> 0.60"
|
35
39
|
spec.add_development_dependency "yard", "~> 0.9"
|
36
40
|
|
37
41
|
# Makes testing easy via `bundle exec guard`
|
@@ -1,26 +1,33 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# Container item for cobertura <class> entries
|
3
2
|
class CoverageItem
|
3
|
+
# Initialize an object using an xml node set containing the class information of a cobertura report.
|
4
|
+
#
|
5
|
+
# @param node [Oga::XML::NodeSet] NodeSet of a class
|
4
6
|
def initialize(node)
|
5
7
|
@node = node
|
6
8
|
end
|
7
9
|
|
10
|
+
# @return [Float] The combined coverage of branch and line rate
|
8
11
|
def total_percentage
|
9
|
-
@total_percentage ||= (
|
12
|
+
@total_percentage ||= (branch_rate + line_rate) / 2
|
10
13
|
end
|
11
14
|
|
15
|
+
# @return [Float] The branch coverage rate
|
12
16
|
def branch_rate
|
13
|
-
@branch_rate ||= @node.attribute("branch-rate").value.to_f
|
17
|
+
@branch_rate ||= @node.attribute("branch-rate").value.to_f * 100
|
14
18
|
end
|
15
19
|
|
20
|
+
# @return [Float] The line coverage rate
|
16
21
|
def line_rate
|
17
|
-
@line_rate ||= @node.attribute("line-rate").value.to_f
|
22
|
+
@line_rate ||= @node.attribute("line-rate").value.to_f * 100
|
18
23
|
end
|
19
24
|
|
20
|
-
|
21
|
-
|
25
|
+
# @return [String] Name of the class file with directory path
|
26
|
+
def filename
|
27
|
+
@filename ||= @node.attribute("filename").value.to_s
|
22
28
|
end
|
23
29
|
|
30
|
+
# @return [String] Name of the class file with package structure
|
24
31
|
def name
|
25
32
|
@name ||= @node.attribute("name").value.to_s
|
26
33
|
end
|
data/lib/cobertura/plugin.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
module Danger
|
4
2
|
# Show code coverage of modified and added files.
|
5
3
|
# Add warnings if minimum file coverage is not achieved.
|
@@ -13,19 +11,31 @@ module Danger
|
|
13
11
|
# @tags cobertura, coverage
|
14
12
|
#
|
15
13
|
class DangerCobertura < Plugin
|
14
|
+
require "oga"
|
16
15
|
require_relative "./coverage_item"
|
17
|
-
|
18
|
-
|
16
|
+
|
17
|
+
ERROR_FILE_NOT_SET = "Cobertura file not set. Use 'cobertura.file = \"path/to/my/report.xml\"'.".freeze
|
18
|
+
ERROR_FILE_NOT_FOUND = "No file found at %s".freeze
|
19
|
+
TABLE_COLUMN_LINE = "-----".freeze
|
19
20
|
|
20
21
|
# Path to the xml formatted cobertura report.
|
21
22
|
#
|
22
|
-
# @return
|
23
|
+
# @return [String] Report file.
|
23
24
|
attr_accessor :report
|
25
|
+
# Array of symbols which allows to extend the markdown report columns.
|
26
|
+
# Allowed symbols: :branch, :line
|
27
|
+
#
|
28
|
+
# @return [Array<Symbol>] Columns to add in the markdown report.
|
29
|
+
attr_accessor :additional_headers
|
30
|
+
# Path prefix to be added to the cobertura class filename attribute.
|
31
|
+
#
|
32
|
+
# @return [String] Prefix to add to filename path.
|
33
|
+
attr_accessor :filename_prefix
|
24
34
|
|
25
35
|
# Warn if a modified file has a lower total coverage than defined.
|
26
36
|
#
|
27
37
|
# @param percentage [Float] The minimum code coverage required for a file.
|
28
|
-
# @return [Array<String>]
|
38
|
+
# @return [Array<String>] Warnings of files with a lower coverage.
|
29
39
|
def warn_if_file_less_than(percentage:)
|
30
40
|
filtered_items.each do |item|
|
31
41
|
next unless item.total_percentage < percentage
|
@@ -36,58 +46,126 @@ module Danger
|
|
36
46
|
|
37
47
|
# Show markdown table of modified and added files.
|
38
48
|
#
|
39
|
-
# @return [Array<String>]
|
49
|
+
# @return [Array<String>] A markdown report of modified files and their coverage report.
|
40
50
|
def show_coverage
|
41
51
|
return if filtered_items.empty?
|
42
52
|
|
43
|
-
|
44
|
-
|
45
|
-
|
53
|
+
table = "## Code coverage\n".dup
|
54
|
+
table << table_header
|
55
|
+
table << table_separation
|
56
|
+
|
46
57
|
filtered_items.each do |item|
|
47
|
-
|
58
|
+
table << table_entry(item)
|
48
59
|
end
|
49
|
-
markdown
|
60
|
+
markdown table
|
50
61
|
end
|
51
62
|
|
52
63
|
private
|
53
64
|
|
65
|
+
# Create the show_coverage column headers.
|
66
|
+
#
|
67
|
+
# @return [String] Markdown for table headers.
|
68
|
+
def table_header
|
69
|
+
line = "File|Total".dup
|
70
|
+
line << "|Line" if header_line_rate?
|
71
|
+
line << "|Branch" if header_branch_rate?
|
72
|
+
line << "\n"
|
73
|
+
end
|
74
|
+
|
75
|
+
# Create the show_coverage table header separation line.
|
76
|
+
#
|
77
|
+
# @return [String] Markdown for table header separation.
|
78
|
+
def table_separation
|
79
|
+
line = "#{TABLE_COLUMN_LINE}|#{TABLE_COLUMN_LINE}".dup
|
80
|
+
line << "|#{TABLE_COLUMN_LINE}" if header_line_rate?
|
81
|
+
line << "|#{TABLE_COLUMN_LINE}" if header_branch_rate?
|
82
|
+
line << "\n"
|
83
|
+
end
|
84
|
+
|
85
|
+
# Create the show_coverage table rows.
|
86
|
+
#
|
87
|
+
# @param item [CoverageItem] Coverage item to put information in the table row.
|
88
|
+
# @return [String] Markdown for table rows.
|
89
|
+
def table_entry(item)
|
90
|
+
line = item.name.dup
|
91
|
+
line << "|#{format_coverage(item.total_percentage)}"
|
92
|
+
line << "|#{format_coverage(item.line_rate)}" if header_line_rate?
|
93
|
+
line << "|#{format_coverage(item.branch_rate)}" if header_branch_rate?
|
94
|
+
line << "\n"
|
95
|
+
end
|
96
|
+
|
97
|
+
# Check if additional_headers includes symbol :line
|
98
|
+
#
|
99
|
+
# @return [Boolean] :line header defined.
|
100
|
+
def header_line_rate?
|
101
|
+
!additional_headers.nil? && additional_headers.include?(:line)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Check if additional_headers includes symbol :branch
|
105
|
+
#
|
106
|
+
# @return [Boolean] :branch header defined.
|
107
|
+
def header_branch_rate?
|
108
|
+
!additional_headers.nil? && additional_headers.include?(:branch)
|
109
|
+
end
|
110
|
+
|
111
|
+
# Format coverage output to two decimals.
|
112
|
+
#
|
113
|
+
# @param coverage [Float] Value to format.
|
114
|
+
# @return [String] Formatted coverage string.
|
115
|
+
def format_coverage(coverage)
|
116
|
+
format("%.2f", coverage)
|
117
|
+
end
|
118
|
+
|
54
119
|
# Getter for coverage items of targeted files.
|
120
|
+
# Only coverage items contained in the targeted files list will be returned.
|
55
121
|
#
|
56
|
-
# @return [Array<CoverageItem>]
|
122
|
+
# @return [Array<CoverageItem>] Filtered array of items
|
57
123
|
def filtered_items
|
58
124
|
@filtered_items ||= coverage_items.select do |item|
|
59
|
-
target_files.include? item.
|
125
|
+
target_files.include?(item_filename(item)) && !item.name.include?("$")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Combine item filename with prefix.
|
130
|
+
#
|
131
|
+
# @param item [CoverageItem] Coverage item to create the full filename.
|
132
|
+
# @return [String] Combined filename.
|
133
|
+
def item_filename(item)
|
134
|
+
result = "".dup
|
135
|
+
if filename_prefix
|
136
|
+
result << filename_prefix
|
137
|
+
result << "/" unless filename_prefix.chars.last == "/"
|
60
138
|
end
|
139
|
+
result << item.filename
|
61
140
|
end
|
62
141
|
|
63
|
-
# A getter for current
|
142
|
+
# A getter for current modified and added files.
|
64
143
|
#
|
65
|
-
# @return [
|
144
|
+
# @return [Danger::FileList] Wrapper FileList object.
|
66
145
|
def target_files
|
67
146
|
@target_files ||= git.modified_files + git.added_files
|
68
147
|
end
|
69
148
|
|
70
149
|
# Parse the defined coverage report file.
|
71
150
|
#
|
72
|
-
# @return [Oga::XML::Document]
|
151
|
+
# @return [Oga::XML::Document] The root xml object.
|
73
152
|
def parse
|
74
|
-
require "oga"
|
75
153
|
raise ERROR_FILE_NOT_SET if report.nil? || report.empty?
|
76
154
|
raise format(ERROR_FILE_NOT_FOUND, report) unless File.exist?(report)
|
77
155
|
|
78
156
|
Oga.parse_xml(File.read(report))
|
79
157
|
end
|
80
158
|
|
81
|
-
#
|
159
|
+
# Convenient method to not always parse the report but keep it in the memory.
|
82
160
|
#
|
83
|
-
# @return [Oga::XML::Document]
|
161
|
+
# @return [Oga::XML::Document] The root xml object.
|
84
162
|
def xml_report
|
85
163
|
@xml_report ||= parse
|
86
164
|
end
|
87
165
|
|
88
|
-
#
|
166
|
+
# Extract and create all class items from the xml report.
|
89
167
|
#
|
90
|
-
# @return [Array<CoverageItem>]
|
168
|
+
# @return [Array<CoverageItem>] Items with cobertura class information.
|
91
169
|
def coverage_items
|
92
170
|
@coverage_items ||= xml_report.xpath("//class").map do |node|
|
93
171
|
CoverageItem.new(node)
|
data/lib/danger_cobertura.rb
CHANGED
data/lib/danger_plugin.rb
CHANGED
data/spec/assets/coverage.xml
CHANGED
@@ -277,6 +277,12 @@
|
|
277
277
|
<line branch="true" condition-coverage="0% (0/2)" hits="0" number="88"/>
|
278
278
|
</lines>
|
279
279
|
</class>
|
280
|
+
<class branch-rate="0" complexity="0" filename="sub_folder/sub_three.py" line-rate="0" name="sub_three$.py">
|
281
|
+
<methods/>
|
282
|
+
<lines>
|
283
|
+
<line branch="true" condition-coverage="0% (0/2)" hits="0" number="88"/>
|
284
|
+
</lines>
|
285
|
+
</class>
|
280
286
|
</classes>
|
281
287
|
</package>
|
282
288
|
</packages>
|
data/spec/cobertura_spec.rb
CHANGED
@@ -53,6 +53,65 @@ module Danger
|
|
53
53
|
|
54
54
|
expect(@dangerfile.status_report[:warnings]).to be_empty
|
55
55
|
end
|
56
|
+
|
57
|
+
it "adds warn for modified files" do
|
58
|
+
@dangerfile.git.stubs(:modified_files).returns(%w(sub_folder/sub_two.py))
|
59
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
60
|
+
|
61
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_two.py has less than 90.0% coverage")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "adds warn for added files" do
|
65
|
+
@dangerfile.git.stubs(:added_files).returns(%w(sub_folder/sub_two.py))
|
66
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
67
|
+
|
68
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_two.py has less than 90.0% coverage")
|
69
|
+
end
|
70
|
+
|
71
|
+
it "adds warn for added and modified files" do
|
72
|
+
@dangerfile.git.stubs(:added_files).returns(%w(sub_folder/sub_two.py))
|
73
|
+
@dangerfile.git.stubs(:modified_files).returns(%w(sub_folder/sub_one.py))
|
74
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
75
|
+
|
76
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_two.py has less than 90.0% coverage")
|
77
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_one.py has less than 90.0% coverage")
|
78
|
+
end
|
79
|
+
|
80
|
+
it "does not add if filename missing prefix" do
|
81
|
+
# sub_folder/sub_two.py in xml
|
82
|
+
@dangerfile.git.stubs(:added_files).returns(%w(my_prefix_dir/sub_folder/sub_two.py))
|
83
|
+
expect(@my_plugin.filename_prefix).to be_nil
|
84
|
+
|
85
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
86
|
+
|
87
|
+
expect(@dangerfile.status_report[:warnings]).not_to include("sub_two.py has less than 90.0% coverage")
|
88
|
+
end
|
89
|
+
|
90
|
+
it "does add if filename prefix set" do
|
91
|
+
# sub_folder/sub_two.py in xml
|
92
|
+
@dangerfile.git.stubs(:added_files).returns(%w(my_prefix_dir/sub_folder/sub_two.py))
|
93
|
+
@my_plugin.filename_prefix = "my_prefix_dir"
|
94
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
95
|
+
|
96
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_two.py has less than 90.0% coverage")
|
97
|
+
end
|
98
|
+
|
99
|
+
it "ignores filename prefix slash" do
|
100
|
+
# sub_folder/sub_two.py in xml
|
101
|
+
@dangerfile.git.stubs(:added_files).returns(%w(my_prefix_dir/sub_folder/sub_two.py))
|
102
|
+
@my_plugin.filename_prefix = "my_prefix_dir/"
|
103
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
104
|
+
|
105
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_two.py has less than 90.0% coverage")
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should not add name with $" do
|
109
|
+
@dangerfile.git.stubs(:added_files).returns(%w(sub_folder/sub_three.py))
|
110
|
+
@my_plugin.warn_if_file_less_than(percentage: 90.0)
|
111
|
+
|
112
|
+
expect(@dangerfile.status_report[:warnings]).to include("sub_three.py has less than 90.0% coverage")
|
113
|
+
expect(@dangerfile.status_report[:warnings]).not_to include("sub_three$.py has less than 90.0% coverage")
|
114
|
+
end
|
56
115
|
end
|
57
116
|
|
58
117
|
describe "show_coverage" do
|
@@ -77,13 +136,109 @@ module Danger
|
|
77
136
|
end.to raise_error(/#{@my_plugin.report}/)
|
78
137
|
end
|
79
138
|
|
80
|
-
it "
|
139
|
+
it "adds coverage for modified files" do
|
140
|
+
@dangerfile.git.stubs(:modified_files).returns(%w(sub_folder/sub_two.py))
|
141
|
+
@my_plugin.show_coverage
|
142
|
+
|
143
|
+
expect(@dangerfile.status_report[:markdowns]).not_to be_empty
|
144
|
+
end
|
145
|
+
|
146
|
+
it "adds coverage for added files" do
|
147
|
+
@dangerfile.git.stubs(:added_files).returns(%w(sub_folder/sub_two.py))
|
148
|
+
@my_plugin.show_coverage
|
149
|
+
|
150
|
+
expect(@dangerfile.status_report[:markdowns]).not_to be_empty
|
151
|
+
end
|
152
|
+
|
153
|
+
it "adds coverage for added and modified files" do
|
154
|
+
@dangerfile.git.stubs(:added_files).returns(%w(sub_folder/sub_two.py))
|
155
|
+
@dangerfile.git.stubs(:modified_files).returns(%w(sub_folder/sub_one.py))
|
156
|
+
@my_plugin.show_coverage
|
157
|
+
|
158
|
+
expect(@dangerfile.status_report[:markdowns]).not_to be_empty
|
159
|
+
end
|
160
|
+
|
161
|
+
it "default does not add branch and line" do
|
162
|
+
@dangerfile.git.stubs(:modified_files).returns(["sub_folder/sub_three.py"])
|
163
|
+
@my_plugin.show_coverage
|
164
|
+
|
165
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("File")
|
166
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Total")
|
167
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include(table_column_line(2))
|
168
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include("Branch")
|
169
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include("Line")
|
170
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include(table_column_line(4))
|
171
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("0.00")
|
172
|
+
end
|
173
|
+
|
174
|
+
it "additional_header line adds line rate" do
|
175
|
+
@dangerfile.git.stubs(:modified_files).returns(["sub_folder/sub_three.py"])
|
176
|
+
@my_plugin.additional_headers = [:line]
|
177
|
+
@my_plugin.show_coverage
|
178
|
+
|
179
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("File")
|
180
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Total")
|
181
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Line")
|
182
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include(table_column_line(3))
|
183
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include("Branch")
|
184
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include(table_column_line(4))
|
185
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("0.00")
|
186
|
+
end
|
187
|
+
|
188
|
+
it "additional_header branch adds branch rate" do
|
81
189
|
@dangerfile.git.stubs(:modified_files).returns(["sub_folder/sub_three.py"])
|
190
|
+
@my_plugin.additional_headers = [:branch]
|
82
191
|
@my_plugin.show_coverage
|
83
192
|
|
84
|
-
expect(@dangerfile.status_report[:markdowns][0].message).to include("
|
193
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("File")
|
194
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Total")
|
195
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Branch")
|
196
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include(table_column_line(3))
|
197
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include("Line")
|
198
|
+
expect(@dangerfile.status_report[:markdowns][0].message).not_to include(table_column_line(4))
|
85
199
|
expect(@dangerfile.status_report[:markdowns][0].message).to include("0.00")
|
86
200
|
end
|
201
|
+
|
202
|
+
it "additional_header line and branch adds rate" do
|
203
|
+
@dangerfile.git.stubs(:modified_files).returns(["sub_folder/sub_three.py"])
|
204
|
+
@my_plugin.additional_headers = %i(branch line)
|
205
|
+
@my_plugin.show_coverage
|
206
|
+
|
207
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("File")
|
208
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Total")
|
209
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Branch")
|
210
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("Line")
|
211
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include(table_column_line(4))
|
212
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include("0.00")
|
213
|
+
end
|
214
|
+
|
215
|
+
it "does not show coverage if filename prefix missing" do
|
216
|
+
# sub_folder/sub_two.py in xml
|
217
|
+
@dangerfile.git.stubs(:added_files).returns(%w(my_prefix_dir/sub_folder/sub_two.py))
|
218
|
+
expect(@my_plugin.filename_prefix).to be_nil
|
219
|
+
|
220
|
+
@my_plugin.show_coverage
|
221
|
+
|
222
|
+
expect(@dangerfile.status_report[:markdowns]).to be_empty
|
223
|
+
end
|
224
|
+
|
225
|
+
it "does show coverage if filename prefix matches" do
|
226
|
+
# sub_folder/sub_two.py in xml
|
227
|
+
@dangerfile.git.stubs(:added_files).returns(%w(my_prefix_dir/sub_folder/sub_two.py))
|
228
|
+
@my_plugin.filename_prefix = "my_prefix_dir"
|
229
|
+
@my_plugin.show_coverage
|
230
|
+
|
231
|
+
expect(@dangerfile.status_report[:markdowns]).not_to be_empty
|
232
|
+
end
|
233
|
+
|
234
|
+
it "ignores filename prefix slash" do
|
235
|
+
# sub_folder/sub_two.py in xml
|
236
|
+
@dangerfile.git.stubs(:added_files).returns(%w(my_prefix_dir/sub_folder/sub_two.py))
|
237
|
+
@my_plugin.filename_prefix = "my_prefix_dir/"
|
238
|
+
@my_plugin.show_coverage
|
239
|
+
|
240
|
+
expect(@dangerfile.status_report[:markdowns]).not_to be_empty
|
241
|
+
end
|
87
242
|
end
|
88
243
|
end
|
89
244
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,6 +11,13 @@ require "pry"
|
|
11
11
|
require "rspec"
|
12
12
|
require "danger"
|
13
13
|
require "mocha"
|
14
|
+
require "simplecov"
|
15
|
+
require "simplecov-console"
|
16
|
+
|
17
|
+
require_relative "./helper/cobertura_helper"
|
18
|
+
|
19
|
+
SimpleCov.formatter = SimpleCov::Formatter::Console
|
20
|
+
SimpleCov.start
|
14
21
|
|
15
22
|
if `git remote -v` == ""
|
16
23
|
puts "You cannot run tests without setting a local git remote on this repo"
|
@@ -24,6 +31,7 @@ RSpec.configure do |config|
|
|
24
31
|
config.color = true
|
25
32
|
config.tty = true
|
26
33
|
config.mock_with :mocha
|
34
|
+
config.include Helpers
|
27
35
|
end
|
28
36
|
|
29
37
|
require "danger_plugin"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danger-cobertura
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyaak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: danger-plugin-api
|
@@ -94,20 +94,48 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.4'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.16'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.16'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov-console
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.4'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.4'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: rubocop
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
129
|
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0.
|
131
|
+
version: '0.60'
|
104
132
|
type: :development
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
136
|
- - "~>"
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
138
|
+
version: '0.60'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: yard
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,6 +213,7 @@ executables: []
|
|
185
213
|
extensions: []
|
186
214
|
extra_rdoc_files: []
|
187
215
|
files:
|
216
|
+
- ".codeclimate.yml"
|
188
217
|
- ".gitignore"
|
189
218
|
- ".rubocop.yml"
|
190
219
|
- ".travis.yml"
|
@@ -202,6 +231,7 @@ files:
|
|
202
231
|
- lib/danger_plugin.rb
|
203
232
|
- spec/assets/coverage.xml
|
204
233
|
- spec/cobertura_spec.rb
|
234
|
+
- spec/helper/cobertura_helper.rb
|
205
235
|
- spec/spec_helper.rb
|
206
236
|
homepage: https://github.com/Kyaak/danger-cobertura
|
207
237
|
licenses:
|
@@ -215,7 +245,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
215
245
|
requirements:
|
216
246
|
- - ">="
|
217
247
|
- !ruby/object:Gem::Version
|
218
|
-
version:
|
248
|
+
version: 2.2.0
|
219
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
250
|
requirements:
|
221
251
|
- - ">="
|
@@ -223,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
253
|
version: '0'
|
224
254
|
requirements: []
|
225
255
|
rubyforge_project:
|
226
|
-
rubygems_version: 2.7.
|
256
|
+
rubygems_version: 2.7.7
|
227
257
|
signing_key:
|
228
258
|
specification_version: 4
|
229
259
|
summary: This plugin allows parsing of an xml coverage report generated by cobertura
|
@@ -231,4 +261,5 @@ summary: This plugin allows parsing of an xml coverage report generated by cober
|
|
231
261
|
test_files:
|
232
262
|
- spec/assets/coverage.xml
|
233
263
|
- spec/cobertura_spec.rb
|
264
|
+
- spec/helper/cobertura_helper.rb
|
234
265
|
- spec/spec_helper.rb
|