allure-ruby-commons 2.13.6 → 2.13.7

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: 12cb6b2b1132dd43b17becb6b9a32c47cb9aa44a3be793dc09f083d7e5784370
4
- data.tar.gz: a34abfd6a9dff13b8b6b1d571b33f348549c59848579220c4a8add6d5317004c
3
+ metadata.gz: 53156094ed2444485eb90b07d2f162d1b010a5c07ff57dae0bcc5ad631116a77
4
+ data.tar.gz: 0520275651cc3e900886d71a605906e6725dd3a34a5d47cde2672332662d39eb
5
5
  SHA512:
6
- metadata.gz: 1d6bf42ce012302f708869666f94ea4a8a408dc2c17f4989e2b469b3a100458a36226d5b9790ba497b4b69c87306ee437f6825187255f1c00dc9d1a579e5d322
7
- data.tar.gz: f15cadf664ae40f2152a86f541bd2a3ef68de4bc60bc72908b04ace4a90753088a6342a3eb63846a95a38b5e311c573223fe5d901fc29c78b2f4cd76f5958ddc
6
+ metadata.gz: 9c5f0dfb4cb84c3881f90bd684ef103d86c807a84e03d68b0c9dc3f2d444175cf355a15982b6be2cdb60d69c011acbb9cb472c2c462cc847c11a1d6acabce592
7
+ data.tar.gz: 70fa07d3238b13287733eb165b62dded9330b242dbadd57a2d4099843087515210c535abbbb744a3fabc43d84a33a98ff61d4b5675153ccdf92284a62d25e979
data/README.md CHANGED
@@ -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.
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "require_all"
5
5
  require "uuid"
6
+
6
7
  require_rel "allure_ruby_commons/**/*rb"
7
8
 
8
9
  # Namespace for classes that handle allure report generation and different framework adaptors
@@ -169,7 +170,7 @@ module Allure
169
170
  lifecycle.start_test_step(StepResult.new(name: name, stage: Stage::RUNNING))
170
171
  yield
171
172
  lifecycle.update_test_step { |step| step.status = Status::PASSED }
172
- rescue => e
173
+ rescue StandardError => e
173
174
  lifecycle.update_test_step do |step|
174
175
  step.status = ResultUtils.status(e)
175
176
  step.status_details = ResultUtils.status_details(e)
@@ -5,13 +5,13 @@ require "forwardable"
5
5
 
6
6
  module Allure
7
7
  # Main class for creating and writing allure results
8
- class AllureLifecycle
8
+ class AllureLifecycle # rubocop:disable Metrics/ClassLength
9
9
  extend Forwardable
10
10
 
11
11
  def initialize
12
12
  @test_context = []
13
13
  @step_context = []
14
- @logger = Logger.new(STDOUT, level: Config.instance.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 { "Stopping test step: #{current_test_step.name}" }
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
@@ -195,13 +204,14 @@ module Allure
195
204
  # @param [Boolean] test_case add attachment to current test case
196
205
  # @return [void]
197
206
  def add_attachment(name:, source:, type:, test_case: false)
198
- attachment = ResultUtils.prepare_attachment(name, type) || begin
199
- return logger.error("Can't add attachment, unrecognized mime type: #{type}")
200
- end
201
- executable_item = (test_case && @current_test_case) || current_executable
202
- executable_item&.attachments&.push(attachment) || begin
203
- return logger.error("Can't add attachment, no test, step or fixture is running")
204
- end
207
+ attachment = ResultUtils.prepare_attachment(name, type)
208
+ return logger.error { "Can't add attachment, unrecognized mime type: #{type}" } unless attachment
209
+
210
+ executable_item = test_case ? @current_test_case : current_executable
211
+ return logger.error { "Can't add attachment, no test, step or fixture is running" } unless executable_item
212
+
213
+ executable_item.attachments.push(attachment)
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
 
@@ -8,20 +8,47 @@ module Allure
8
8
  class Config
9
9
  include Singleton
10
10
 
11
- # @return [String] default allure results directory
12
- DEFAULT_RESULTS_DIRECTORY = "reports/allure-results"
13
- # @return [String] default loggin level
14
- DEFAULT_LOGGING_LEVEL = Logger::INFO
11
+ # @return [Array<String>] valid log levels
12
+ LOGLEVELS = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN].freeze
13
+ # @return [String] test plan path env var name
14
+ TESTPLAN_PATH = "ALLURE_TESTPLAN_PATH"
15
+ # @return [String] test plan file name
16
+ TESTPLAN_JSON = "testplan.json"
15
17
 
