class Strut::ReportBuilder

Public Instance Methods

build(responses, document) click to toggle source
# File lib/strut/report_builder.rb, line 5
def build(responses, document)
  report = Report.new

  scenario_results = Hash.new { |h, k| h[k] = ScenarioResult.new }
  responses.each do |response|
    handle_response(response, document, report, scenario_results)
  end

  scenario_results.each_pair do |_, result|
    report.add_scenario_result(result)
  end

  report
end
exceptional_result?(result) click to toggle source
# File lib/strut/report_builder.rb, line 48
def exceptional_result?(result)
  result =~ /^__EXCEPTION__:message:(.+)/ ? $1 : nil
end
failed_result?(result, metadata) click to toggle source
# File lib/strut/report_builder.rb, line 52
def failed_result?(result, metadata)
  metadata.expected_value && metadata.expected_value.to_s != result.to_s
end
handle_response(response, document, report, scenario_results) click to toggle source
# File lib/strut/report_builder.rb, line 20
def handle_response(response, document, report, scenario_results)
  command_id, command_result = *response
  if command_id == "error"
    report.add_error(command_result.to_s)
  else
    metadata = document.metadata_for_command_id(command_id)
    if metadata
      process_result(command_result, metadata, report, scenario_results)
    else
      report.add_error("Unexpected response from Slim: #{response.inspect}")
    end
  end
end
process_result(result, metadata, report, scenario_results) click to toggle source
# File lib/strut/report_builder.rb, line 34
def process_result(result, metadata, report, scenario_results)
  scenario_result = scenario_results[metadata.scenario_number]
  scenario_result.name = "Scenario #{metadata.scenario_number}, line #{metadata.line}"

  if exception_message = exceptional_result?(result)
    scenario_result.add_exception_for_line(metadata.line, exception_message)
  elsif failed_result?(result, metadata)
    fail_message = "Expected #{metadata.expected_value} but got #{result}"
    scenario_result.add_fail_for_line(metadata.line, fail_message)
  else
    scenario_result.add_ok_for_line(metadata.line)
  end
end