lib/lopata/scenario_builder.rb in lopata-0.1.5 vs lib/lopata/scenario_builder.rb in lopata-0.1.6
- old
+ new
@@ -1,21 +1,23 @@
class Lopata::ScenarioBuilder
- attr_reader :title, :common_metadata
+ attr_reader :title, :common_metadata, :options, :diagonals
attr_accessor :shared_step, :group
def self.define(title, metadata = {}, &block)
builder = new(title, metadata)
builder.instance_exec &block
builder.build
end
def initialize(title, metadata = {})
@title, @common_metadata = title, metadata
+ @diagonals = []
+ @options = []
end
def build
- filters = Lopata::Config.filters
+ filters = Lopata.configuration.filters
option_combinations.each do |option_set|
metadata = common_metadata.merge(option_set.metadata)
scenario = Lopata::Scenario::Execution.new(title, option_set.title, metadata)
unless filters.empty?
@@ -29,30 +31,16 @@
world.scenarios << scenario
end
end
- def as(*args, &block)
- @roles = args.flatten
- @roles << CalculatedValue.new(&block) if block_given?
- @role_options = nil
- end
-
- def role_options
- @role_options ||= build_role_options
- end
-
def metadata(hash)
raise 'metadata expected to be a Hash' unless hash.is_a?(Hash)
@common_metadata ||= {}
@common_metadata.merge! hash
end
- def without_user
- @without_user = true
- end
-
def skip_when(&block)
@skip_when = block
end
def skip?(option_set)
@@ -87,77 +75,46 @@
@steps ||= []
end
def steps_with_hooks
s = []
- unless Lopata::Config.before_scenario_steps.empty?
- s << Lopata::ActionStep.new(:setup, *Lopata::Config.before_scenario_steps)
+ unless Lopata.configuration.before_scenario_steps.empty?
+ s << Lopata::ActionStep.new(:setup, *Lopata.configuration.before_scenario_steps)
end
s += steps
- unless Lopata::Config.after_scenario_steps.empty?
- s << Lopata::ActionStep.new(:teardown, *Lopata::Config.after_scenario_steps)
+ unless Lopata.configuration.after_scenario_steps.empty?
+ s << Lopata::ActionStep.new(:teardown, *Lopata.configuration.after_scenario_steps)
end
s
end
- def cleanup(*args, &block)
- add_step_as_is(:cleanup, *args, &block)
- end
-
- def add_step_as_is(method_name, *args, &block)
- steps << Lopata::Step.new(method_name, *args) do
- # do not convert args - symbols mean name of instance variable
- # run_step method_name, *args, &block
- instance_exec(&block) if block
- end
- end
-
def let(method_name, &block)
- steps << Lopata::Step.new(nil) do
- define_singleton_method method_name, &block
+ steps << Lopata::Step.new(:let) do
+ execution.let(method_name, &block)
end
end
- def build_role_options
- return [] unless roles
- [Diagonal.new(:as, roles.map { |r| [nil, r] })]
- end
-
- def roles
- return false if @without_user
- @roles ||= [Lopata::Config.default_role].compact
- end
-
def option(metadata_key, variants)
- options << Option.new(metadata_key, variants)
+ @options << Option.new(metadata_key, variants)
end
def diagonal(metadata_key, variants)
- diagonals << Diagonal.new(metadata_key, variants)
+ @diagonals << Diagonal.new(metadata_key, variants)
end
- def options
- @options ||= []
- end
-
- def diagonals
- @diagonals ||= []
- end
-
def option_combinations
- combinations = combine([OptionSet.new], options + diagonals + role_options)
- while !(diagonals + role_options).all?(&:complete?)
- combinations << OptionSet.new(*(options + diagonals + role_options).map(&:next_variant))
+ combinations = combine([OptionSet.new], options + diagonals)
+ while !diagonals.all?(&:complete?)
+ combinations << OptionSet.new(*(options + diagonals).map(&:next_variant))
end
combinations.reject { |option_set| skip?(option_set) }
end
def combine(source_combinations, rest_options)
- # raise 'source_combinations cannot be empty' if source_combinations.blank?
return source_combinations if rest_options.empty?
combinations = []
current_option = rest_options.shift
source_combinations.each do |source_variants|
current_option.level_variants.each do |v|
@@ -166,10 +123,10 @@
end
combine(combinations, rest_options)
end
def world
- @world ||= Lopata::Config.world
+ Lopata.world
end
# Набор вариантов, собранный для одного теста
class OptionSet
attr_reader :variants