16
- attr_accessor :link_tms_pattern, :link_issue_pattern, :clean_results_directory
17
- attr_writer :results_directory, :logging_level
18
+ attr_accessor :results_directory, :logging_level, :link_tms_pattern, :link_issue_pattern, :clean_results_directory
18
19
 
19
- def results_directory
20
- @results_directory || DEFAULT_RESULTS_DIRECTORY
20
+ def initialize
21
+ @results_directory = "reports/allure-results"
22
+ @logging_level = LOGLEVELS.index(ENV.fetch("ALLURE_LOG_LEVEL", "INFO")) || Logger::INFO
21
23
  end
22
24
 
23
- def logging_level
24
- @logging_level || DEFAULT_LOGGING_LEVEL
25
+ # Allure id's of executable tests
26
+ #
27
+ # @return [Array]
28
+ def test_ids
29
+ @test_ids ||= tests&.map { |test| test[:id] }
30
+ end
31
+
32
+ # Test names of executable tests
33
+ #
34
+ # @return [Array]
35
+ def test_names
36
+ @test_names ||= tests&.map { |test| test[:selector] }
37
+ end
38
+
39
+ private
40
+
41
+ # Tests to execute from allure testplan.json
42
+ #
43
+ # @return [Array<Hash>]
44
+ def tests
45
+ @tests ||= begin
46
+ return unless ENV[TESTPLAN_PATH]
47
+
48
+ Oj.load_file("#{ENV[TESTPLAN_PATH]}/#{TESTPLAN_JSON}", symbol_keys: true)&.fetch(:tests)
49
+ end
50
+ rescue Oj::ParseError
51
+ nil
25
52
  end
26
53
  end
27
54
  end
@@ -18,14 +18,14 @@ 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}", Oj.dump(test_result))
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("#{test_container_result.uuid}#{TEST_RESULT_CONTAINER_SUFFIX}", Oj.dump(test_container_result))
29
29
  end
30
30
 
31
31
  # Write allure attachment file
@@ -52,7 +52,7 @@ module Allure
52
52
  if categories.is_a?(File)
53
53
  copy(categories.path, CATEGORIES_FILE)
54
54
  else
55
- write(CATEGORIES_FILE, categories.to_json)
55
+ write(CATEGORIES_FILE, Oj.dump(categories))
56
56
  end
57
57
  end
58
58
 
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "json"
3
+ require "oj"
4
4
 
5
5
  module Allure
6
6
  # General jsonable object implementation
7
7
  class JSONable
8
- # Return object has represantation
9
- # @param [Hash] _options
8
+ Oj.default_options = { mode: :custom, use_to_hash: true, ascii_only: true }
9
+
10
+ # Return object hash represantation
10
11
  # @return [Hash]
11
- def as_json(_options = {})
12
+ def to_hash
12
13
  instance_variables.each_with_object({}) do |var, map|
13
14
  key = camelcase(var.to_s.delete_prefix("@"))
14
15
  value = instance_variable_get(var)
@@ -16,13 +17,6 @@ module Allure
16
17
  end
17
18
  end
18
19
 
19
- # Convert object to json string
20
- # @param [Array<Object>] options
21
- # @return [String]
22
- def to_json(*options)
23
- as_json(*options).to_json(*options)
24
- end
25
-
26
20
  # Object comparator
27
21
  # @param [JSONable] other
28
22
  # @return [Booelan]
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model attachment object
7
5
  class Attachment < JSONable
@@ -9,6 +7,8 @@ module Allure
9
7
  # @param [String] type attachment type, {Allure::ContentType}
10
8
  # @param [String] source attachment file name
11
9
  def initialize(name:, type:, source:)
10
+ super()
11
+
12
12
  @name = name
13
13
  @type = type
14
14
  @source = source
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Defects category
7
5
  class Category < JSONable
@@ -10,6 +8,8 @@ module Allure
10
8
  # @param [String, Regexp] message_regex
11
9
  # @param [String, Regexp] trace_regex
12
10
  def initialize(name:, matched_statuses: nil, message_regex: nil, trace_regex: nil)
11
+ super()
12
+
13
13
  @name = name
14
14
  @matched_statuses = matched_statuses
15
15
  @message_regex = message_regex
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model executable item
7
5
  class ExecutableItem < JSONable
@@ -16,6 +14,8 @@ module Allure
16
14
  # @option options [Array<Allure::Attachment>] :attachments ([])
17
15
  # @option options [Array<Allure::Parameter>] :parameters ([])
18
16
  def initialize(**options)
17
+ super()
18
+
19
19
  @name = options[:name]
20
20
  @description = options[:description]
