allure-rspec 0.7.6 → 2.13.3

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
- SHA1:
3
- metadata.gz: 08e5712a276ccb63c38f1c91abb01cb4e7ff1bb6
4
- data.tar.gz: 97166bcfba57ad6e534eb997ed6702525971175a
2
+ SHA256:
3
+ metadata.gz: 5d0dae51e4db6c27206a0030078093da323272cfe37474a258f9202628bc23dd
4
+ data.tar.gz: e007ebdab6c1657dfa63bf2c6c47d6bad790f01f245df579dd41d2e3453b1e22
5
5
  SHA512:
6
- metadata.gz: a539a6c569df76510de8cf6879973dcaaa599611f4befdea0db5a9b24d08ce0af34f9d34e806fa0a525c7b3d10db6077a6765ef4098428529904a4c58fac8922
7
- data.tar.gz: 69c8237431ea33686fac81229f419aceb98045be9058dd0cc09ecf35d8bb1fbeb071e5604b7878d2a0c0ac915f26673690513eec51740aa11399a10d13cdf931
6
+ metadata.gz: 45c5a098080a3eb4110bf997dd7f927a38447460fd0882b3e4e2e91f7ddaf76337b93af85ec1ac980c88c4730e2cb299f0428c1cc3dd41559491ab3e0e0b2d33
7
+ data.tar.gz: fbd4ed49c73f18ec326f3775d44b58bfc5ce177b747d01872b9f126f7e211aaec7f2bf81046d85a60e27df25f85b00be30e146c6c25d0e48e75bddf079f7af30
data/README.md CHANGED
@@ -1,74 +1,140 @@
1
- # Allure RSpec Adaptor
1
+ # allure-rspec
2
+ [![Yard Docs](https://img.shields.io/badge/yard-docs-blue.svg)](https://www.rubydoc.info/gems/allure-rspec)
2
3
 
3
- [![Gem Version](https://badge.fury.io/rb/allure-rspec.svg)](http://badge.fury.io/rb/allure-rspec)
4
+ Allure adapter for [rspec](https://rspec.info/) testing framework
4
5
 
5
- Adaptor to use the Allure framework along with the RSpec. See [an example](https://github.com/allure-examples/allure-rspec-example) project to take a quick tour.
6
+ ## Installation
6
7
 
7
- ## What's new
8
+ Add it to gemfile:
8
9
 
9
- See the [releases](https://github.com/allure-framework/allure-rspec/releases) tab.
10
+ ```ruby
11
+ gem 'allure-rspec'
12
+ ```
13
+
14
+ Require in `spec_helper` or any other setup file:
15
+
16
+ ```ruby
17
+ require `allure-rspec`
18
+ ```
19
+
20
+ ## Configuration
10
21
 
22
+ There are no rspec adapter specific configuration options. Main allure configuration is described [here](https://github.com/allure-framework/allure-ruby/blob/master/allure-ruby-commons/README.md#configuration)
11
23
 
12
- ## Setup
24
+ ## Usage
13
25
 
14
- Add the dependency to your Gemfile. Choose the version carefully:
15
- * 0.5.x - for RSpec2.
16
- * <= 0.6.7 - for RSpec < 3.2.
17
- * >= 0.6.9 - for RSpec >= 3.2.
26
+ Via commandline, simply add:
27
+
28
+ ```bash
29
+ --format AllureRspecFormatter
30
+ ```
31
+
32
+ RSpec configuration:
18
33
 
19
34
  ```ruby
20
- gem 'allure-rspec'
35
+ RSpec.configure do |c|
36
+ c.formatter = AllureRspecFormatter
37
+ end
21
38
  ```
22
39
 
23
- And then include it in your spec_helper.rb:
40
+ ### Adding tms links
41
+
42
+ Configure tms link pattern:
24
43
 
25
44
  ```ruby
26
- RSpec.configure do |c|
27
- c.include AllureRSpec::Adaptor
28
- end
45
+ Allure.configure do |c|
46
+ c.link_tms_pattern = "http://www.jira.com/browse/{}"
47
+ end
29
48
  ```
30
49
 
31
- ## Advanced options
50
+ Add tag to rspec test:
32
51
 
33
- You can specify the directory where the Allure test results will appear. By default it would be 'gen/allure-results'
34
- within your current directory.
52
+ ```ruby
53
+ it "some test case", tms: "QA-123" do
54
+ # test
55
+ end
56
+ ```
57
+
58
+ It's possible to add multiple tms links using `tms_` pattern:
35
59
 
36
60
  ```ruby
37
- AllureRSpec.configure do |c|
38
- c.output_dir = "/whatever/you/like" # default: gen/allure-results
39
- c.clean_dir = false # clean the output directory first? (default: true)
40
- c.logging_level = Logger::DEBUG # logging level (default: DEBUG)
41
- end
61
+ it "some test case", tms_1: "QA-123", tms_2: "QA-124" do
62
+ # test
63
+ end
42
64
  ```
43
65
 
44
- ## Usage examples
66
+ ### Adding issue links
67
+
68
+ Configure issue link pattern:
45
69
 
46
70
  ```ruby
47
- describe MySpec, :feature => "Some feature", :severity => :normal do
71
+ Allure.configure do |c|
72
+ c.link_issue_pattern = "http://www.jira.com/browse/{}"
73
+ end
74
+ ```
48
75
 
49
- before(:step) do |s|
50
- puts "Before step #{s.current_step}"
51
- end
76
+ Add tag to rspec test:
52
77
 
53
- it "should be critical", :story => "First story", :severity => :critical, :testId => 99 do
54
- "string".should == "string"
55
- end
78
+ ```ruby
79
+ it "some test case", issue: "QA-123" do
80
+ # test
81
+ end
82
+ ```
56
83
 
57
- it "should be steps enabled", :story => ["First story", "Second story"], :testId => 31 do |e|
84
+ It's possible to add multiple tms links using `issue_` pattern:
58
85
 
59
- e.step "step1" do |s|
60
- s.attach_file "screenshot1", take_screenshot_as_file
61
- end
86
+ ```ruby
87
+ it "some test case", issue_1: "QA-123", issue_2: "QA-124" do
88
+ # test
89
+ end
90
+ ```
91
+
92
+ ### Adding custom severity and status details
62
93
 
63
- e.step "step2" do
64
- 5.should be > 0
65
- end
94
+ Test severity (`normal` by default) can be changed via `severity` tag:
95
+
96
+ ```ruby
97
+ it "some test case", severity: :critical do
98
+ # test
99
+ end
100
+ ```
101
+
102
+ Custom status details can be set via `muted`, `known`, `flaky` tags:
103
+
104
+ ```ruby
105
+ it "some test case", flaky: true, muted: false, known: true do
106
+ # test
107
+ end
108
+ ```
66
109
 
67
- e.step "step3" do
68
- 0.should == 0
69
- end
110
+ ### Adding additional labels to allure test case
70
111
 
71
- e.attach_file "screenshot2", take_screenshot_as_file
112
+ Additional labels can be added using `allure_` pattern:
113
+
114
+ ```ruby
115
+ it "some test case", allure_1: "visual_test", allure_2: "core_functionality" do
116
+ # test
117
+ end
118
+ ```
119
+
120
+ ### Custom actions
121
+
122
+ Rspec example object has access to [Allure](https://www.rubydoc.info/github/allure-framework/allure-ruby/Allure) helper methods.
123
+ It can be used to add or run steps, add attachments, modify test case etc.
124
+
125
+ ```ruby
126
+ it "some test case" do |e|
127
+ e.run_step("my custom step") do
128
+ # some action
72
129
  end
130
+ e.add_attachment(name: "attachment", source: "Some string", type: Allure::ContentType::TXT)
73
131
  end
74
132
  ```
133
+
134
+ ### Example project
135
+
136
+ [RSpec Example](https://github.com/allure-examples/allure-rspec-example)
137
+
138
+ ## HTML report generation
139
+
140
+ Report is generated using allure commandline tool. [Allure wiki](https://docs.qameta.io/allure/#_reporting).
data/lib/allure-rspec.rb CHANGED
@@ -1,56 +1,8 @@
1
- require 'allure-ruby-adaptor-api'
2
- require 'allure-rspec/version'
3
- require 'allure-rspec/formatter'
4
- require 'allure-rspec/adaptor'
5
- require 'allure-rspec/dsl'
6
- require 'allure-rspec/hooks'
1
+ # rubocop:disable Naming/FileName
2
+ # frozen_string_literal: true
7
3
 
8
- module AllureRSpec
9
- module Config
10
- class << self
11
- attr_accessor :output_dir
12
- attr_accessor :clean_dir
13
- attr_accessor :logging_level
4
+ require "allure-ruby-commons"
5
+ require "allure_rspec/formatter"
14
6
 
15
- DEFAULT_OUTPUT_DIR = 'gen/allure-results'
16
- DEFAULT_LOGGING_LEVEL = Logger::DEBUG
17
-
18
- def output_dir
19
- @output_dir || DEFAULT_OUTPUT_DIR
20
- end
21
-
22
- def clean_dir?
23
- @clean_dir.nil? ? true : @clean_dir
24
- end
25
-
26
- def logging_level
27
- @logging_level || DEFAULT_LOGGING_LEVEL
28
- end
29
- end
30
- end
31
-
32
- class Context
33
- attr_accessor :rspec
34
-
35
- def rspec
36
- @rspec
37
- end
38
- end
39
-
40
- class << self
41
- def context
42
- @context ||= Context.new
43
- end
44
- end
45
-
46
- class << self
47
- def configure(&block)
48
- yield Config
49
- AllureRubyAdaptorApi.configure { |c|
50
- c.output_dir = Config.output_dir
51
- c.logging_level = Config.logging_level
52
- }
53
- end
54
- end
55
-
56
- end
7
+ AllureRspecFormatter = AllureRspec::RSpecFormatter
8
+ # rubocop:enable Naming/FileName
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rspec/core"
4
+ require "rspec/core/formatters/base_formatter"
5
+
6
+ require_relative "rspec_model"
7
+
8
+ module AllureRspec
9
+ class RSpecFormatter < RSpec::Core::Formatters::BaseFormatter
10
+ include AllureRspecModel
11
+
12
+ RSpec::Core::Formatters.register(
13
+ self,
14
+ :start,
15
+ :example_group_started,
16
+ :example_group_finished,
17
+ :example_started,
18
+ :example_finished,
19
+ )
20
+
21
+ RSpec::Core::Example.class_eval do
22
+ Allure.singleton_methods.each do |method|
23
+ define_method(method) { |*args, &block| Allure.__send__(method, *args, &block) }
24
+ end
25
+ end
26
+
27
+ # Start test run
28
+ # @param [RSpec::Core::Notifications::StartNotification] _start_notification
29
+ # @return [void]
30
+ def start(_start_notification)
31
+ lifecycle.clean_results_dir
32
+ end
33
+
34
+ # Starts example group
35
+ # @param [RSpec::Core::Notifications::GroupNotification] example_group_notification
36
+ # @return [void]
37
+ def example_group_started(example_group_notification)
38
+ lifecycle.start_test_container(
39
+ Allure::TestResultContainer.new(name: example_group_notification.group.description),
40
+ )
41
+ end
42
+
43
+ # Starts example
44
+ # @param [RSpec::Core::Notifications::ExampleNotification] example_notification
45
+ # @return [void]
46
+ def example_started(example_notification)
47
+ lifecycle.start_test_case(test_result(example_notification.example))
48
+ end
49
+
50
+ # Finishes example
51
+ # @param [RSpec::Core::Notifications::ExampleNotification] example_notification
52
+ # @return [void]
53
+ def example_finished(example_notification)
54
+ lifecycle.update_test_case(&update_test_proc(example_notification.example.execution_result))
55
+ lifecycle.stop_test_case
56
+ end
57
+
58
+ # Starts example group
59
+ # @param [RSpec::Core::Notifications::GroupNotification] example_group_notification
60
+ # @return [void]
61
+ def example_group_finished(_example_group_notification)
62
+ lifecycle.stop_test_container
63
+ end
64
+
65
+ private
66
+
67
+ # Get thread specific lifecycle
68
+ # @return [Allure::AllureLifecycle]
69
+ def lifecycle
70
+ Allure.lifecycle
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "digest"
4
+ require "pathname"
5
+
6
+ require_relative "tag_parser"
7
+
8
+ module AllureRspec
9
+ module AllureRspecModel
10
+ include TagParser
11
+
12
+ # @return [Hash] allure statuses mapping
13
+ ALLURE_STATUS ||= {
14
+ failed: Allure::Status::FAILED,
15
+ pending: Allure::Status::SKIPPED,
16
+ passed: Allure::Status::PASSED,
17
+ }.freeze
18
+
19
+ # Transform example to <Allure::TestResult>
20
+ # @param [RSpec::Core::Example] example
21
+ # @return [Allure::TestResult]
22
+ def test_result(example)
23
+ Allure::TestResult.new(
24
+ name: example.description,
25
+ description: "Location - #{strip_relative(example.location)}",
26
+ description_html: "Location - #{strip_relative(example.location)}",
27
+ history_id: Digest::MD5.hexdigest(example.id),
28
+ full_name: example.full_description,
29
+ labels: labels(example),
30
+ links: links(example),
31
+ status_details: Allure::StatusDetails.new(**status_detail_tags(example.metadata)),
32
+ )
33
+ end
34
+
35
+ # Update test status on finish
36
+ # @param [RSpec::Core::Example::ExecutionResult] result
37
+ # @return [Proc]
38
+ def update_test_proc(result)
39
+ Allure::ResultUtils.status_details(result.exception).yield_self do |status_detail|
40
+ proc do |test_case|
41
+ test_case.stage = Allure::Stage::FINISHED
42
+ test_case.status = status(result)
43
+ test_case.status_details.message = status_detail.message
44
+ test_case.status_details.trace = status_detail.trace
45
+ end
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ # @param [RSpec::Core::Example] example
52
+ # @return [Array<Allure::Label>]
53
+ def labels(example)
54
+ [].tap do |labels|
55
+ labels << Allure::ResultUtils.framework_label("rspec")
56
+ labels << Allure::ResultUtils.feature_label(example.example_group.description)
57
+ labels << Allure::ResultUtils.package_label(Pathname.new(strip_relative(example.file_path)).parent.to_s)
58
+ labels << Allure::ResultUtils.story_label(example.description)
59
+ labels << Allure::ResultUtils.test_class_label(File.basename(example.file_path, ".rb"))
60
+ labels << severity(example.metadata)
61
+ labels.push(*suite_labels(example.example_group))
62
+ labels.push(*tag_labels(example.metadata))
63
+ end
64
+ end
65
+
66
+ # Add suite labels
67
+ # @param [RSpec::Core::ExampleGroup] example_group
68
+ # @return [Array<Allure::Label>]
69
+ def suite_labels(example_group)
70
+ example_group.parent_groups.map(&:description).yield_self do |parents|
71
+ [].tap do |labels|
72
+ labels << Allure::ResultUtils.suite_label((parents.length == 1) ? parents.last : parents[-2])
73
+ labels << Allure::ResultUtils.parent_suite_label(parents.last) if parents.length > 1
74
+ labels << Allure::ResultUtils.sub_suite_label(parents[0..-3].join(" > ")) if parents.length > 2
75
+ end
76
+ end
77
+ end
78
+
79
+ # @param [RSpec::Core::Example] example
80
+ # @return [Array<Allure::Label>]
81
+ def links(example)
82
+ tms_links(example.metadata) + issue_links(example.metadata)
83
+ end
84
+
85
+ # Get allure status from result
86
+ # @param [RSpec::Core::Example::ExecutionResult] result
87
+ # @return [Symbol]
88
+ def status(result)
89
+ return Allure::ResultUtils.status(result.exception) if result.status == :failed
90
+
91
+ ALLURE_STATUS[result.status]
92
+ end
93
+
94
+ # Strip relative ./ form path
95
+ # @param [String] path
96
+ # @return [String]
97
+ def strip_relative(path)
98
+ path.gsub("./", "")
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AllureRspec
4
+ # RSpec custom tag parser
5
+ module TagParser
6
+ # Get custom labels
7
+ # @param [Hash] metadata
8
+ # @return [Array<Allure::Label>]
9
+ def tag_labels(metadata)
10
+ return [] unless Allure::Config.link_tms_pattern && metadata.keys.any? { |k| allure?(k) }
11
+
12
+ metadata.select { |k, _v| allure?(k) }.values.map { |v| Allure::ResultUtils.tag_label(v) }
13
+ end
14
+
15
+ # Get tms links
16
+ # @param [Hash] metadata
17
+ # @return [Array<Allure::Link>]
18
+ def tms_links(metadata)
19
+ return [] unless Allure::Config.link_tms_pattern && metadata.keys.any? { |k| tms?(k) }
20
+
21
+ metadata.select { |k, _v| tms?(k) }.values.map { |v| Allure::ResultUtils.tms_link(v) }
22
+ end
23
+
24
+ # Get issue links
25
+ # @param [Hash] metadata
26
+ # @return [Array<Allure::Link>]
27
+ def issue_links(metadata)
28
+ return [] unless Allure::Config.link_issue_pattern && metadata.keys.any? { |k| issue?(k) }
29
+
30
+ metadata.select { |k, _v| issue?(k) }.values.map { |v| Allure::ResultUtils.issue_link(v) }
31
+ end
32
+
33
+ # Get severity
34
+ # @param [Hash] metadata
35
+ # @return [String]
36
+ def severity(metadata)
37
+ Allure::ResultUtils.severity_label(metadata[:severity] || "normal")
38
+ end
39
+
40
+ # Get status details
41
+ # @param [Hash] metadata
42
+ # @return [Hash<Symbol, Boolean>]
43
+ def status_detail_tags(metadata)
44
+ {
45
+ flaky: !!metadata[:flaky],
46
+ muted: !!metadata[:muted],
47
+ known: !!metadata[:known],
48
+ }
49
+ end
50
+
51
+ private
52
+
53
+ # Does key match custom allure label
54
+ # @param [Symbol] key
55
+ # @return [boolean]
56
+ def allure?(key)
57
+ key.to_s.match?(/allure(_\d+)?/i)
58
+ end
59
+
60
+ # Does key match tms pattern
61
+ # @param [Symbol] key
62
+ # @return [boolean]
63
+ def tms?(key)
64
+ key.to_s.match?(/tms(_\d+)?/i)
65
+ end
66
+
67
+ # Does key match issue pattern
68
+ # @param [Symbol] key
69
+ # @return [boolean]
70
+ def issue?(key)
71
+ key.to_s.match?(/issue(_\d+)?/i)
72
+ end
73
+ end
74
+ end
metadata CHANGED
@@ -1,101 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: allure-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 2.13.3
5
5
  platform: ruby
6
6
  authors:
7
- - Ilya Sadykov
7
+ - Andrejs Cunskis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-02 00:00:00.000000000 Z
11
+ date: 2020-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '3.2'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '3.2'
27
- - !ruby/object:Gem::Dependency
28
- name: allure-ruby-adaptor-api
14
+ name: allure-ruby-commons
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - '='
32
18
  - !ruby/object:Gem::Version
33
- version: 0.6.9
19
+ version: 2.13.3
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - '='
39
25
  - !ruby/object:Gem::Version
40
- version: 0.6.9
26
+ version: 2.13.3
41
27
  - !ruby/object:Gem::Dependency
42
- name: bundler
28
+ name: rspec-core
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
31
+ - - "~>"
60
32
  - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
33
+ version: '3.8'
34
+ type: :runtime
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
- - - ">="
38
+ - - "~>"
67
39
  - !ruby/object:Gem::Version
68
- version: '0'
69
- description: Adaptor to use Allure framework along with the RSpec 2
70
- email:
71
- - smecsia@yandex-team.ru
40
+ version: '3.8'
41
+ description: Cucumber adaptor to generate rich allure test reports
42
+ email: andrejs.cunskis@gmail.com
72
43
  executables: []
73
44
  extensions: []
74
45
  extra_rdoc_files: []
75
46
  files:
76
- - ".gitignore"
77
- - Gemfile
78
- - Gemfile.lock
79
47
  - README.md
80
- - allure-rspec.gemspec
81
48
  - lib/allure-rspec.rb
82
- - lib/allure-rspec/adaptor.rb
83
- - lib/allure-rspec/dsl.rb
84
- - lib/allure-rspec/formatter.rb
85
- - lib/allure-rspec/hooks.rb
86
- - lib/allure-rspec/version.rb
87
- - logo.png
88
- - spec/another_spec.rb
89
- - spec/extend_steps_spec.rb
90
- - spec/hooks_spec.rb
91
- - spec/issue51_spec.rb
92
- - spec/nometavalue_spec.rb
93
- - spec/shared_example_spec.rb
94
- - spec/spec_helper.rb
95
- homepage: http://allure.qatools.ru
49
+ - lib/allure_rspec/formatter.rb
50
+ - lib/allure_rspec/rspec_model.rb
51
+ - lib/allure_rspec/tag_parser.rb
52
+ homepage: https://github.com/allure-framework/allure-ruby/tree/master/allure-rspec
96
53
  licenses:
97
- - Apache2
98
- metadata: {}
54
+ - Apache-2.0
55
+ metadata:
56
+ bug_tracker_uri: https://github.com/allure-framework/allure-ruby/issues
57
+ changelog_uri: https://github.com/allure-framework/allure-ruby/releases
58
+ documentation_uri: https://github.com/allure-framework/allure-ruby/blob/master/allure-rspec/README.md
59
+ source_code_uri: https://github.com/allure-framework/allure-ruby/tree/master/allure-rspec
60
+ wiki_uri: https://github.com/allure-framework/allure-ruby/wiki
99
61
  post_install_message:
100
62
  rdoc_options: []
101
63
  require_paths:
@@ -104,16 +66,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
66
  requirements:
105
67
  - - ">="
106
68
  - !ruby/object:Gem::Version
107
- version: '0'
69
+ version: 2.5.0
108
70
  required_rubygems_version: !ruby/object:Gem::Requirement
109
71
  requirements:
110
72
  - - ">="
111
73
  - !ruby/object:Gem::Version
112
74
  version: '0'
113
75
  requirements: []
114
- rubyforge_project:
115
- rubygems_version: 2.4.6
76
+ rubygems_version: 3.0.3
116
77
  signing_key:
117
78
  specification_version: 4
118
- summary: allure-rspec-0.7.6
79
+ summary: Allure rspec ruby adaptor
119
80
  test_files: []
data/.gitignore DELETED
@@ -1,15 +0,0 @@
1
- *.class
2
-
3
- # Package Files #
4
- *.jar
5
- *.war
6
- *.ear
7
- *.gem
8
-
9
- allure-report
10
- target
11
- allure
12
- .idea
13
- *.iml
14
- *.ipr
15
- *.iws
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
data/Gemfile.lock DELETED
@@ -1,49 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- allure-rspec (0.7.6)
5
- allure-ruby-adaptor-api (= 0.6.9)
6
- rspec (~> 3.2)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- allure-ruby-adaptor-api (0.6.9)
12
- mimemagic
13
- nokogiri (~> 1.6.0)
14
- uuid
15
- diff-lcs (1.2.5)
16
- macaddr (1.7.1)
17
- systemu (~> 2.6.2)
18
- mimemagic (0.3.0)
19
- mini_portile (0.6.2)
20
- nokogiri (1.6.6.2)
21
- mini_portile (~> 0.6.0)
22
- rake (10.4.2)
23
- rspec (3.3.0)
24
- rspec-core (~> 3.3.0)
25
- rspec-expectations (~> 3.3.0)
26
- rspec-mocks (~> 3.3.0)
27
- rspec-core (3.3.2)
28
- rspec-support (~> 3.3.0)
29
- rspec-expectations (3.3.1)
30
- diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.3.0)
32
- rspec-mocks (3.3.2)
33
- diff-lcs (>= 1.2.0, < 2.0)
34
- rspec-support (~> 3.3.0)
35
- rspec-support (3.3.0)
36
- systemu (2.6.5)
37
- uuid (2.3.8)
38
- macaddr (~> 1.0)
39
-
40
- PLATFORMS
41
- ruby
42
-
43
- DEPENDENCIES
44
- allure-rspec!
45
- bundler
46
- rake
47
-
48
- BUNDLED WITH
49
- 1.10.5
data/allure-rspec.gemspec DELETED
@@ -1,26 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
- require "allure-rspec/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = 'allure-rspec'
7
- s.version = AllureRSpec::Version::STRING
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ['Ilya Sadykov']
10
- s.email = ['smecsia@yandex-team.ru']
11
- s.description = %q{Adaptor to use Allure framework along with the RSpec 2}
12
- s.summary = "allure-rspec-#{AllureRSpec::Version::STRING}"
13
- s.homepage = 'http://allure.qatools.ru'
14
- s.license = 'Apache2'
15
-
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ['lib']
20
-
21
- s.add_dependency 'rspec', '~> 3.2'
22
- s.add_dependency 'allure-ruby-adaptor-api', '0.6.9'
23
-
24
- s.add_development_dependency 'bundler'
25
- s.add_development_dependency 'rake'
26
- end
@@ -1,15 +0,0 @@
1
- module AllureRSpec
2
- module Adaptor
3
- def self.included(base)
4
- AllureRSpec.context.rspec = base
5
- base.send :include, AllureRSpec::DSL
6
- if RSpec::Core::Formatters::Loader.formatters.keys.find_all { |f| f == AllureRSpec::Formatter }.empty?
7
- RSpec::Core::Formatters.register AllureRSpec::Formatter, *AllureRSpec::Formatter::NOTIFICATIONS
8
- RSpec.configuration.add_formatter(AllureRSpec::Formatter)
9
- end
10
- RSpec::Core::ExampleGroup.send :include, AllureRSpec::Hooks
11
- RSpec::Core::Example.send :include, AllureRSpec::DSL::Example
12
- end
13
- end
14
- end
15
-
@@ -1,61 +0,0 @@
1
- require 'digest'
2
- require 'mimemagic'
3
- module AllureRSpec
4
- module DSL
5
- module Example
6
-
7
- def current_step
8
- if defined? @@__current_step
9
- @@__current_step
10
- else
11
- nil
12
- end
13
- end
14
-
15
- def step(step, &block)
16
- suite = __description(metadata[:example_group])
17
- test = __description(metadata)
18
- begin
19
- AllureRubyAdaptorApi::Builder.start_step(suite, test, step)
20
- __with_step step, &block
21
- AllureRubyAdaptorApi::Builder.stop_step(suite, test, step)
22
- rescue Exception => e
23
- AllureRubyAdaptorApi::Builder.stop_step(suite, test, step, :failed)
24
- raise e
25
- end
26
- end
27
-
28
-
29
- def attach_file(title, file, opts = {})
30
- suite = __description(metadata[:example_group])
31
- test = __description(metadata)
32
- step = current_step
33
- AllureRubyAdaptorApi::Builder.add_attachment suite, test, opts.merge(:title => title, :file => file, :step => step)
34
- end
35
-
36
- private
37
-
38
- def __description(data)
39
- data[:full_description] || data[:description]
40
- end
41
-
42
- def __mutex
43
- @@__mutex ||= Mutex.new
44
- end
45
-
46
- def __with_step(step, &block)
47
- __mutex.synchronize do
48
- begin
49
- @@__current_step = step
50
- AllureRSpec.context.rspec.hooks.send :run, :before, :step, self
51
- yield self
52
- ensure
53
- AllureRSpec.context.rspec.hooks.send :run, :after, :step, self
54
- @@__current_step = nil
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
61
-
@@ -1,117 +0,0 @@
1
- require 'rspec/core' unless defined?(RSpec::Core)
2
- require 'rspec/core/formatters/base_formatter' unless defined?(RSpec::Core::Formatters::BaseFormatter)
3
- require 'fileutils'
4
-
5
- module AllureRSpec
6
-
7
- class Formatter < RSpec::Core::Formatters::BaseFormatter
8
-
9
- NOTIFICATIONS = [:example_group_started, :example_group_finished, :example_started,
10
- :example_failed, :example_passed, :example_pending, :start, :stop]
11
- ALLOWED_LABELS = [:feature, :story, :severity, :language, :framework, :issue, :testId, :host, :thread]
12
-
13
- def example_failed(notification)
14
- res = notification.example.execution_result
15
- status = res.exception.is_a?(RSpec::Expectations::ExpectationNotMetError) ? :failed : :broken
16
- stop_test(notification.example, :exception => res.exception, :status => status)
17
- end
18
-
19
- def example_group_finished(notification)
20
- AllureRubyAdaptorApi::Builder.stop_suite(description(notification.group).to_s)
21
- end
22
-
23
- def example_group_started(notification)
24
- AllureRubyAdaptorApi::Builder.start_suite(description(notification.group).to_s, labels(notification))
25
- end
26
-
27
- def example_passed(notification)
28
- stop_test(notification.example)
29
- end
30
-
31
- def example_pending(notification)
32
- stop_test(notification.example)
33
- end
34
-
35
- def example_started(notification)
36
- suite = description(notification.example.example_group).to_s
37
- test = description(notification.example).to_s
38
- AllureRubyAdaptorApi::Builder.start_test(suite, test, labels(notification))
39
- end
40
-
41
- def start(example_count)
42
- dir = Pathname.new(AllureRSpec::Config.output_dir)
43
- if AllureRSpec::Config.clean_dir?
44
- puts "Cleaning output directory '#{dir}'..."
45
- FileUtils.rm_rf(dir)
46
- end
47
- FileUtils.mkdir_p(dir)
48
- end
49
-
50
- def stop(notify)
51
- AllureRubyAdaptorApi::Builder.build!
52
- end
53
-
54
- private
55
-
56
- def description(data, attr = :full_description)
57
- ((((data.respond_to?(attr)) ?
58
- data.send(attr) : data.metadata[attr]) ||
59
- description(data, :description)) || '').strip
60
- end
61
-
62
- def stop_test(example, opts = {})
63
- res = example.execution_result
64
- AllureRubyAdaptorApi::Builder.stop_test(
65
- description(example.example_group).to_s,
66
- (example.metadata[:description_args].size== 0) ? description(example.example_group) : description(example).to_s,
67
- {
68
- :status => res.status,
69
- :finished_at => res.finished_at,
70
- :started_at => res.started_at
71
- }.merge(opts)
72
- )
73
- end
74
-
75
- def metadata(example_or_group)
76
- group?(example_or_group) ?
77
- example_or_group.group.metadata :
78
- example_or_group.example.metadata
79
- end
80
-
81
- def group?(example_or_group)
82
- (example_or_group.respond_to? :group)
83
- end
84
-
85
- def labels(example_or_group)
86
- labels = ALLOWED_LABELS.map { |label| [label, metadata(example_or_group)[label]] }.
87
- find_all { |value| !value[1].nil? }.
88
- inject({}) { |res, value| res.merge(value[0] => value[1]) }
89
- detect_feature_story(labels, example_or_group)
90
- labels
91
- end
92
-
93
- def method_or_key(metadata, key)
94
- metadata.respond_to?(key) ? metadata.send(key) : metadata[key]
95
- end
96
-
97
- def detect_feature_story(labels, example_or_group)
98
- metadata = metadata(example_or_group)
99
- is_group = group?(example_or_group)
100
- parent = (method_or_key(metadata, :parent_example_group))
101
- if labels[:feature] === true
102
- description = (!is_group && parent) ? method_or_key(parent, :description) : method_or_key(metadata, :description)
103
- labels[:feature] = description
104
- if labels[:story] === true
105
- if parent
106
- grandparent = parent && method_or_key(parent, :parent_example_group)
107
- labels[:feature] = (!is_group && grandparent) ? method_or_key(grandparent, :description) :
108
- method_or_key(parent, :description)
109
- end
110
- labels[:story] = description
111
- end
112
- end
113
- labels
114
- end
115
-
116
- end
117
- end
@@ -1,86 +0,0 @@
1
- module AllureRSpec
2
- module Hooks
3
-
4
- def self.included(cls)
5
- cls.extend OverrideHooksMethods
6
- end
7
-
8
- module OverrideHooksMethods
9
- include RSpec::Core::Hooks
10
-
11
- alias_method :old_hooks, :hooks
12
-
13
- def hooks
14
- @__hooks ||= OverridenHookCollections.new(old_hooks)
15
- end
16
-
17
- private
18
-
19
- class OverridenHookCollections < RSpec::Core::Hooks::HookCollections
20
- def initialize(original)
21
- super(original.instance_eval("@owner"), original.instance_eval("@filterable_item_repo_class"))
22
- [:@before_example_hooks, :@after_example_hooks, :@before_context_hooks, :@after_context_hooks, :@around_example_hooks].each { |var|
23
- instance_variable_set(var, original.instance_eval("#{var}"))
24
- }
25
- @before_step_hooks = nil
26
- @after_step_hooks = nil
27
- end
28
-
29
- def run(position, scope, example_or_group)
30
- if scope == :step
31
- run_owned_hooks_for(position, scope, example_or_group)
32
- else
33
- super
34
- end
35
- end
36
-
37
- protected
38
-
39
- # TODO: This code is highly related to the RSpec internals.
40
- # It should be supported with every new RSpec version
41
- def matching_hooks_for(position, scope, example_or_group)
42
- if scope == :step
43
- repo = hooks_for(position, scope) || example_or_group.example_group.hooks.hooks_for(position, scope)
44
- metadata = case example_or_group
45
- when RSpec::Core::ExampleGroup then
46
- example_or_group.class.metadata
47
- else
48
- example_or_group.metadata
49
- end
50
- repo.nil? ? EMPTY_HOOK_ARRAY : repo.items_for(metadata)
51
- else
52
- super
53
- end
54
- end
55
-
56
- def hooks_for(position, scope)
57
- if scope == :step
58
- position == :before ? @before_step_hooks : @after_step_hooks
59
- else
60
- super
61
- end
62
- end
63
-
64
- def ensure_hooks_initialized_for(position, scope)
65
- if scope == :step
66
- if position == :before
67
- @before_step_hooks ||= @filterable_item_repo_class.new(:all?)
68
- else
69
- @after_step_hooks ||= @filterable_item_repo_class.new(:all?)
70
- end
71
- else
72
- super
73
- end
74
- end
75
-
76
- SCOPES = [:example, :context, :step]
77
-
78
- def known_scope?(scope)
79
- SCOPES.include?(scope) || super(scope)
80
- end
81
-
82
- end
83
- end
84
- end
85
- end
86
-
@@ -1,5 +0,0 @@
1
- module AllureRSpec # :nodoc:
2
- module Version # :nodoc:
3
- STRING = '0.7.6'
4
- end
5
- end
data/logo.png DELETED
Binary file
data/spec/another_spec.rb DELETED
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
- require 'tempfile'
3
-
4
- describe "Some another spec", :feature => ["Some Feature"], :severity => :normal do
5
-
6
- before(:suite) do
7
- puts "before suite"
8
- end
9
-
10
- after(:suite) do
11
- puts "after suite"
12
- end
13
-
14
- it "10 cannot be greater than 19", :story => ["Some story"], :testId => 10 do
15
- expect(10).to be > 19
16
- end
17
-
18
- it "4 must not be equal to 5", :testId => 20 do
19
- expect(5).to be eql(4)
20
- end
21
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
- require 'tempfile'
3
-
4
- describe AllureRSpec, :feature => "Basics" do
5
-
6
- before(:suite) do
7
- puts "before suite"
8
- end
9
-
10
- before(:context) do
11
- puts "before context"
12
- end
13
-
14
- before(:step) do |s|
15
- puts "before step #{s.current_step}"
16
- end
17
-
18
- before(:example) do
19
- puts "before example"
20
- end
21
-
22
- after(:step) do |s|
23
- puts "after step #{s.current_step}"
24
- end
25
-
26
- after(:example) do
27
- puts "after example"
28
- end
29
-
30
- after(:suite) do
31
- puts "after suite"
32
- end
33
-
34
- after(:context) do
35
- puts "after all"
36
- end
37
-
38
- it "should build", :story => "Main story" do |e|
39
- e.attach_file "test-file1", Tempfile.new("test")
40
- e.step "step1" do |step|
41
- step.attach_file "test-file2", Tempfile.new("test")
42
- end
43
-
44
- e.step "step2" do |step|
45
- step.attach_file "logo", File.new("logo.png")
46
- expect(5).to be > 1
47
- end
48
-
49
- e.step "step3" do
50
- expect(0).to eq(1)
51
- end
52
- end
53
-
54
- it "should be failed example" do
55
- fail_spec "Failure"
56
- end
57
-
58
- def fail_spec(desc)
59
- raise RSpec::Expectations::ExpectationNotMetError.new(desc)
60
- end
61
-
62
- it "should raise exception" do |e|
63
-
64
- e.step "step1" do
65
- expect(5).to be > 1
66
- end
67
-
68
- e.step "step2" do
69
- raise "Undesired exception"
70
- end
71
-
72
- end
73
-
74
- it "is a pending example"
75
-
76
- context "some context" do
77
- it do |e|
78
- expect("aa").to eq("aa")
79
- end
80
-
81
- it do |e|
82
- expect(5).to eq(6)
83
- end
84
- end
85
-
86
- end
data/spec/hooks_spec.rb DELETED
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'When I test allure rspec' do
4
- before(:all) do
5
- puts 'Before all in foo spec'
6
- end
7
-
8
- it 'should do something' do
9
- puts 'In the test'
10
- expect(true).not_to be_nil
11
- end
12
- end
data/spec/issue51_spec.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Example', feature: 'Some feature', story: 'some_story' do
4
- it 'first test case' do
5
- #pass
6
- end
7
-
8
- it 'second test case' do
9
- #pass
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
- require 'tempfile'
3
-
4
- describe "Some feature", :feature do
5
- describe "Some story", :story do
6
- it "20 should be greater than 19", :story do
7
- expect(20).to be > 19
8
- end
9
- end
10
-
11
- end
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
- require "set"
3
-
4
- shared_examples_for "a collection" do
5
- let(:collection) { described_class.new([7, 2, 4]) }
6
-
7
- context "initialized with 3 items" do
8
- it "says it has three items" do
9
- expect(collection.size).to be 3
10
- end
11
- end
12
-
13
- describe "#include?" do
14
- context "with an an item that is in the collection" do
15
- it "returns true" do
16
- expect(collection.include?(7)).to be true
17
- end
18
- end
19
-
20
- context "with an an item that is not in the collection" do
21
- it "returns false" do
22
- expect(collection.include?(9)).to be false
23
- end
24
- end
25
- end
26
- end
27
-
28
- describe Array do
29
- it_behaves_like "a collection"
30
- end
31
-
32
- describe Set do
33
- it_behaves_like "a collection"
34
- end
data/spec/spec_helper.rb DELETED
@@ -1,20 +0,0 @@
1
- require 'rspec'
2
- require 'allure-rspec'
3
- require 'nokogiri'
4
-
5
- RSpec.configure do |c|
6
- c.include AllureRSpec::Adaptor
7
-
8
- c.before(:suite) do
9
- puts 'Before Suite Spec helper'
10
- end
11
-
12
- c.before(:all) do
13
- puts 'Before all Spec helper'
14
- end
15
- end
16
-
17
- AllureRSpec.configure do |c|
18
- c.output_dir = "allure"
19
- end
20
-