cuke_linter 0.12.1 → 0.13.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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -1
  3. data/lib/cuke_linter.rb +4 -0
  4. data/lib/cuke_linter/linters/background_does_more_than_setup_linter.rb +17 -1
  5. data/lib/cuke_linter/linters/test_with_action_step_as_final_step_linter.rb +12 -1
  6. data/lib/cuke_linter/linters/test_with_no_action_step_linter.rb +12 -1
  7. data/lib/cuke_linter/linters/test_with_no_verification_step_linter.rb +12 -1
  8. data/lib/cuke_linter/linters/test_with_setup_step_after_action_step_linter.rb +18 -2
  9. data/lib/cuke_linter/linters/test_with_setup_step_after_verification_step_linter.rb +18 -2
  10. data/lib/cuke_linter/linters/test_with_setup_step_as_final_step_linter.rb +12 -1
  11. data/lib/cuke_linter/version.rb +1 -1
  12. data/testing/cucumber/features/linters/background_does_more_than_setup.feature +34 -0
  13. data/testing/cucumber/features/linters/test_with_action_as_final_step.feature +25 -3
  14. data/testing/cucumber/features/linters/test_with_no_action_step.feature +27 -1
  15. data/testing/cucumber/features/linters/test_with_no_verification_step.feature +28 -1
  16. data/testing/cucumber/features/linters/test_with_setup_step_after_action_step.feature +28 -1
  17. data/testing/cucumber/features/linters/test_with_setup_step_after_verification_step.feature +28 -1
  18. data/testing/cucumber/features/linters/test_with_setup_step_as_final_step.feature +25 -3
  19. data/testing/cucumber/step_definitions/setup_steps.rb +28 -0
  20. data/testing/rspec/spec/unit/cuke_linter_unit_spec.rb +12 -0
  21. data/testing/rspec/spec/unit/linters/background_does_more_than_setup_linter_unit_spec.rb +109 -0
  22. data/testing/rspec/spec/unit/linters/test_with_action_step_as_final_step_linter_unit_spec.rb +67 -0
  23. data/testing/rspec/spec/unit/linters/test_with_no_action_step_linter_unit_spec.rb +68 -0
  24. data/testing/rspec/spec/unit/linters/test_with_no_verification_step_linter_unit_spec.rb +67 -0
  25. data/testing/rspec/spec/unit/linters/test_with_setup_step_after_action_step_linter_unit_spec.rb +109 -0
  26. data/testing/rspec/spec/unit/linters/test_with_setup_step_after_verification_step_linter_unit_spec.rb +108 -0
  27. data/testing/rspec/spec/unit/linters/test_with_setup_step_as_final_step_linter_unit_spec.rb +66 -0
  28. metadata +2 -2
@@ -23,8 +23,35 @@ Feature: Test with setup step after action step linter
23
23
  | linter | problem | location |
24
24
  | TestWithSetupStepAfterActionStepLinter | Test has 'Given' step after 'When' step. | <path_to_file>:3 |
25
25
 
26
+ Scenario: Configuration of keywords for different dialect
27
+ Given a linter for tests with a setup step after an action step has been registered
28
+ And the following configuration file:
29
+ """
30
+ TestWithSetupStepAfterActionStepLinter:
31
+ Given:
32
+ - Dado
33
+ - Dadas
34
+ When:
35
+ - Quando
36
+ Then:
37
+ - Então
38
+ """
39
+ And the following feature:
40
+ """
41
+ # language:pt
42
+ Funcionalidade: Feature name
43
+
44
+ Cenário: scenario name
45
+ Quando this is an action in pt dialect
46
+ Dado some setup in pt dialect
47
+ """
48
+ When the configuration file is loaded
49
+ And it is linted
50
+ Then an error is reported:
51
+ | linter | problem | location |
52
+ | TestWithSetupStepAfterActionStepLinter | Test has 'Given' step after 'When' step. | <path_to_file>:4 |
53
+
26
54
  @wip
27
55
  Scenario: Configuration
28
56
 
29
- Configure the keyword(s) that count as setup/action/verification steps?
30
57
  Configure whether or not to include background steps?
@@ -23,8 +23,35 @@ Feature: Test with setup step after verification step linter
23
23
  | linter | problem | location |
24
24
  | TestWithSetupStepAfterVerificationStepLinter | Test has 'Given' step after 'Then' step. | <path_to_file>:3 |
25
25
 
