cuke_linter 0.9.0 → 0.10.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -1
  3. data/CONTRIBUTING.md +26 -0
  4. data/README.md +2 -15
  5. data/lib/cuke_linter.rb +36 -18
  6. data/lib/cuke_linter/linters/example_without_name_linter.rb +1 -1
  7. data/lib/cuke_linter/linters/feature_with_too_many_different_tags_linter.rb +38 -0
  8. data/lib/cuke_linter/linters/test_should_use_background_linter.rb +28 -0
  9. data/lib/cuke_linter/linters/test_with_action_step_as_final_step_linter.rb +23 -0
  10. data/lib/cuke_linter/linters/test_with_setup_step_after_action_step_linter.rb +31 -0
  11. data/lib/cuke_linter/linters/test_with_setup_step_after_verification_step_linter.rb +31 -0
  12. data/lib/cuke_linter/linters/test_with_setup_step_as_final_step_linter.rb +23 -0
  13. data/lib/cuke_linter/version.rb +1 -1
  14. data/testing/cucumber/features/default_linters.feature +20 -14
  15. data/testing/cucumber/features/linters/example_without_name.feature +8 -6
  16. data/testing/cucumber/features/linters/feature_with_too_many_different_tags.feature +56 -0
  17. data/testing/cucumber/features/linters/step_with_end_period.feature +1 -1
  18. data/testing/cucumber/features/linters/test_should_use_background.feature +29 -0
  19. data/testing/cucumber/features/linters/test_with_action_as_final_step.feature +28 -0
  20. data/testing/cucumber/features/linters/test_with_setup_step_after_action_step.feature +30 -0
  21. data/testing/cucumber/features/linters/test_with_setup_step_after_verification_step.feature +30 -0
  22. data/testing/cucumber/features/linters/test_with_setup_step_as_final_step.feature +28 -0
  23. data/testing/cucumber/features/linters/test_with_too_many_steps.feature +5 -0
  24. data/testing/cucumber/step_definitions/setup_steps.rb +28 -0
  25. data/testing/model_factory.rb +1 -1
  26. data/testing/rspec/spec/integration/cuke_linter_integration_spec.rb +12 -0
  27. data/testing/rspec/spec/integration/linters/feature_with_too_many_different_tags_linter_integration_spec.rb +8 -0
  28. data/testing/rspec/spec/integration/linters/test_should_use_background_linter_integration_spec.rb +8 -0
  29. data/testing/rspec/spec/integration/linters/test_with_action_step_as_final_step_linter_integration_spec.rb +8 -0
  30. data/testing/rspec/spec/integration/linters/test_with_setup_step_after_action_step_linter_integration_spec.rb +8 -0
  31. data/testing/rspec/spec/integration/linters/test_with_setup_step_after_verification_step_linter_integration_spec.rb +8 -0
  32. data/testing/rspec/spec/integration/linters/test_with_setup_step_as_final_step_linter_integration_spec.rb +8 -0
  33. data/testing/rspec/spec/unit/linters/background_does_more_than_setup_linter_unit_spec.rb +20 -57
  34. data/testing/rspec/spec/unit/linters/element_with_too_many_tags_linter_unit_spec.rb +18 -52
  35. data/testing/rspec/spec/unit/linters/example_without_name_linter_unit_spec.rb +41 -43
  36. data/testing/rspec/spec/unit/linters/feature_with_too_many_different_tags_linter_unit_spec.rb +293 -0
  37. data/testing/rspec/spec/unit/linters/feature_without_description_linter_unit_spec.rb +25 -42
  38. data/testing/rspec/spec/unit/linters/feature_without_name_linter_unit_spec.rb +10 -38
  39. data/testing/rspec/spec/unit/linters/feature_without_scenarios_linter_unit_spec.rb +32 -52
  40. data/testing/rspec/spec/unit/linters/linter_unit_spec.rb +27 -10
  41. data/testing/rspec/spec/unit/linters/linter_unit_specs.rb +26 -12
  42. data/testing/rspec/spec/unit/linters/outline_with_single_example_row_linter_unit_spec.rb +19 -66
  43. data/testing/rspec/spec/unit/linters/single_test_background_linter_unit_spec.rb +12 -39
  44. data/testing/rspec/spec/unit/linters/step_with_end_period_linter_unit_spec.rb +9 -28
  45. data/testing/rspec/spec/unit/linters/step_with_too_many_characters_linter_unit_spec.rb +19 -45
  46. data/testing/rspec/spec/unit/linters/test_should_use_background_linter_unit_spec.rb +226 -0
  47. data/testing/rspec/spec/unit/linters/test_with_action_step_as_final_step_linter_unit_spec.rb +98 -0
  48. data/testing/rspec/spec/unit/linters/test_with_no_action_step_linter_unit_spec.rb +10 -51
  49. data/testing/rspec/spec/unit/linters/test_with_no_name_linter_unit_spec.rb +11 -38
  50. data/testing/rspec/spec/unit/linters/test_with_no_verification_step_linter_unit_spec.rb +16 -54
  51. data/testing/rspec/spec/unit/linters/test_with_setup_step_after_action_step_linter_unit_spec.rb +124 -0
  52. data/testing/rspec/spec/unit/linters/test_with_setup_step_after_verification_step_linter_unit_spec.rb +125 -0
  53. data/testing/rspec/spec/unit/linters/test_with_setup_step_as_final_step_linter_unit_spec.rb +98 -0
  54. data/testing/rspec/spec/unit/linters/test_with_too_many_steps_linter_unit_spec.rb +9 -49
  55. metadata +27 -2
