slack_test_reporter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7d61ff5902bced0dc6cef318e47511f45ef5d95ee6fc9d0fa3490e429bafff6d
4
+ data.tar.gz: 714ad637afc6d7ad38654841b01adf0232d160a5decb568d8a1d2b9eca307cb7
5
+ SHA512:
6
+ metadata.gz: 6c8b1ed8c70ff40f22c0314d44eab9ed179ff8324fe18a8c8d6d96d2d755623b12e3f3dceb6f6ebb66d589be6ee14ece0f6e03750a004a20106899e24d099e53
7
+ data.tar.gz: 21a32979c337aee3c812246d0ee84f0d0b58accd5ceda4580c96c76a8ae37c18b1c10dd91d953173454fcd19ea9b1e718fd214ca53ad47b109c75a001566c52b
data/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_WITHOUT: "production"
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .idea/
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --require spec_helper
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ slack-test-reporter
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.7.2
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,100 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ slack_test_reporter (0.0.1)
5
+ memoist (~> 0.16)
6
+ nokogiri (~> 1.10)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (6.1.3.1)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
16
+ zeitwerk (~> 2.3)
17
+ ast (2.4.2)
18
+ binding_ninja (0.2.3)
19
+ coderay (1.1.3)
20
+ concurrent-ruby (1.1.8)
21
+ diff-lcs (1.4.4)
22
+ factory_bot (6.1.0)
23
+ activesupport (>= 5.0.0)
24
+ i18n (1.8.10)
25
+ concurrent-ruby (~> 1.0)
26
+ jaro_winkler (1.5.4)
27
+ memoist (0.16.2)
28
+ method_source (1.0.0)
29
+ mini_portile2 (2.5.0)
30
+ minitest (5.14.4)
31
+ nokogiri (1.11.3)
32
+ mini_portile2 (~> 2.5.0)
33
+ racc (~> 1.4)
34
+ parallel (1.20.1)
35
+ parser (3.0.1.0)
36
+ ast (~> 2.4.1)
37
+ proc_to_ast (0.1.0)
38
+ coderay
39
+ parser
40
+ unparser
41
+ pry (0.14.1)
42
+ coderay (~> 1.1)
43
+ method_source (~> 1.0)
44
+ racc (1.5.2)
45
+ rainbow (3.0.0)
46
+ rake (12.3.3)
47
+ rexml (3.2.5)
48
+ rspec (3.10.0)
49
+ rspec-core (~> 3.10.0)
50
+ rspec-expectations (~> 3.10.0)
51
+ rspec-mocks (~> 3.10.0)
52
+ rspec-core (3.10.1)
53
+ rspec-support (~> 3.10.0)
54
+ rspec-expectations (3.10.1)
55
+ diff-lcs (>= 1.2.0, < 2.0)
56
+ rspec-support (~> 3.10.0)
57
+ rspec-mocks (3.10.2)
58
+ diff-lcs (>= 1.2.0, < 2.0)
59
+ rspec-support (~> 3.10.0)
60
+ rspec-parameterized (0.4.2)
61
+ binding_ninja (>= 0.2.3)
62
+ parser
63
+ proc_to_ast
64
+ rspec (>= 2.13, < 4)
65
+ unparser
66
+ rspec-support (3.10.2)
67
+ rubocop (0.82.0)
68
+ jaro_winkler (~> 1.5.1)
69
+ parallel (~> 1.10)
70
+ parser (>= 2.7.0.1)
71
+ rainbow (>= 2.2.2, < 4.0)
72
+ rexml
73
+ ruby-progressbar (~> 1.7)
74
+ unicode-display_width (>= 1.4.0, < 2.0)
75
+ rubocop-rspec (1.41.0)
76
+ rubocop (>= 0.68.1)
77
+ ruby-progressbar (1.11.0)
78
+ tzinfo (2.0.4)
79
+ concurrent-ruby (~> 1.0)
80
+ unicode-display_width (1.7.0)
81
+ unparser (0.6.0)
82
+ diff-lcs (~> 1.3)
83
+ parser (>= 3.0.0)
84
+ zeitwerk (2.4.2)
85
+
86
+ PLATFORMS
87
+ ruby
88
+
89
+ DEPENDENCIES
90
+ factory_bot (~> 6.1)
91
+ pry (~> 0.11)
92
+ rake (~> 12.2)
93
+ rspec (~> 3.7)
94
+ rspec-parameterized (~> 0.4.2)
95
+ rubocop (~> 0.82.0)
96
+ rubocop-rspec (~> 1.36)
97
+ slack_test_reporter!
98
+
99
+ BUNDLED WITH
100
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,94 @@
1
+ # Slack Test Reporter
2
+
3
+ # Reports
4
+
5
+ A report has many suites
6
+
7
+ # Suites
8
+
9
+ A suite has many results
10
+
11
+ # Results
12
+
13
+ # Example
14
+
15
+ Converts this JUnit XML Test summary into a formatted Slack message
16
+
17
+ ```json
18
+ {
19
+ "total_time": 32328.18632,
20
+ "total_count": 1345,
21
+ "success_count": 1247,
22
+ "failed_count": 0,
23
+ "skipped_count": 98,
24
+ "error_count": 0,
25
+ "test_suites": [
26
+ {
27
+ "name": "ee:instance",
28
+ "total_time": 6787.161369000001,
29
+ "total_count": 320,
30
+ "success_count": 300,
31
+ "failed_count": 0,
32
+ "skipped_count": 20,
33
+ "error_count": 0,
34
+ "suite_error": null,
35
+ "test_cases": [
36
+ {
37
+ "status": "success",
38
+ "name": "Verify In merge trains new thread discussion does not drop MR",
39
+ "classname": "qa.specs.features.ee.browser_ui.4_verify.new_discussion_not_dropping_merge_trains_mr_spec",
40
+ "file": "./qa/specs/features/browser_ui/4_verify/new_discussion_not_dropping_merge_trains_mr_spec.rb",
41
+ "execution_time": 173.831842,
42
+ "system_output": null,
43
+ "stack_trace": null,
44
+ "recent_failures": null
45
+ },
46
+ {
47
+ "status": "success",
48
+ "name": "Manage standard when admin approval is required allows user login after approval",
49
+ "classname": "qa.specs.features.browser_ui.1_manage.login.register_spec",
50
+ "file": "./qa/specs/features/browser_ui/1_manage/login/register_spec.rb",
51
+ "execution_time": 173.831842,
52
+ "system_output": null,
53
+ "stack_trace": null,
54
+ "recent_failures": null
55
+ }
56
+ ]
57
+ },
58
+ {
59
+ "name": "ee:relative_url",
60
+ "total_time": 6787.161369000001,
61
+ "total_count": 320,
62
+ "success_count": 300,
63
+ "failed_count": 0,
64
+ "skipped_count": 20,
65
+ "error_count": 0,
66
+ "suite_error": null,
67
+ "test_cases": [
68
+ {
69
+ "status": "success",
70
+ "name": "Verify In merge trains new thread discussion does not drop MR",
71
+ "classname": "qa.specs.features.ee.browser_ui.4_verify.new_discussion_not_dropping_merge_trains_mr_spec",
72
+ "file": "./qa/specs/features/browser_ui/4_verify/new_discussion_not_dropping_merge_trains_mr_spec.rb",
73
+ "execution_time": 173.831842,
74
+ "system_output": null,
75
+ "stack_trace": null,
76
+ "recent_failures": null
77
+ },
78
+ {
79
+ "status": "failed",
80
+ "name": "Manage standard when admin approval is required allows user login after approval",
81
+ "classname": "qa.specs.features.browser_ui.1_manage.login.register_spec",
82
+ "file": "./qa/specs/features/browser_ui/1_manage/login/register_spec.rb",
83
+ "execution_time": 173.831842,
84
+ "system_output": null,
85
+ "stack_trace": null,
86
+ "recent_failures": null
87
+ }
88
+ ]
89
+ }
90
+ ]
91
+ }
92
+ ```
93
+
94
+ ![example](https://i.ibb.co/WK2Y9KR/Screen-Shot-2021-04-14-at-4-10-20-PM.png)
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ autoload :Result, 'slack_test_reporter/result'
5
+ autoload :Suite, 'slack_test_reporter/suite'
6
+ autoload :Report, 'slack_test_reporter/report'
7
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ module Formatter
5
+ class Slack
6
+
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ module Parser
5
+ class JUnit < ReportParser
6
+
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ # Representation of a Test Report
5
+ # A Report has many Suites
6
+ class Report
7
+ attr_accessor :time, :count, :success, :fail, :skipped, :error
8
+
9
+ attr_accessor :suites
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ # Class to Unmarshall a dataset into
5
+ class ReportParser
6
+
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ # Representation of a Test Result
5
+ class Result
6
+ attr_reader :status
7
+ attr_accessor :name,
8
+ :classname,
9
+ :file,
10
+ :execution_time,
11
+ :output,
12
+ :stack_trace
13
+
14
+ # Check if the test had passed
15
+ # @return [Boolean] true if the test had passed
16
+ def passed?; status == :passed; end
17
+
18
+ # Check if the test had been skipped
19
+ # @return [Boolean] true if the test had been skipped
20
+ def skipped?; status == :skipped; end
21
+
22
+ # Check if the test had failed
23
+ # @return [Boolean] true if the test had failed
24
+ def failed?; status == :failed; end
25
+
26
+ # Set the status of the test result
27
+ def status=(status)
28
+ @status = status.to_sym
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackTestReporter
4
+ class Suite
5
+ attr_accessor :name,
6
+ :time,
7
+ :total_count,
8
+ :total_successes,
9
+ :total_failures,
10
+ :total_skipped,
11
+ :total_errors,
12
+ :error_message
13
+
14
+ attr_accessor :results
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'slack_test_reporter'
8
+ spec.version = '0.0.1'
9
+ spec.authors = ['GitLab Quality']
10
+ spec.email = ['gitlab-qa@gitlab.com']
11
+
12
+ spec.summary = 'Parse test results from various sources and post reports to Slack'
13
+ spec.homepage = 'https://gitlab.com/gitlab-org/quality/junit-slack-reporter'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`
17
+ .split("\x0").reject { |f| f.match(%r{^spec/}) }
18
+ spec.bindir = 'bin'
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_development_dependency 'pry', '~> 0.11'
23
+ spec.add_development_dependency 'rake', '~> 12.2'
24
+ spec.add_development_dependency 'rspec', '~> 3.7'
25
+ spec.add_development_dependency 'rubocop', '~> 0.82.0'
26
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
27
+ spec.add_development_dependency 'factory_bot', '~> 6.1'
28
+ spec.add_development_dependency 'rspec-parameterized', '~> 0.4.2'
29
+ spec.add_runtime_dependency 'nokogiri', '~> 1.10'
30
+ spec.add_runtime_dependency 'memoist', '~> 0.16'
31
+ end
metadata ADDED
@@ -0,0 +1,185 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: slack_test_reporter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - GitLab Quality
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.82.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.82.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.36'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.36'
83
+ - !ruby/object:Gem::Dependency
84
+ name: factory_bot
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '6.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '6.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-parameterized
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.4.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.4.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: nokogiri
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.10'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.10'
125
+ - !ruby/object:Gem::Dependency
126
+ name: memoist
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.16'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.16'
139
+ description:
140
+ email:
141
+ - gitlab-qa@gitlab.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".bundle/config"
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - ".ruby-gemset"
150
+ - ".ruby-version"
151
+ - Gemfile
152
+ - Gemfile.lock
153
+ - README.md
154
+ - lib/slack_test_reporter.rb
155
+ - lib/slack_test_reporter/formatter/slack.rb
156
+ - lib/slack_test_reporter/parser/junit.rb
157
+ - lib/slack_test_reporter/report.rb
158
+ - lib/slack_test_reporter/report_parser.rb
159
+ - lib/slack_test_reporter/result.rb
160
+ - lib/slack_test_reporter/suite.rb
161
+ - slack_test_reporter.gemspec
162
+ homepage: https://gitlab.com/gitlab-org/quality/junit-slack-reporter
163
+ licenses:
164
+ - MIT
165
+ metadata: {}
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ requirements: []
181
+ rubygems_version: 3.1.4
182
+ signing_key:
183
+ specification_version: 4
184
+ summary: Parse test results from various sources and post reports to Slack
185
+ test_files: []