26
+ Scenario: Configuration of keywords for different dialect
27
+ Given a linter for tests with a setup step after a verification step has been registered
28
+ And the following configuration file:
29
+ """
30
+ TestWithSetupStepAfterVerificationStepLinter:
31
+ Given:
32
+ - Dado
33
+ - Dadas
34
+ When:
35
+ - Quando
36
+ Then:
37
+ - Então
38
+ """
39
+ And the following feature:
40
+ """
41
+ # language:pt
42
+ Funcionalidade: Feature name
43
+
44
+ Cenário: scenario name
45
+ Então this is an validation in pt dialect
46
+ Dado some setup in pt dialect
47
+ """
48
+ When the configuration file is loaded
49
+ And it is linted
50
+ Then an error is reported:
51
+ | linter | problem | location |
52
+ | TestWithSetupStepAfterVerificationStepLinter | Test has 'Given' step after 'Then' step. | <path_to_file>:4 |
53
+
26
54
  @wip
27
55
  Scenario: Configuration
28
56
 
29
- Configure the keyword(s) that count as verification steps?
30
57
  Configure whether or not to include background steps?
@@ -22,7 +22,29 @@ Feature: Test with setup step as final step linter
22
22
  | linter | problem | location |
23
23
  | TestWithSetupStepAsFinalStepLinter | Test has 'Given' as the final step. | <path_to_file>:3 |
24
24
 
25
- @wip
26
- Scenario: Configuration
25
+ Scenario: Configuration of keywords for different dialect
26
+ Given a linter for tests with a setup step as the final step has been registered
27
+ And the following configuration file:
28
+ """
29
+ TestWithSetupStepAsFinalStepLinter:
30
+ Given:
31
+ - Dado
32
+ - Dadas
33
+ When:
34
+ - Quando
35
+ Then:
36
+ - Então
37
+ """
38
+ And the following feature:
39
+ """
40
+ # language:pt
41
+ Funcionalidade: Feature name
27
42
 
28
- Configure the keyword(s) that count as setup steps?
43
+ Cenário: scenario name
44
+ Dado some setup in pt dialect
45
+ """
46
+ When the configuration file is loaded
47
+ And it is linted
48
+ Then an error is reported:
49
+ | linter | problem | location |
50
+ | TestWithSetupStepAsFinalStepLinter | Test has 'Given' as the final step. | <path_to_file>:4 |
@@ -101,6 +101,34 @@ Given(/^a linter for tests with too many steps has been registered$/) do
101
101
  CukeLinter.register_linter(linter: CukeLinter::TestWithTooManyStepsLinter.new, name: 'TestWithTooManyStepsLinter')
102
102
  end
103
103
 
104
+ Given(/^a linter for backgrounds that do more than setup has been registered$/) do
105
+ CukeLinter.register_linter(linter: CukeLinter::BackgroundDoesMoreThanSetupLinter.new, name: 'BackgroundDoesMoreThanSetupLinter')
106
+ end
107
+
108
+ Given(/^a linter for tests with an action step as the final step has been registered$/) do
109
+ CukeLinter.register_linter(linter: CukeLinter::TestWithActionStepAsFinalStepLinter.new, name: 'TestWithActionStepAsFinalStepLinter')
110
+ end
111
+
112
+ Given(/^a linter for tests with no action step has been registered$/) do
113
+ CukeLinter.register_linter(linter: CukeLinter::TestWithNoActionStepLinter.new, name: 'TestWithNoActionStepLinter')
114
+ end
115
+
116
+ Given(/^a linter for tests with no verification step has been registered$/) do
117
+ CukeLinter.register_linter(linter: CukeLinter::TestWithNoVerificationStepLinter.new, name: 'TestWithNoVerificationStepLinter')
118
+ end
119
+
120
+ Given(/^a linter for tests with a setup step after an action step has been registered$/) do
121
+ CukeLinter.register_linter(linter: CukeLinter::TestWithSetupStepAfterActionStepLinter.new, name: 'TestWithSetupStepAfterActionStepLinter')
122
+ end
123
+
124
+ Given(/^a linter for tests with a setup step after a verification step has been registered$/) do
125
+ CukeLinter.register_linter(linter: CukeLinter::TestWithSetupStepAfterVerificationStepLinter.new, name: 'TestWithSetupStepAfterVerificationStepLinter')
126
+ end
127
+
128
+ Given(/^a linter for tests with a setup step as the final step has been registered$/) do
129
+ CukeLinter.register_linter(linter: CukeLinter::TestWithSetupStepAsFinalStepLinter.new, name: 'TestWithSetupStepAsFinalStepLinter')
130
+ end
131
+
104
132
  Given("a linter for features without a description") do
105
133
  @linter = CukeLinter::FeatureWithoutDescriptionLinter.new
106
134
  end
@@ -25,6 +25,18 @@ RSpec.describe CukeLinter do
25
25
  expect(CukeLinter::VERSION).not_to be nil
26
26
  end