@@ -3,25 +3,7 @@ require_relative '../../../../../environments/rspec_env'
3
3
 
4
4
  RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
5
5
 
6
- let(:good_data) do
7
- model = CukeLinter::ModelFactory.generate_scenario_model
8
- model.tags = [:tag_1]
9
-
10
- model
11
- end
12
-
13
- let(:bad_data) do
14
- model = CukeLinter::ModelFactory.generate_scenario_model
15
- model.tags = [:tag_1,
16
- :tag_2,
17
- :tag_3,
18
- :tag_4,
19
- :tag_5,
20
- :tag_6]
21
-
22
- model
23
- end
24
-
6
+ let(:model_file_path) { 'some_file_path' }
25
7
 
26
8
  it_should_behave_like 'a linter at the unit level'
27
9
  it_should_behave_like 'a configurable linter at the unit level'
@@ -33,12 +15,15 @@ RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
33
15
 
34
16
  describe 'linting' do
35
17
 
36
- ['feature', 'scenario', 'outline', 'example'].each do |model_type|
18
+ # Descriptive variable name, just in case what kinds of elements are taggable ever changes
19
+ taggable_elements = ['feature', 'scenario', 'outline', 'example']
20
+
21
+ taggable_elements.each do |model_type|
37
22
 
38
23
  context "with a #{model_type} that has too many tags" do
39
24
 
40
25
  let(:test_model) do