21
21
  @description_html = options[:description_html]
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model label object
7
5
  class Label < JSONable
8
6
  def initialize(name, value)
7
+ super()
8
+
9
9
  @name = name
10
10
  @value = value
11
11
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model link object
7
5
  class Link < JSONable
8
6
  def initialize(type, name, url)
7
+ super()
8
+
9
9
  @type = type
10
10
  @name = name
11
11
  @url = url
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model parameter object
7
5
  class Parameter < JSONable
8
6
  def initialize(name, value)
7
+ super()
8
+
9
9
  @name = name
10
10
  @value = value
11
11
  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
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model step result container
7
5
  class TestResultContainer < JSONable
8
6
  def initialize(uuid: UUID.generate, name: "Unnamed")
7
+ super()
8
+
9
9
  @uuid = uuid
10
10
  @name = name
11
11
  @children = []
metadata CHANGED
@@ -1,36 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: allure-ruby-commons
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.13.6
4
+ version: 2.13.7
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-06-03 00:00:00.000000000 Z
11
+ date: 2020-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: uuid
14
+ name: mime-types
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.3'
19
+ version: '3.3'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '4'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '2.3'
29
+ version: '3.3'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '4'
27
33
  - !ruby/object:Gem::Dependency
28
- name: require_all
34
+ name: oj
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '2'
39
+ version: '3.10'
34
40
  - - "<"
35
41
  - !ruby/object:Gem::Version
36
42
  version: '4'
@@ -40,44 +46,50 @@ dependencies:
40
46
  requirements:
41
47
  - - ">="
42
48
  - !ruby/object:Gem::Version
43
- version: '2'
49
+ version: '3.10'
44
50
  - - "<"
45
51
  - !ruby/object:Gem::Version
46
52
  version: '4'
47
53
  - !ruby/object:Gem::Dependency
48
- name: json
54
+ name: require_all
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - ">="
52
58
  - !ruby/object:Gem::Version
53
- version: '1.8'
59
+ version: '2'
54
60
  - - "<"
55
61
  - !ruby/object:Gem::Version
56
- version: '3'
62
+ version: '4'
57
63
  type: :runtime
58
64
  prerelease: false
59
65
  version_requirements: !ruby/object:Gem::Requirement
60
66
  requirements:
61
67
  - - ">="
62
68
  - !ruby/object:Gem::Version
63
- version: '1.8'
69
+ version: '2'
64
70
  - - "<"
65
71
  - !ruby/object:Gem::Version
66
- version: '3'
72
+ version: '4'
67
73
  - !ruby/object:Gem::Dependency
68
- name: mime-types
74
+ name: uuid
69
75
  requirement: !ruby/object:Gem::Requirement
70
76
  requirements:
71
- - - "~>"
77
+ - - ">="
72
78
  - !ruby/object:Gem::Version
73
- version: '3.3'
79
+ version: '2.3'
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
74
83
  type: :runtime
75
84
  prerelease: false
76
85
  version_requirements: !ruby/object:Gem::Requirement
77
86
  requirements:
78
- - - "~>"
87
+ - - ">="
79
88
  - !ruby/object:Gem::Version
80
- version: '3.3'
89
+ version: '2.3'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '3'
81
93
  description: Utilities allowing to implement allure result generation by other test
82
94
  frameworks
83
95
  email: andrejs.cunskis@gmail.com
@@ -90,12 +102,12 @@ files:
90
102
  - lib/allure_ruby_commons/allure_lifecycle.rb
91
103
  - lib/allure_ruby_commons/config.rb
92
104
  - lib/allure_ruby_commons/file_writer.rb
105
+ - lib/allure_ruby_commons/model/01_jsonable.rb
93
106
  - lib/allure_ruby_commons/model/attachment.rb
94
107
  - lib/allure_ruby_commons/model/category.rb
95
108
  - lib/allure_ruby_commons/model/content_type.rb
96
109
  - lib/allure_ruby_commons/model/executable_item.rb
97
110
  - lib/allure_ruby_commons/model/fixture_result.rb
98
- - lib/allure_ruby_commons/model/jsonable.rb
99
111
  - lib/allure_ruby_commons/model/label.rb
100
112
  - lib/allure_ruby_commons/model/link.rb
101
113
  - lib/allure_ruby_commons/model/parameter.rb
@@ -130,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
142
  - !ruby/object:Gem::Version
131
143
  version: '0'
132
144
  requirements: []
133
- rubygems_version: 3.1.2
145
+ rubygems_version: 3.1.4
134
146
  signing_key:
135
147
  specification_version: 4
136
148
  summary: Common library for allure results generation