allure-ruby-commons 2.13.5.rc.1 → 2.13.6.2

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: b5e32590e85ab38aeb176662bbc9347d4db8f403b1a79faff049d54cc42ef148
4
- data.tar.gz: a9fac0c1035c7a7e17aa4f08f07f461cf08c6d4dad69f10a935b08d0bb1393c1
3
+ metadata.gz: 2dde5d93b183282927b03e256e2d9cbe933fd234aa9230545b7d91f074111a20
4
+ data.tar.gz: 8c05594912decb62f1fc9cc52ebdc85ff9a506c6bd1cbb8cb0a71f7d54102dca
5
5
  SHA512:
6
- metadata.gz: 9f101580f643b021d6854a9eb21e5aad0ff0d52a379b6dde1777390a50274bc9a513f51c0546729f3500f0d82759e6704fb25176d980e16db73064da79cb8131
7
- data.tar.gz: d7acaf42f7f33cc2b7dd6fd81d99a40055603abe06cd1df1136e1472c0de6e2c18824f0b26e520e1ddf7a76be606940dc7de737dcc14a2131a829eccfd5e8c04
6
+ metadata.gz: f8feed62b8a1f8c1182566623ac01e35356f6ce43dc86479b76175ae0cee0480517df3f5bc349a624a8ae4769acc1e72e10ccde649fc204debe508dd8b104783
7
+ data.tar.gz: f58060aa2b39d17b5a28b7ae222c049d96d734a64ea238d27a2fa536fd4010015fe11c3abbd43cb6ce28ec1b7548dffa245dc7c75f1fdf622c1e0cb04a24551c
data/README.md CHANGED
@@ -11,7 +11,7 @@ you can just create the report of any other kind using the basic Allure terms.
11
11
  Add the dependency to your Gemfile
12
12
 
13
13
  ```ruby
14
- gem 'allure-ruby-commons'
14
+ gem "allure-ruby-commons"
15
15
  ```
16
16
 
17
17
  ## Configuration
@@ -19,13 +19,13 @@ Add the dependency to your Gemfile
19
19
  Following configuration options are supported:
20
20
 
21
21
  ```ruby
22
- Allure.configure do |c|
23
- c.results_directory = "/whatever/you/like"
24
- c.clean_results_directory = true
25
- c.logging_level = Logger::INFO
22
+ Allure.configure do |config|
23
+ config.results_directory = "/whatever/you/like"
24
+ config.clean_results_directory = true
25
+ config.logging_level = Logger::INFO
26
26
  # these are used for creating links to bugs or test cases where {} is replaced with keys of relevant items
27
- c.link_tms_pattern = "http://www.jira.com/browse/{}"
28
- c.link_issue_pattern = "http://www.jira.com/browse/{}"
27
+ config.link_tms_pattern = "http://www.jira.com/browse/{}"
28
+ config.link_issue_pattern = "http://www.jira.com/browse/{}"
29
29
  end
30
30
  ```
31
31
 
@@ -35,6 +35,10 @@ Getting the configuration object:
35
35
  Allure.configuration