41
- model = CukeLinter::ModelFactory.send("generate_#{model_type}_model", parent_file_path: 'path_to_file')
26
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model", parent_file_path: model_file_path)
42
27
  model.tags = [:tag_1,
43
28
  :tag_2,
44
29
  :tag_3,
@@ -49,22 +34,15 @@ RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
49
34
  model
50
35
  end
51
36
 
37
+ it_should_behave_like 'a linter linting a bad model'
38
+
39
+
52
40
  it 'records a problem' do
53
41
  result = subject.lint(test_model)
54
42
 
55
43
  expect(result[:problem]).to match(/^#{model_type.capitalize} has too many tags. \d+ tags found \(max 5\)\.$/)
56
44
  end
57
45
 
58
- it 'records the location of the problem' do
59
- test_model.source_line = 1
60
- result = subject.lint(test_model)
61
- expect(result[:location]).to eq('path_to_file:1')
62
-
63
- test_model.source_line = 3
64
- result = subject.lint(test_model)
65
- expect(result[:location]).to eq('path_to_file:3')
66
- end
67
-
68
46
  it 'includes the number of tags found in the problem record' do
69
47
  tag_count = test_model.tags.count
70
48
  result = subject.lint(test_model)
@@ -82,7 +60,7 @@ RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
82
60
  context 'because it has 5 tags' do
83
61
 
84
62
  let(:test_model) do
85
- model = CukeLinter::ModelFactory.send("generate_#{model_type}_model", parent_file_path: 'path_to_file')
63
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model")
86
64
  model.tags = [:tag_1,
87
65
  :tag_2,
88
66
  :tag_3,
@@ -92,24 +70,20 @@ RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
92
70
  model
93
71
  end
94
72
 
95
- it 'does not record a problem' do
96
- expect(subject.lint(test_model)).to eq(nil)
97
- end
73
+ it_should_behave_like 'a linter linting a good model'
98
74
 
99
75
  end
100
76
 
101
77
  context 'because it has fewer than 5 tags' do
102
78
 
103
79
  let(:test_model) do
104
- model = CukeLinter::ModelFactory.send("generate_#{model_type}_model", parent_file_path: 'path_to_file')
80
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model")
105
81
  model.tags = [:tag_1]
106
82
 
107
83
  model
108
84
  end
109
85
 
110
- it 'does not record a problem' do
111
- expect(subject.lint(test_model)).to eq(nil)
112
- end
86
+ it_should_behave_like 'a linter linting a good model'
113
87
 
114
88
  end
115
89
 
@@ -118,30 +92,26 @@ RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
118
92
  context 'because its tags are empty' do
119
93
 
120
94
  let(:test_model) do
121
- model = CukeLinter::ModelFactory.send("generate_#{model_type}_model", parent_file_path: 'path_to_file')
95
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model")
122
96
  model.tags = []
123
97
 
124
98
  model
125
99
  end
126
100
 
127
- it 'does not record a problem' do
128
- expect(subject.lint(test_model)).to eq(nil)
129
- end
101
+ it_should_behave_like 'a linter linting a good model'
130
102
 
131
103
  end
132
104
 
133
105
  context 'because its tags are nil' do
134
106
 
135
107
  let(:test_model) do
136
- model = CukeLinter::ModelFactory.send("generate_#{model_type}_model", parent_file_path: 'path_to_file')
108
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model")
137
109
  model.tags = nil
138
110
 
139
111
  model
140
112
  end
141
113
 
142
- it 'does not record a problem' do
143
- expect(subject.lint(test_model)).to eq(nil)
144
- end
114
+ it_should_behave_like 'a linter linting a good model'
145
115
 
146
116
  end
147
117
 
@@ -320,11 +290,7 @@ RSpec.describe CukeLinter::ElementWithTooManyTagsLinter do
320
290
 
321
291
  let(:test_model) { CukeModeler::Model.new }
322
292
 
323
- it 'returns no result' do
324
- result = subject.lint(test_model)
325
-
326
- expect(result).to eq(nil)
327
- end
293
+ it_should_behave_like 'a linter linting a good model'
328
294
 
329
295
  end
330
296
 
@@ -3,20 +3,7 @@ require_relative '../../../../../environments/rspec_env'
3
3
 
4
4
  RSpec.describe CukeLinter::ExampleWithoutNameLinter do
5
5
 
6
- let(:good_data) do
7
- model = CukeLinter::ModelFactory.generate_example_model
8
- model.name = 'foo'
9
-
10
- model
11
- end
12
-
13
- let(:bad_data) do
14
- model = CukeLinter::ModelFactory.generate_example_model
15
- model.name = ''
16
-
17
- model
18
- end
19
-
6
+ let(:model_file_path) { 'some_file_path' }
20
7
 
21
8
  it_should_behave_like 'a linter at the unit level'
22
9
 
@@ -29,54 +16,65 @@ RSpec.describe CukeLinter::ExampleWithoutNameLinter do
29
16
 
30
17
  context 'an example with no name' do
31
18
 
32
- let(:test_model_with_nil_name) do
33
- model = CukeLinter::ModelFactory.generate_example_model(parent_file_path: 'path_to_file')
34
- model.name = nil
19
+ context 'because the name is nil' do
35
20
 
36
- model
37
- end
21
+ let(:test_model) do
22
+ model = CukeLinter::ModelFactory.generate_example_model(parent_file_path: model_file_path)
23
+ model.name = nil
38
24
 
39
- let(:test_model_with_blank_name) do
40
- model = CukeLinter::ModelFactory.generate_example_model(parent_file_path: 'path_to_file')
41
- model.name = ''
25
+ model
26
+ end
27
+
28
+ it_should_behave_like 'a linter linting a bad model'
29
+
30
+ it 'records a problem' do
31
+ result = subject.lint(test_model)
32
+
33
+ expect(result[:problem]).to eq('Example grouping has no name')
34
+ end
42
35
 
43
- model
44
36
  end
45
37
 
46
- it 'records a problem' do
47
- result = subject.lint(test_model_with_nil_name)
38
+ context 'because the name is empty' do
39
+
40
+ let(:test_model) do
41
+ model = CukeLinter::ModelFactory.generate_example_model(parent_file_path: model_file_path)
42
+ model.name = ''
43
+
44
+ model
45
+ end
48
46
 
49
- expect(result[:problem]).to eq('Example has no name')
47
+ it_should_behave_like 'a linter linting a bad model'
50
48
 
51
- result = subject.lint(test_model_with_blank_name)
49
+ it 'records a problem' do
50
+ result = subject.lint(test_model)
51
+
52
+ expect(result[:problem]).to eq('Example grouping has no name')
53
+ end
52
54
 
53
- expect(result[:problem]).to eq('Example has no name')
54
55
  end
55
56
 
56
- it 'records the location of the problem' do
57
- model_1 = CukeLinter::ModelFactory.generate_example_model(parent_file_path: 'path_to_file')
58
- model_1.name = nil
59
- model_1.source_line = 1
60
- model_2 = CukeLinter::ModelFactory.generate_example_model(parent_file_path: 'path_to_file')
61
- model_2.name = nil
62
- model_2.source_line = 3
57
+ end
58
+
59
+ context 'an example with a name' do
63
60
 
64
- result = subject.lint(model_1)
65
- expect(result[:location]).to eq('path_to_file:1')
61
+ let(:test_model) do
62
+ model = CukeLinter::ModelFactory.generate_example_model
63
+ model.name = 'a name'
66
64
 
67
- result = subject.lint(model_2)
68
- expect(result[:location]).to eq('path_to_file:3')
65
+ model
69
66
  end
70
67
 
68
+ it_should_behave_like 'a linter linting a good model'
69
+
71
70
  end
72
71
 
72
+
73
73
  context 'a non-example model' do
74
74
 
75
- it 'returns no result' do
76
- result = subject.lint(CukeModeler::Model.new)
75
+ let(:test_model) { CukeModeler::Model.new }
77
76
 
78
- expect(result).to eq(nil)
79
- end
77
+ it_should_behave_like 'a linter linting a good model'
80
78
 
81
79
  end
82
80
  end
@@ -0,0 +1,293 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::FeatureWithTooManyDifferentTagsLinter do
5
+
6
+ let(:model_file_path) { 'some_file_path' }
7
+
8
+ it_should_behave_like 'a linter at the unit level'
9
+ it_should_behave_like 'a configurable linter at the unit level'
10
+
11
+
12
+ it 'has a name' do
13
+ expect(subject.name).to eq('FeatureWithTooManyDifferentTagsLinter')
14
+ end
15
+
16
+ describe 'linting' do
17
+
18
+ context 'with a feature that contains too many different tags' do
19
+
20
+ let(:test_model) do
21
+ model = CukeLinter::ModelFactory.generate_feature_model(parent_file_path: model_file_path)
22
+ model.tags = [CukeModeler::Tag.new('@1'),
23
+ CukeModeler::Tag.new('@2'),
24
+ CukeModeler::Tag.new('@3'),
25
+ CukeModeler::Tag.new('@4'),
26
+ CukeModeler::Tag.new('@5'),
27
+ CukeModeler::Tag.new('@6'),
28
+ CukeModeler::Tag.new('@7'),
29
+ CukeModeler::Tag.new('@8'),
30
+ CukeModeler::Tag.new('@9'),
31
+ CukeModeler::Tag.new('@10'),
32
+ CukeModeler::Tag.new('@11')]
33
+
34
+ model
35
+ end
36
+
37
+ it_should_behave_like 'a linter linting a bad model'
38
+
39
+
40
+ it 'records a problem' do
41
+ result = subject.lint(test_model)
42
+
43
+ expect(result[:problem]).to match(/^Feature contains too many different tags. \d+ tags found \(max 10\)\.$/)
44
+ end
45
+
46
+ it 'includes the number of different tags found in the problem record' do
47
+ unique_tag_count = test_model.tags.count
48
+ result = subject.lint(test_model)
49
+ expect(result[:problem]).to eq("Feature contains too many different tags. #{unique_tag_count} tags found (max 10).")
50
+
51
+ test_model.tags << CukeModeler::Tag.new('@had_better_be_unique')
52
+ result = subject.lint(test_model)
53
+ expect(result[:problem]).to eq("Feature contains too many different tags. #{unique_tag_count + 1} tags found (max 10).")
54
+ end
55
+
56
+ it 'only counts unique tags' do
57
+ model = CukeLinter::ModelFactory.generate_feature_model
58
+ model.tags = []
59
+ 100.times { model.tags << CukeModeler::Tag.new('@A') }
60
+
61
+ result = subject.lint(model)
62
+
63
+ expect(result).to eq(nil)
64
+ end
65
+
66
+ context 'with child models' do
67
+
68
+ let(:test_model) do
69
+ model = CukeLinter::ModelFactory.generate_feature_model
70
+ model.tags = [CukeModeler::Tag.new('@1'),
71
+ CukeModeler::Tag.new('@2'),
72
+ CukeModeler::Tag.new('@3'),
73
+ CukeModeler::Tag.new('@4'),
74
+ CukeModeler::Tag.new('@5'),
75
+ CukeModeler::Tag.new('@6'),
76
+ CukeModeler::Tag.new('@7'),
77
+ CukeModeler::Tag.new('@8'),
78
+ CukeModeler::Tag.new('@9'),
79
+ CukeModeler::Tag.new('@10'),
80
+ CukeModeler::Tag.new('@11')]
81
+
82
+ # Not all model types are a test but the models dont care and it's good enough for the test
83
+ model.tests = [child_model]
84
+
85
+ model
86
+ end
87
+
88
+ # Descriptive variable name, just in case what kinds of elements are taggable ever changes
89
+ taggable_elements = ['feature', 'scenario', 'outline', 'example']
90
+
91
+ taggable_elements.each do |model_type|
92
+
93
+ context 'that have tags' do
94
+
95
+ let(:child_model) do
96
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model")
97
+ model.tags = [CukeModeler::Tag.new('@12'),
98
+ CukeModeler::Tag.new('@13'),
99
+ CukeModeler::Tag.new('@14')]
100
+
101
+ model
102
+ end
103
+
104
+ it "considers tags from a #{model_type}" do
105
+ result = subject.lint(test_model)
106
+ expect(result[:problem]).to eq('Feature contains too many different tags. 14 tags found (max 10).')
107
+ end
108
+
109
+ end
110
+
111
+ context 'that do not have tags' do
112
+
113
+ context 'because their tags are empty' do
114
+
115
+ let(:child_model) do
116
+ model = CukeLinter::ModelFactory.send("generate_#{model_type}_model")
117
+ model.tags = []
118
+
119
+ model
120
+ end
121
+
122
+ it 'can handle the child model without problem' do
123
+ expect { subject.lint(test_model) }.to_not raise_error
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+
134
+ end
135
+
136
+
137
+ context 'with a feature that does not contain too many different tags' do
138
+
139
+ context 'because it contains 10 different tags' do
140
+
141
+ let(:test_model) do
142
+ model = CukeLinter::ModelFactory.generate_feature_model
143
+ model.tags = [CukeModeler::Tag.new('@1'),
144
+ CukeModeler::Tag.new('@2'),
145
+ CukeModeler::Tag.new('@3'),
146
+ CukeModeler::Tag.new('@4'),
147
+ CukeModeler::Tag.new('@5'),
148
+ CukeModeler::Tag.new('@6'),
149
+ CukeModeler::Tag.new('@7'),
150
+ CukeModeler::Tag.new('@8'),
151
+ CukeModeler::Tag.new('@9'),
152
+ CukeModeler::Tag.new('@10')]
153
+
154
+ model
155
+ end
156
+
157
+ it_should_behave_like 'a linter linting a good model'
158
+
159
+ end
160
+
161
+ context 'because it contains fewer than 10 different tags' do
162
+
163
+ let(:test_model) do
164
+ model = CukeLinter::ModelFactory.generate_feature_model
165
+ model.tags = [CukeModeler::Tag.new('@1')]
166
+
167
+ model
168
+ end
169
+
170
+ it_should_behave_like 'a linter linting a good model'
171
+
172
+ end
173
+
174
+ context 'because it contains no tags' do
175
+
176
+ context 'because its tags are empty' do
177
+
178
+ let(:test_model) do
179
+ model = CukeLinter::ModelFactory.generate_feature_model
180
+ model.tags = []
181
+
182
+ model
183
+ end
184
+
185
+ it_should_behave_like 'a linter linting a good model'
186
+
187
+ end
188
+
189
+ context 'because its tags are nil' do
190
+
191
+ # NOTE: Not handling the case of the model's tags being nil because the model methods used in the
192
+ # linter's implementation will themselves not work when the tags are nil.
193
+
194
+ end
195
+
196
+ end
197
+
198
+ end
199
+
200
+
201
+ describe 'configuration' do
202
+
203
+ let(:default_tag_threshold) { 10 }
204
+
205
+
206
+ describe 'tag threshold configuration' do
207
+
208
+ context 'with no configuration' do
209
+
210
+ context 'because configuration never happened' do
211
+
212
+ let(:unconfigured_test_model) do
213
+ model = CukeLinter::ModelFactory.generate_feature_model
214
+ model.tags = []
215
+ (default_tag_threshold + 1).times { |count| model.tags << CukeModeler::Tag.new("@#{count}") }
216
+
217
+ model
218
+ end
219
+
220
+ it 'defaults to a tag threshold of 10 tags' do
221
+ result = subject.lint(unconfigured_test_model)
222
+
223
+ expect(result[:problem]).to eq("Feature contains too many different tags. #{unconfigured_test_model.tags.count} tags found (max 10).")
224
+ end
225
+
226
+ end
227
+
228
+ context 'because configuration did not set a tag threshold' do
229
+
230
+ let(:configuration) { {} }
231
+ let(:test_model) do
232
+ model = CukeLinter::ModelFactory.generate_feature_model
233
+ model.tags = []
234
+ (default_tag_threshold + 1).times { |count| model.tags << CukeModeler::Tag.new("@#{count}") }
235
+
236
+ model
237
+ end
238
+
239
+ before(:each) do
240
+ subject.configure(configuration)
241
+ end
242
+
243
+ it 'defaults to a tag threshold of 10 tags' do
244
+ result = subject.lint(test_model)
245
+
246
+ expect(result[:problem]).to eq("Feature contains too many different tags. #{test_model.tags.count} tags found (max 10).")
247
+ end
248
+
249
+ end
250
+
251
+ end
252
+
253
+ context 'with configuration' do
254
+
255
+ let(:tag_threshold) { 3 }
256
+ let(:configuration) { { 'TagCountThreshold' => tag_threshold } }
257
+
258
+ before(:each) do
259
+ subject.configure(configuration)
260
+ end
261
+
262
+ let(:test_model) do
263
+ model = CukeLinter::ModelFactory.generate_feature_model
264
+ model.tags = []
265
+ (tag_threshold + 1).times { |count| model.tags << CukeModeler::Tag.new("@#{count}") }
266
+
267
+ model
268
+ end
269
+
270
+ it 'the tag threshold used is the configured value' do
271
+ result = subject.lint(test_model)
272
+
273
+ expect(result[:problem]).to eq("Feature contains too many different tags. #{test_model.tags.count} tags found (max #{tag_threshold}).")
274
+ end
275
+
276
+ end
277
+
278
+ end
279
+
280
+ end
281
+
282
+
283
+ context 'a non-feature model' do
284
+
285
+ let(:test_model) { CukeModeler::Model.new }
286
+
287
+ it_should_behave_like 'a linter linting a good model'
288
+
289
+ end
290
+
291
+ end
292
+
293
+ end