27
27
 
28
+ it "has a default keyword for 'Given'" do
29
+ expect(CukeLinter::DEFAULT_GIVEN_KEYWORD).to eq('Given')
30
+ end
31
+
32
+ it "has a default keyword for 'When'" do
33
+ expect(CukeLinter::DEFAULT_WHEN_KEYWORD).to eq('When')
34
+ end
35
+
36
+ it "has a default keyword for 'Then'" do
37
+ expect(CukeLinter::DEFAULT_THEN_KEYWORD).to eq('Then')
38
+ end
39
+
28
40
  it 'can lint' do
29
41
  expect(CukeLinter).to respond_to(:lint)
30
42
  end
@@ -6,6 +6,7 @@ RSpec.describe CukeLinter::BackgroundDoesMoreThanSetupLinter do
6
6
  let(:model_file_path) { 'some_file_path' }
7
7
 
8
8
  it_should_behave_like 'a linter at the unit level'
9
+ it_should_behave_like 'a configurable linter at the unit level'
9
10
 
10
11
 
11
12
  it 'has a name' do
@@ -66,6 +67,114 @@ RSpec.describe CukeLinter::BackgroundDoesMoreThanSetupLinter do
66
67
 
67
68
  end
68
69
 
70
+
71
+ describe 'configuration' do
72
+
73
+ let(:test_model) do
74
+ CukeLinter::ModelFactory.generate_background_model
75
+ end
76
+
77
+ context 'with configuration' do
78
+
79
+ before(:each) do
80
+ subject.configure(configuration)
81
+ end
82
+
83
+ context "with a configured 'When' keyword" do
84
+
85
+ let(:when_keyword) { 'Foo' }
86
+ let(:configuration) { { 'When' => when_keyword } }
87
+
88
+ it "uses the configured 'When' keyword" do
89
+ test_model.steps.first.keyword = when_keyword
90
+
91
+ result = subject.lint(test_model)
92
+
93
+ expect(result).to_not be_nil
94
+ end
95
+
96
+ end
97
+
98
+ context "with a configured 'Then' keyword" do
99
+
100
+ let(:then_keyword) { 'Foo' }
101
+ let(:configuration) { { 'Then' => then_keyword } }
102
+
103
+ it "uses the configured 'Then' keyword" do
104
+ test_model.steps.first.keyword = then_keyword
105
+
106
+ result = subject.lint(test_model)
107
+
108
+ expect(result).to_not be_nil
109
+ end
110
+
111
+ end
112
+
113
+ end
114
+
115
+ context 'without configuration' do
116
+
117
+ context 'because configuration never happened' do
118
+
119
+ it "uses the default 'When' keyword" do
120
+ test_model.steps.first.keyword = CukeLinter::DEFAULT_WHEN_KEYWORD
121
+
122
+ result = subject.lint(test_model)
123
+
124
+ expect(result).to_not be_nil
125
+ end
126
+
127
+ it "uses the default 'Then' keyword" do
128
+ test_model.steps.first.keyword = CukeLinter::DEFAULT_THEN_KEYWORD
129
+
130
+ result = subject.lint(test_model)
131
+
132
+ expect(result).to_not be_nil
133
+ end
134
+
135
+ end
136
+
137
+ context "because configuration did not set a 'When' keyword" do
138
+
139
+ before(:each) do
140
+ subject.configure(configuration)
141
+ end
142
+
143
+ let(:configuration) { {} }
144
+
145
+ it "uses the default 'When' keyword" do
146
+ test_model.steps.first.keyword = CukeLinter::DEFAULT_WHEN_KEYWORD
147
+
148
+ result = subject.lint(test_model)
149
+
150
+ expect(result).to_not be_nil
151
+ end
152
+
153
+ end
154
+
155
+ context "because configuration did not set a 'Then' keyword" do
156
+
157
+ before(:each) do
158
+ subject.configure(configuration)
159
+ end
160
+
161
+ let(:configuration) { {} }
162
+
163
+ it "uses the default 'Then' keyword" do
164
+ test_model.steps.first.keyword = CukeLinter::DEFAULT_THEN_KEYWORD
165
+
166
+ result = subject.lint(test_model)
167
+
168
+ expect(result).to_not be_nil
169
+ end
170
+
171
+ end
172
+
173
+ end
174
+
175
+ end
176
+
177
+
69
178
  context 'a non-background model' do
70
179
 
71
180
  let(:test_model) { CukeModeler::Model.new }
@@ -6,6 +6,7 @@ RSpec.describe CukeLinter::TestWithActionStepAsFinalStepLinter do
6
6
  let(:model_file_path) { 'some_file_path' }
7
7
 
