chutney 3.10.0 → 3.11.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/docs/usage/rules.md +2 -0
- data/lib/chutney/linter/same_scenario.rb +52 -0
- data/lib/chutney/version.rb +1 -1
- data/lib/chutney.rb +1 -0
- data/lib/config/locales/en.yml +2 -0
- data/usechutney.com/_data/navigation.yml +2 -0
- data/usechutney.com/docs/rules/same-scenario/index.md +24 -0
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c008b1c26d32fdc61e5971638623f09d6f34526e0482b31c9e6c98ca7770a5e6
|
4
|
+
data.tar.gz: 4868772b4ffea1157e0c443772d779dc5b693aa7ec693d3e37718d392ab6676b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03c10adcf4fe4c184ef0a867f7b735c1f39e9845ce691c6d6bb2679a3f81917d65e417dd32e80776a5db036afa11de056f35464fdf54db3caf55c82015803cce
|
7
|
+
data.tar.gz: 90fb24d6851765a01e014f1c838c51eed6d0190ce85265ab0344f481fded24ff9b632bdbc847263ddf2b20e80a81f61140cc452409785c52dcc000a105b4c8c4
|
data/docs/usage/rules.md
CHANGED
@@ -57,6 +57,8 @@ Chutney enforces its rules with the linters. These are:
|
|
57
57
|
|
58
58
|
[RequiredTagsStartWith](https://github.com/BillyRuffian/chutney/blob/master/features/required_tags_starts_with.feature): Chutney can enforce a configurable naming prefix for your tags.
|
59
59
|
|
60
|
+
[SameSecenario](https://github.com/BillyRuffian/chutney/blob/master/features/same_scenario.feature): Makes sure you don't acidentally duplicate the actions of your scenario. *Since v3.11.0*
|
61
|
+
|
60
62
|
[SameTagForDifferentCase](https://github.com/BillyRuffian/chutney/blob/master/features/same_tag_different_case.feature): Don't mix the case of tags which have already appeared. Cucumber tags are case sensitive. *Since 3.1.0*
|
61
63
|
|
62
64
|
[SameTagForAllScenarios](https://github.com/BillyRuffian/chutney/blob/master/features/same_tag_for_all_scenarios.feature): You have the same tag for all you scenarios; move the tag to the feature level instead.
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Chutney
|
2
|
+
|
3
|
+
class SameScenario < Linter
|
4
|
+
def lint
|
5
|
+
dictionary = Hash.new { |hash, key| hash[key] = [] }
|
6
|
+
|
7
|
+
scenarios do |feature, scenario|
|
8
|
+
text = scenario
|
9
|
+
.steps
|
10
|
+
.map { |step| "#{step.text} #{child_text(step)}" }
|
11
|
+
.join("\n") + example_text(scenario)
|
12
|
+
|
13
|
+
digest = Digest::SHA2.hexdigest(text)
|
14
|
+
dictionary[digest] << { scenario:, feature: }
|
15
|
+
end
|
16
|
+
|
17
|
+
dictionary.filter { |k, v| v.size > 1 }
|
18
|
+
.each_value do |v|
|
19
|
+
v[1...].each { |problem|
|
20
|
+
add_issue(I18n.t('linters.same_scenario',
|
21
|
+
feature: problem[:feature].name,
|
22
|
+
scenario: problem[:scenario].name,
|
23
|
+
original_feature: v.first[:feature].name,
|
24
|
+
original_scenario: v.first[:scenario].name),
|
25
|
+
problem[:feature], problem[:scenario], nil) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def child_text(step)
|
30
|
+
step.children.map do |child|
|
31
|
+
if child.is_a?(CukeModeler::Table)
|
32
|
+
child.rows.flat_map(&:cells).map(&:value).join(' | ')
|
33
|
+
elsif child.is_a?(CukeModeler::DocString)
|
34
|
+
child.content
|
35
|
+
else
|
36
|
+
''
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def example_text(scenario)
|
42
|
+
if scenario.is_a?(CukeModeler::Outline)
|
43
|
+
"\n" + scenario.examples
|
44
|
+
.flat_map(&:rows)
|
45
|
+
.flat_map(&:cells)
|
46
|
+
.map(&:value).join(' | ')
|
47
|
+
else
|
48
|
+
''
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/chutney/version.rb
CHANGED
data/lib/chutney.rb
CHANGED
@@ -30,6 +30,7 @@ require 'chutney/linter/missing_scenario_outline'
|
|
30
30
|
require 'chutney/linter/missing_test_action'
|
31
31
|
require 'chutney/linter/missing_verification'
|
32
32
|
require 'chutney/linter/required_tags_starts_with'
|
33
|
+
require 'chutney/linter/same_scenario'
|
33
34
|
require 'chutney/linter/same_tag_different_case'
|
34
35
|
require 'chutney/linter/same_tag_for_all_scenarios'
|
35
36
|
require 'chutney/linter/scenario_names_match'
|
data/lib/config/locales/en.yml
CHANGED
@@ -78,6 +78,8 @@ en:
|
|
78
78
|
the assertion being tested.
|
79
79
|
required_tags_starts_with: >-
|
80
80
|
You have tags which do not match the required format. Allowed prefixes are '%{allowed}'.
|
81
|
+
same_scenario: >-
|
82
|
+
Duplicate scenario detected: %{feature} / %{scenario} is a duplicate of %{original_feature} / %{original_scenario}
|
81
83
|
scenario_names_match: >-
|
82
84
|
You have a scenario name which does not match the required format.
|
83
85
|
Allowed patterns are '%{pattern}'.
|
@@ -81,6 +81,8 @@ sidebar:
|
|
81
81
|
url: /docs/rules/missing-test-verification/
|
82
82
|
- title: "Required tags start with"
|
83
83
|
url: /docs/rules/required-tags-start-with/
|
84
|
+
- title: "Same Scenario"
|
85
|
+
url: /docs/rules/same-scenario/
|
84
86
|
- title: "Same tag different case"
|
85
87
|
url: /docs/rules/same-tag-different-case/
|
86
88
|
- title: "Same tag for all scenarios"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
title: "Same Scenario"
|
3
|
+
layout: single
|
4
|
+
permalink: /docs/rules/same-scenario/
|
5
|
+
---
|
6
|
+
|
7
|
+
You have a `Scenario`, or a `Scenario Outline` which appears to be duplicated. This probably means you have a redundant test. You should probably make sure you only have one copy of your steps to be consitent and efficient.
|
8
|
+
|
9
|
+
|
10
|
+
This rule ignores the names of your scenarios but takes into account data tables, examples and doc strings.
|
11
|
+
|
12
|
+
## Examples
|
13
|
+
|
14
|
+
```gherkin
|
15
|
+
Feature: Test
|
16
|
+
Scenario: Scenario A
|
17
|
+
When I do a thing
|
18
|
+
Then A thing happens
|
19
|
+
|
20
|
+
Scenario: Scenario B
|
21
|
+
When I do a thing
|
22
|
+
Then A thing happens
|
23
|
+
```
|
24
|
+
|
metadata
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chutney
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nigel Brookes-Thomas
|
8
8
|
- Stefan Rohe
|
9
9
|
- Nishtha Argawal
|
10
10
|
- John Gluck
|
11
|
-
autorequire:
|
12
11
|
bindir: exe
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: amatch
|
@@ -181,6 +180,7 @@ files:
|
|
181
180
|
- lib/chutney/linter/missing_test_action.rb
|
182
181
|
- lib/chutney/linter/missing_verification.rb
|
183
182
|
- lib/chutney/linter/required_tags_starts_with.rb
|
183
|
+
- lib/chutney/linter/same_scenario.rb
|
184
184
|
- lib/chutney/linter/same_tag_different_case.rb
|
185
185
|
- lib/chutney/linter/same_tag_for_all_scenarios.rb
|
186
186
|
- lib/chutney/linter/scenario_names_match.rb
|
@@ -241,6 +241,7 @@ files:
|
|
241
241
|
- usechutney.com/docs/rules/missing-test-action/index.md
|
242
242
|
- usechutney.com/docs/rules/missing-test-verification/index.md
|
243
243
|
- usechutney.com/docs/rules/required-tag-starts-with/index.md
|
244
|
+
- usechutney.com/docs/rules/same-scenario/index.md
|
244
245
|
- usechutney.com/docs/rules/same-tag-different-case/index.md
|
245
246
|
- usechutney.com/docs/rules/same-tag-for-all-scenarios/index.md
|
246
247
|
- usechutney.com/docs/rules/scenario-names-match/index.md
|
@@ -266,7 +267,6 @@ metadata:
|
|
266
267
|
homepage_uri: https://www.usechutney.com/
|
267
268
|
source_code_uri: https://github.com/BillyRuffian/chutney
|
268
269
|
changelog_uri: https://github.com/BillyRuffian/chutney/releases
|
269
|
-
post_install_message:
|
270
270
|
rdoc_options: []
|
271
271
|
require_paths:
|
272
272
|
- lib
|
@@ -281,8 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
281
281
|
- !ruby/object:Gem::Version
|
282
282
|
version: '0'
|
283
283
|
requirements: []
|
284
|
-
rubygems_version: 3.
|
285
|
-
signing_key:
|
284
|
+
rubygems_version: 3.6.9
|
286
285
|
specification_version: 4
|
287
286
|
summary: A linter for multi-lingual Gherkin
|
288
287
|
test_files: []
|