failure_message_template

in spec/support/crawl_response_matchers.rb [39:73]


def failure_message_template(results, expected_results) 
  missing = []
  extra = results.map(&:clone)

  expected_results.each do |expected_result|
    result_index = extra.index { |result| expected_result.equal_for_specified_keys?(result) }

    if result_index
      extra.delete_at(result_index)
    else
      missing << expected_result
    end
  end

  out = +''

  if missing.present?
    out << "MISSING #{missing.length} result(s):\n"
    missing.each_with_index { |m, i| out << "    #{i}: #{m}\n" }
  end

  if extra.present?
    out << "#{extra.length} EXTRA result(s):\n"
    extra.each_with_index { |e, i| out << "    #{i}: #{e}\n" }
  end

  out << "\n\n"
  out << "Actual results:\n"
  results.each_with_index { |r, i| out << "    #{i}: #{r}\n" }
  out << "Expected results:\n"
  expected_results.each_with_index { |e, i| out << "    #{i}: #{e}\n" }

  out
end