Class: Omnitest::Skeptic::Scenario
- Inherits:
-
Core::Dash
- Object
- Core::Dash
- Omnitest::Skeptic::Scenario
show all
- Extended by:
- Forwardable
- Includes:
- Core::FileSystem, Core::Logging, Core::Util::String, Psychic::Code2Doc::CodeHelper, TestStatuses, TestTransitions
- Defined in:
- lib/omnitest/skeptic/scenario.rb
Overview
rubocop:disable ClassLength
Constant Summary
collapse
- KEYS_TO_PERSIST =
[:last_attempted_action, :last_completed_action, :result,
:spy_data, :error, :duration]
Instance Attribute Summary collapse
Instance Method Summary
collapse
#failed?, #sample?, #skipped?, #status, #status_color, #status_description
#action, #clear, #clear_action, #detect, #detect_action, #exec, #exec_action, #failure_message, #log_failure, #perform_action, #test, #transition_to, #verify, #verify_action
Constructor Details
#initialize(data) ⇒ Scenario
Returns a new instance of Scenario.
50
51
52
53
54
|
# File 'lib/omnitest/skeptic/scenario.rb', line 50
def initialize(data)
super
@slug = slugify(suite, name, psychic.name)
@evidence_file = Pathname.new(Omnitest.basedir).join('.omnitest', "#{slug}.pstore").expand_path.freeze
end
|
Instance Attribute Details
#slug ⇒ Object
Returns the value of attribute slug.
48
49
50
|
# File 'lib/omnitest/skeptic/scenario.rb', line 48
def slug
@slug
end
|
Instance Method Details
#absolute_source_file ⇒ Object
76
77
78
79
80
|
# File 'lib/omnitest/skeptic/scenario.rb', line 76
def absolute_source_file
return nil unless code_sample
code_sample.absolute_source_file
end
|
#clear! ⇒ Object
146
147
148
149
|
# File 'lib/omnitest/skeptic/scenario.rb', line 146
def clear!
@evidence.clear
@evidence = nil
end
|
#code2doc(options = {}) ⇒ Object
88
89
90
91
92
|
# File 'lib/omnitest/skeptic/scenario.rb', line 88
def code2doc(options = {})
return nil unless code_sample
doc = code_sample.code2doc(options)
end
|
#code_sample ⇒ Object
64
65
66
67
68
|
# File 'lib/omnitest/skeptic/scenario.rb', line 64
def code_sample
self[:code_sample] ||= psychic.script(name)
rescue Errno::ENOENT
nil
end
|
#detect! ⇒ Object
94
95
96
97
98
99
100
|
# File 'lib/omnitest/skeptic/scenario.rb', line 94
def detect!
fail FeatureNotImplementedError, name if source_file.nil?
self.source_file = Pathname(code_sample)
rescue Errno::ENOENT
raise FeatureNotImplementedError, name
end
|
#evidence(initial_data = {}) ⇒ Object
56
57
58
|
# File 'lib/omnitest/skeptic/scenario.rb', line 56
def evidence(initial_data = {})
@evidence ||= Skeptic::Evidence.load(@evidence_file, initial_data)
end
|
#exec! ⇒ Object
102
103
104
105
|
# File 'lib/omnitest/skeptic/scenario.rb', line 102
def exec!
detect!
evidence.result = run!
end
|
#run!(spies = Omnitest::Skeptic::Spies) ⇒ Object
rubocop:disable Metrics/AbcSize
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/omnitest/skeptic/scenario.rb', line 107
def run!(spies = Omnitest::Skeptic::Spies)
spies.observe(self) do
if code_sample.params.is_a? String
code_sample.params = YAML.load(Psychic::Tokens.replace_tokens(code_sample.params, vars))
else
code_sample.params = vars
end
execution_result = code_sample.execute(env: upcased_hash(vars).merge(ENV.to_hash))
evidence.result = Skeptic::Result.new(execution_result: execution_result, source_file: source_file.to_s)
end
result
rescue Omnitest::Shell::ExecutionError => e
execution_error = ExecutionError.new(e)
execution_error.execution_result = e.execution_result
evidence.error = Omnitest::Error.formatted_trace(e).join("\n")
raise execution_error
rescue => e
evidence.error = Omnitest::Error.formatted_trace(e).join("\n")
raise e
ensure
save
end
|
#source ⇒ Object
82
83
84
85
86
|
# File 'lib/omnitest/skeptic/scenario.rb', line 82
def source
return nil unless code_sample
code_sample.source
end
|
#source_file ⇒ Object
70
71
72
73
74
|
# File 'lib/omnitest/skeptic/scenario.rb', line 70
def source_file
return nil unless code_sample
self[:source_file] ||= Pathname(code_sample)
end
|
#validations ⇒ Object
151
152
153
154
|
# File 'lib/omnitest/skeptic/scenario.rb', line 151
def validations
return nil if result.nil?
result.validations
end
|
#validators ⇒ Object
60
61
62
|
# File 'lib/omnitest/skeptic/scenario.rb', line 60
def validators
Omnitest::Skeptic::ValidatorRegistry.validators_for self
end
|
#verify! ⇒ Object
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
# File 'lib/omnitest/skeptic/scenario.rb', line 130
def verify!
validators.each do |validator|
validation = validator.validate(self)
status = case validation.status
when :passed
Core::Color.colorize("\u2713 Passed", :green)
when :failed
Core::Color.colorize('x Failed', :red)
Omnitest.handle_validation_failure(validation.error)
else
Core::Color.colorize(validation.status, :yellow)
end
info format('%-50s %s', validator.description, status)
end
end
|