8
8
  it_should_behave_like 'a linter at the unit level'
9
+ it_should_behave_like 'a configurable linter at the unit level'
9
10
 
10
11
 
11
12
  it 'has a name' do
@@ -86,6 +87,72 @@ RSpec.describe CukeLinter::TestWithActionStepAsFinalStepLinter do
86
87
 
87
88
  end
88
89
 
90
+ describe 'configuration' do
91
+
92
+ let(:test_model) do
93
+ CukeLinter::ModelFactory.generate_scenario_model(source_text: 'Scenario:
94
+ * a step')
95
+ end
96
+
97
+ context 'with configuration' do
98
+
99
+ before(:each) do
100
+ subject.configure(configuration)
101
+ end
102
+
103
+ context "with a configured 'When' keyword" do
104
+
105
+ let(:when_keyword) { 'Foo' }
106
+ let(:configuration) { { 'When' => when_keyword } }
107
+
108
+ it "uses the configured 'When' keyword" do
109
+ test_model.steps.last.keyword = when_keyword
110
+
111
+ result = subject.lint(test_model)
112
+
113
+ expect(result).to_not be_nil
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+
120
+ context 'without configuration' do
121
+
122
+ context 'because configuration never happened' do
123
+
124
+ it "uses the default 'When' keyword" do
125
+ test_model.steps.last.keyword = CukeLinter::DEFAULT_WHEN_KEYWORD
126
+
127
+ result = subject.lint(test_model)
128
+
129
+ expect(result).to_not be_nil
130
+ end
131
+
132
+ end
133
+
134
+ context "because configuration did not set a 'When' keyword" do
135
+
136
+ before(:each) do
137
+ subject.configure(configuration)
138
+ end
139
+
140
+ let(:configuration) { {} }
141
+
142
+ it "uses the default 'When' keyword" do
143
+ test_model.steps.last.keyword = CukeLinter::DEFAULT_WHEN_KEYWORD
144
+
145
+ result = subject.lint(test_model)
146
+
147
+ expect(result).to_not be_nil
148
+ end
149
+
150
+ end
151
+
152
+ end
153
+
154
+ end
155
+
89
156
 
90
157
  context 'a non-test model' do
91
158
 
@@ -6,6 +6,7 @@ RSpec.describe CukeLinter::TestWithNoActionStepLinter do
6
6
  let(:model_file_path) { 'some_file_path' }
7
7
 
8
8
  it_should_behave_like 'a linter at the unit level'
9
+ it_should_behave_like 'a configurable linter at the unit level'
9
10
 
10
11
 
11
12
  it 'has a name' do
@@ -165,6 +166,73 @@ RSpec.describe CukeLinter::TestWithNoActionStepLinter do
165
166
  end
166
167
 
167
168
 
169
+ describe 'configuration' do
170
+
171
+ let(:test_model) do
172
+ CukeLinter::ModelFactory.generate_scenario_model(source_text: 'Scenario:
173
+ When a step')
174
+ end
175
+
176
+ context 'with configuration' do
177
+
178
+ before(:each) do
179
+ subject.configure(configuration)
180
+ end
181
+
182
+ context "with a configured 'When' keyword" do
183
+
184
+ let(:when_keyword) { 'Foo' }
185
+ let(:configuration) { { 'When' => when_keyword } }
186
+
187
+ it "uses the configured 'When' keyword" do
188
+ test_model.steps.first.keyword = 'When'
189
+
190
+ result = subject.lint(test_model)
191
+
192
+ expect(result).to_not be_nil
193
+ end
194
+
195
+ end
196
+
197
+ end
198
+
199
+ context 'without configuration' do
200
+
201
+ context 'because configuration never happened' do
202
+
203
+ it "uses the default 'When' keyword" do
204
+ test_model.steps.first.keyword = CukeLinter::DEFAULT_WHEN_KEYWORD
205
+
206
+ result = subject.lint(test_model)
207
+
208
+ expect(result).to be_nil
209
+ end
210
+
211
+ end
212
+
213
+ context "because configuration did not set a 'When' keyword" do
214
+
215
+ before(:each) do
216
+ subject.configure(configuration)
217
+ end
218
+
219
+ let(:configuration) { {} }
220
+
221
+ it "uses the default 'When' keyword" do
222
+ test_model.steps.last.keyword = CukeLinter::DEFAULT_WHEN_KEYWORD
223
+
224
+ result = subject.lint(test_model)
225
+
226
+ expect(result).to be_nil
227
+ end
228
+
229
+ end
230
+
231
+ end
232
+
233
+ end
234
+
235
+
168
236
  context 'a non-test model' do
169
237
 
170
238
  let(:test_model) { CukeModeler::Model.new }