class CukeLinter::TestShouldUseBackgroundLinter
TODO: Make a new class that it is from the POV of a Feature model instead A linter that detects scenarios and outlines within a feature that all share common beginning steps
Public Instance Methods
message()
click to toggle source
The message used to describe the problem that has been found
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 24 def message 'Test shares steps with all other tests in feature. Use a background.' end
rule(model)
click to toggle source
The rule used to determine if a model has a problem
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 9 def rule(model) return false unless model.is_a?(CukeModeler::Scenario) || model.is_a?(CukeModeler::Outline) model_steps = model.steps || [] parent_feature_model = model.get_ancestor(:feature) return false unless parent_feature_model.tests.count > 1 matching_steps = all_first_steps_match?(parent_feature_model, model_steps) none_parameterized = no_parameterized_steps?(parent_feature_model) matching_steps && none_parameterized end
Private Instance Methods
all_first_steps_match?(feature_model, model_steps)
click to toggle source
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 32 def all_first_steps_match?(feature_model, model_steps) feature_model.tests.all? do |test| test_steps = test.steps || [] test_steps.first == model_steps.first end end
no_parameterized_steps?(feature_model)
click to toggle source
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 39 def no_parameterized_steps?(feature_model) feature_model.tests.none? do |test| next false if test.is_a?(CukeModeler::Scenario) test_steps = test.steps || [] params_used_by_test = test.examples.map(&:parameters).flatten.uniq next false unless test_steps.any? parameterized_step?(test_steps.first, parameters: params_used_by_test) end end
parameterized_doc_string?(step_model, parameter)
click to toggle source
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 66 def parameterized_doc_string?(step_model, parameter) return false unless step_model.block.is_a?(CukeModeler::DocString) step_model.block.content.include?(parameter) end
parameterized_step?(step_model, parameters:)
click to toggle source
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 52 def parameterized_step?(step_model, parameters:) parameters.any? do |parameter| parameter_string = "<#{parameter}>" parameterized_text?(step_model, parameter_string) || parameterized_doc_string?(step_model, parameter_string) || parameterized_table?(step_model, parameter_string) end end
parameterized_table?(step_model, parameter)
click to toggle source
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 72 def parameterized_table?(step_model, parameter) return false unless step_model.block.is_a?(CukeModeler::Table) step_model.block.rows.map(&:cells).flatten.map(&:value).any? { |cell_text| cell_text.include?(parameter) } end
parameterized_text?(step_model, parameter)
click to toggle source
# File lib/cuke_linter/linters/test_should_use_background_linter.rb, line 62 def parameterized_text?(step_model, parameter) step_model.text.include?(parameter) end