36
36
  ```
37
37
 
38
+ ### Log level
39
+
40
+ Log level can be also configured via environment variable `ALLURE_LOG_LEVEL` which accepts one of the following values: `DEBUG INFO WARN ERROR FATAL UNKNOWN`.
41
+
38
42
  ## Allure lifecycle
39
43
 
40
44
  Reports are built using API defined in AllureLifecycle class and using allure specific entities defined in models.
@@ -9,30 +9,30 @@ require_rel "allure_ruby_commons/**/*rb"
9
9
  module Allure
10
10
  class << self
11
11
  # Get thread specific allure lifecycle object
12
- # @return [Allure::AllureLifecycle]
12
+ # @return [AllureLifecycle]
13
13
  def lifecycle
14
14
  Thread.current[:lifecycle] ||= AllureLifecycle.new
15
15
  end
16
16
 
17
17
  # Set lifecycle object
18
- # @param [Allure::AllureLifecycle] lifecycle
18
+ # @param [AllureLifecycle] lifecycle
19
19
  # @return [void]
20
20
  def lifecycle=(lifecycle)
21
21
  Thread.current[:lifecycle] = lifecycle
22
22
  end
23
23
 
24
24
  # Get allure configuration
25
- # @return [Allure::Config]
25
+ # @return [Config]
26
26
  def configuration
27
- Config
27
+ Config.instance
28
28
  end
29
29
 
30
30
  # Set allure configuration
31
- # @yieldparam [Allure::Config]
31
+ # @yieldparam [Config]
32
32
  # @yieldreturn [void]
33
33
  # @return [void]
34
34
  def configure
35
- yield(Config)
35
+ yield(configuration)
36
36
  end
37
37
 
38
38
  # Add epic to current test case
@@ -131,7 +131,7 @@ module Allure
131
131
  # Add attachment to current test case or step
132
132
  # @param [String] name Attachment name
133
133
  # @param [File, String] source File or string to save as attachment
134
- # @param [String] type attachment type defined in {Allure::ContentType} or any other valid mime type
134
+ # @param [String] type attachment type defined in {ContentType} or any other valid mime type
135
135
  # @param [Boolean] test_case add attachment to current test case instead of test step
136
136
  # @return [void]
137
137
  def add_attachment(name:, source:, type:, test_case: false)
@@ -146,7 +146,7 @@ module Allure
146
146
  end
147
147
 
148
148
  # Add categories info
149
- # @param [File, Array<Allure::Category>] categories
149
+ # @param [File, Array<Category>] categories
150
150
  # @return [void]
151
151
  def add_categories(categories)
152
152
  lifecycle.write_categories(categories)
@@ -154,7 +154,7 @@ module Allure
154
154
 
155
155
  # Add step with provided name and optional status to current test step, fixture or test case
156
156
  # @param [String] name
157
- # @param [Symbol] status <Allure::Status>, <Allure::Status::PASSED> by default
157
+ # @param [Symbol] status {Status}, {Status::PASSED} by default
158
158
  # @return [void]
159
159
  def step(name:, status: nil)
160
160
  lifecycle.add_test_step(StepResult.new(name: name, status: status || Status::PASSED, stage: Stage::FINISHED))
@@ -11,7 +11,7 @@ module Allure
11
11
  def initialize
12
12
  @test_context = []
13
13
  @step_context = []
14
- @logger = Logger.new(STDOUT, level: Config.logging_level)
14
+ @logger = Logger.new(STDOUT, level: Config.instance.logging_level)
15
15
  @file_writer = FileWriter.new
16
16
  end
17
17
 
@@ -22,6 +22,8 @@ module Allure
22
22
  # @return [Allure::TestResultContainer]
23
23
  def start_test_container(test_result_container)
24
24
  test_result_container.tap do |container|
25
+ logger.debug { "Starting test container: #{container.name}" }
26
+
25
27
  container.start = ResultUtils.timestamp
26
28
  @test_context.push(container)
27
29
  end
@@ -36,7 +38,7 @@ module Allure
36
38
  # @return [void]
37
39
  def update_test_container
38
40
  unless current_test_result_container
39
- return logger.error("Could not update test container, no container is running.")
41
+ return logger.error { "Could not update test container, no container is running." }
40
42
  end
41
43
 
42
44
  yield(current_test_result_container)
@@ -46,10 +48,11 @@ module Allure
46
48
  # @return [void]
47
49
  def stop_test_container
48
50
  unless current_test_result_container
49
- return logger.error("Could not stop test container, no container is running.")
51
+ return logger.error { "Could not stop test container, no container is running." }
50
52
  end
51
53
 
52
54
  current_test_result_container.tap do |container|
55
+ logger.debug { "Stopping container: #{container.name}" }
53
56
  container.stop = ResultUtils.timestamp
54
57
  file_writer.write_test_result_container(container)
55
58
  clear_last_test_container
@@ -62,9 +65,10 @@ module Allure
62
65
  def start_test_case(test_result)
63
66
  clear_step_context
64
67
  unless current_test_result_container
65
- return logger.error("Could not start test case, test container is not started")
68
+ return logger.error { "Could not start test case, test container is not started" }
66
69
  end
67
70
 
71
+ logger.debug("Starting test case: #{test_result.name}")
68
72
  test_result.start = ResultUtils.timestamp
69
73
  test_result.stage = Stage::RUNNING
70
74
  test_result.labels.push(ResultUtils.thread_label, ResultUtils.host_label, ResultUtils.language_label)
@@ -80,7 +84,7 @@ module Allure
80
84
  # @yieldreturn [void]
81
85
  # @return [void]
82
86
  def update_test_case
83
- return logger.error("Could not update test case, no test case running") unless @current_test_case
87
+ return logger.error { "Could not update test case, no test case running" } unless @current_test_case
84
88
 
85
89
  yield(@current_test_case)
86
90
  end
@@ -88,8 +92,9 @@ module Allure
88
92
  # Stop current test case and write result
89
93
  # @return [void]
90
94
  def stop_test_case
91
- return logger.error("Could not stop test case, no test case is running") unless @current_test_case
95
+ return logger.error { "Could not stop test case, no test case is running" } unless @current_test_case
92
96
 
97
+ logger.debug { "Stopping test case: #{@current_test_case.name}" }
93
98
  @current_test_case.stop = ResultUtils.timestamp
94
99
  @current_test_case.stage = Stage::FINISHED
95
100
  file_writer.write_test_result(@current_test_case)
@@ -101,8 +106,9 @@ module Allure
101
106
  # @param [Allure::StepResult] step_result
102
107
  # @return [Allure::StepResult]
103
108
  def start_test_step(step_result)
104
- return logger.error("Could not start test step, no test case is running") unless @current_test_case
109
+ return logger.error { "Could not start test step, no test case is running" } unless @current_test_case
105
110
 
111
+ logger.debug { "Starting test step: #{step_result.name}" }
106
112
  step_result.start = ResultUtils.timestamp
107
113
  step_result.stage = Stage::RUNNING
108
114
  add_test_step(step_result)
@@ -117,7 +123,7 @@ module Allure
117
123
  # @yieldreturn [void]
118
124
  # @return [void]
119
125
  def update_test_step
120
- return logger.error("Could not update test step, no step is running") unless current_test_step
126
+ return logger.error { "Could not update test step, no step is running" } unless current_test_step
121
127
 
122
128
  yield(current_test_step)
123
129
  end
@@ -125,8 +131,9 @@ module Allure
125
131
  # Stop current test step
126
132
  # @return [void]
127
133
  def stop_test_step
128
- return logger.error("Could not stop test step, no step is running") unless current_test_step
134
+ return logger.error { "Could not stop test step, no step is running" } unless current_test_step
129
135
 
136
+ logger.debug { "Stoping test step: #{current_test_step.stop}" }
130
137
  current_test_step.stop = ResultUtils.timestamp
131
138
  current_test_step.stage = Stage::FINISHED
132
139
  clear_last_test_step
@@ -160,6 +167,7 @@ module Allure
160
167
  return false
161
168
  end
162
169
 
170
+ logger.debug { "Starting fixture: #{fixture_result.name}" }
163
171
  fixture_result.start = ResultUtils.timestamp
164
172
  fixture_result.stage = Stage::RUNNING
165
173
  end
@@ -172,7 +180,7 @@ module Allure
172
180
  # @yieldreturn [void]
173
181
  # @return [void]
174
182
  def update_fixture
175
- return logger.error("Could not update fixture, fixture is not started") unless @current_fixture
183
+ return logger.error { "Could not update fixture, fixture is not started" } unless @current_fixture
176
184
 
177
185
  yield(@current_fixture)
178
186
  end
@@ -180,8 +188,9 @@ module Allure
180
188
  # Stop current test fixture
181
189
  # @return [void]
182
190
  def stop_fixture
183
- return logger.error("Could not stop fixture, fixture is not started") unless @current_fixture
191
+ return logger.error { "Could not stop fixture, fixture is not started" } unless @current_fixture
184
192
 
193
+ logger.debug { "Stopping fixture: #{@current_fixture.name}" }
185
194
  @current_fixture.stop = ResultUtils.timestamp
186
195
  @current_fixture.stage = Stage::FINISHED
187
196
  clear_current_fixture
@@ -196,12 +205,13 @@ module Allure
196
205
  # @return [void]
197
206
  def add_attachment(name:, source:, type:, test_case: false)
198
207
  attachment = ResultUtils.prepare_attachment(name, type) || begin
199
- return logger.error("Can't add attachment, unrecognized mime type: #{type}")
208
+ return logger.error { "Can't add attachment, unrecognized mime type: #{type}" }
200
209
  end
201
210
  executable_item = (test_case && @current_test_case) || current_executable
202
211
  executable_item&.attachments&.push(attachment) || begin
203
- return logger.error("Can't add attachment, no test, step or fixture is running")
212
+ return logger.error { "Can't add attachment, no test, step or fixture is running" }
204
213
  end
214
+ logger.debug { "Adding attachment '#{name}' to '#{executable_item.name}'" }
205
215
  write_attachment(source, attachment)
206
216
  end
207
217
 
@@ -218,7 +228,7 @@ module Allure
218
228
  # @return [void]
219
229
  def clean_results_dir
220
230
  Allure.configuration.tap do |c|
221
- FileUtils.rm_f(Dir.glob("#{c.results_directory}/*")) if c.clean_results_directory
231
+ FileUtils.rm_f(Dir.glob("#{c.results_directory}/**/*")) if c.clean_results_directory
222
232
  end
223
233
  end
224
234
 
@@ -1,26 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "logger"
4
+ require "singleton"
4
5
 
5
6
  module Allure
6
7
  # Allure configuration class
7
8
  class Config
8
- # @return [String] default allure results directory
9
- DEFAULT_RESULTS_DIRECTORY = "reports/allure-results"
10
- # @return [String] default loggin level
11
- DEFAULT_LOGGING_LEVEL = Logger::INFO
9
+ include Singleton
12
10
 
13
- class << self
14
- attr_accessor :link_tms_pattern, :link_issue_pattern, :clean_results_directory
15
- attr_writer :results_directory, :logging_level
11
+ # @return [Array<String>] valid log levels
12
+ LOGLEVELS = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN].freeze
16
13
 
17
- def results_directory
18
- @results_directory || DEFAULT_RESULTS_DIRECTORY
19
- end
20
-
21
- def logging_level
22
- @logging_level || DEFAULT_LOGGING_LEVEL
23
- end
14
+ def initialize
15
+ @results_directory = "reports/allure-results"
16
+ @logging_level = LOGLEVELS.index(ENV.fetch("ALLURE_LOG_LEVEL", "INFO")) || Logger::INFO
24
17
  end
18
+
19
+ attr_accessor :results_directory, :logging_level, :link_tms_pattern, :link_issue_pattern, :clean_results_directory
25
20
  end
26
21
  end
@@ -18,14 +18,17 @@ module Allure
18
18
  # @param [Allure::TestResult] test_result
19
19
  # @return [void]
20
20
  def write_test_result(test_result)
21
- write("#{test_result.uuid}#{TEST_RESULT_SUFFIX}", test_result.to_json)
21
+ write("#{test_result.uuid}#{TEST_RESULT_SUFFIX}", JSON.generate(test_result, max_nesting: false))
22
22
  end
23
23
 
24
24
  # Write test result container
25
25
  # @param [Allure::TestResultContainer] test_container_result
26
26
  # @return [void]
27
27
  def write_test_result_container(test_container_result)
28
- write("#{test_container_result.uuid}#{TEST_RESULT_CONTAINER_SUFFIX}", test_container_result.to_json)
28
+ write(
29
+ "#{test_container_result.uuid}#{TEST_RESULT_CONTAINER_SUFFIX}",
30
+ JSON.generate(test_container_result, max_nesting: false),
31
+ )
29
32
  end
30
33
 
31
34
  # Write allure attachment file
@@ -59,7 +62,7 @@ module Allure
59
62
  private
60
63
 
61
64
  def output_dir
62
- @output_dir ||= FileUtils.mkpath(Allure::Config.results_directory).first
65
+ @output_dir ||= FileUtils.mkpath(Config.instance.results_directory).first
63
66
  end
64
67
 
65
68
  def write(name, source)
@@ -9,6 +9,8 @@ module Allure
9
9
  # @param [String] type attachment type, {Allure::ContentType}
10
10
  # @param [String] source attachment file name
11
11
  def initialize(name:, type:, source:)
12
+ super()
13
+
12
14
  @name = name
13
15
  @type = type
14
16
  @source = source
@@ -10,6 +10,8 @@ module Allure
10
10
  # @param [String, Regexp] message_regex
11
11
  # @param [String, Regexp] trace_regex
12
12
  def initialize(name:, matched_statuses: nil, message_regex: nil, trace_regex: nil)
13
+ super()
14
+
13
15
  @name = name
14
16
  @matched_statuses = matched_statuses
15
17
  @message_regex = message_regex
@@ -16,6 +16,8 @@ module Allure
16
16
  # @option options [Array<Allure::Attachment>] :attachments ([])
17
17
  # @option options [Array<Allure::Parameter>] :parameters ([])
18
18
  def initialize(**options)
19
+ super()
20
+
19
21
  @name = options[:name]
20
22
  @description = options[:description]
21
23
  @description_html = options[:description_html]
@@ -6,9 +6,9 @@ module Allure
6
6
  # General jsonable object implementation
7
7
  class JSONable
8
8
  # Return object has represantation
9
- # @param [Hash] _options
9
+ # @param [Array<Object>] _options
10
10
  # @return [Hash]
11
- def as_json(_options = {})
11
+ def as_json(*_options)
12
12
  instance_variables.each_with_object({}) do |var, map|
13
13
  key = camelcase(var.to_s.delete_prefix("@"))
14
14
  value = instance_variable_get(var)
@@ -20,7 +20,7 @@ module Allure
20
20
  # @param [Array<Object>] options
21
21
  # @return [String]
22
22
  def to_json(*options)
23
- as_json(*options).to_json(*options)
23
+ as_json.to_json(*options)
24
24
  end
25
25
 
26
26
  # Object comparator
@@ -6,6 +6,8 @@ module Allure
6
6
  # Allure model label object
7
7
  class Label < JSONable
8
8
  def initialize(name, value)
9
+ super()
10
+
9
11
  @name = name
10
12
  @value = value
11
13
  end
@@ -6,6 +6,8 @@ module Allure
6
6
  # Allure model link object
7
7
  class Link < JSONable
8
8
  def initialize(type, name, url)
9
+ super()
10
+
9
11
  @type = type
10
12
  @name = name
11
13
  @url = url
@@ -6,6 +6,8 @@ module Allure
6
6
  # Allure model parameter object
7
7
  class Parameter < JSONable
8
8
  def initialize(name, value)
9
+ super()
10
+
9
11
  @name = name
10
12
  @value = value
11
13
  end
@@ -9,6 +9,8 @@ module Allure
9
9
  # @param [String] message
10
10
  # @param [String] trace
11
11
  def initialize(known: false, muted: false, flaky: false, message: nil, trace: nil)
12
+ super()
13
+
12
14
  @known = known
13
15
  @muted = muted
14
16
  @flaky = flaky
@@ -6,6 +6,8 @@ module Allure
6
6
  # Allure model step result container
7
7
  class TestResultContainer < JSONable
8
8
  def initialize(uuid: UUID.generate, name: "Unnamed")
9
+ super()
10
+
9
11
  @uuid = uuid
10
12
  @name = name
11
13
  @children = []
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: allure-ruby-commons
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.13.5.rc.1
4
+ version: 2.13.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrejs Cunskis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-28 00:00:00.000000000 Z
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uuid
@@ -126,9 +126,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
126
  version: 2.5.0
127
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 1.3.1
131
+ version: '0'
132
132
  requirements: []
133
133
  rubygems_version: 3.1.2
134
134
  signing_key: