class ApiMiniTester::TestFormatter

Constants

RESULT_SECTIONS
SECTION_TRANSLATE

Attributes

results[RW]

Public Class Methods

new(results) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 17
def initialize(results)
  @results = results
end

Public Instance Methods

array_in(array) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 130
def array_in(array)
  list = ''
  array.each do |item|
    if item.instance_of?(Array)
      list << array_in(item)
    elsif item.instance_of?(Hash)
      list << hash_in(item)
    end
  end
  list
end
clean_up_infinity() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 118
def clean_up_infinity
  res = results.dup
  res[:scenarios].each do |scenario|
    scenario[:steps].each do |step|
      step[:timing].each do |timing|
        timing[:exp] = "Not Specified" if timing.is_a?(Hash) && timing[:exp] && timing[:exp] == Float::INFINITY
      end
    end
  end
  res
end
failed_in_scenario(scenario) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 96
def failed_in_scenario(scenario)
  count = 0
  scenario[:steps].each do |step|
    [:status, :headers, :body, :timing].each do |section|
      count += step[section].map { |res| res[:result] }.select(&:!).size
    end
  end
  count
end
hash_in(hash) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 142
def hash_in(hash)
  list = ''
  hash.each do |k, v|
    if v.instance_of?(Hash)
      list << hash_in(v)
    elsif v.instance_of?(Array)
      list << array_in(v)
    elsif k == :result
      list << (v ? '.' : 'E')
    end
  end
  list
end
hostname() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 106
def hostname
  Socket.gethostname
end
md_section_content(step, section) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 185
def md_section_content(step, section)
  output = []
  output << md_section_header(SECTION_TRANSLATE[section], nil, 4)
  step[section].each do |status|
    output << "* `#{status[:result]}`: #{status[:desc]}"
  end
  output << ""
  output
end
md_section_header(header, desc, level) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 160
def md_section_header(header, desc, level)
  output = []
  output << "#{'#' * level} #{header}"
  output << ""
  if desc
    output << "Desc: #{desc}"
    output << ""
  end
  output
end
md_step_header(step) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 171
def md_step_header(step)
  output = []
  output.push(*md_section_header(step[:name], step[:desc], 3))
  output.push(*md_section_header("Call", nil, 4))
  step[:url].each do |url|
    output << "* #{url[:desc]}"
  end
  step[:method].each do |method|
    output << "* #{method[:desc]}"
  end
  output << ""
  output
end
name_to_camelcase(name) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 110
def name_to_camelcase(name)
  name.gsub(/[[:space:]]+/, '_').downcase.gsub(/(?:^|_)([a-z])/) { $1.upcase }
end
scenarios_count() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 64
def scenarios_count
  results[:scenarios].size
end
step_timing(step) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 114
def step_timing(step)
  step[:timing].first ? step[:timing].first[:real] : 0
end
steps_count(scenario) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 68
def steps_count(scenario)
  scenario[:steps].size
end
test_count(step) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 72
def test_count(step)
  count = 0
  [:status, :headers, :body, :timing].each do |section|
    count += step[section].size
  end
  count
end
tests_in_scenario(scenario) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 80
def tests_in_scenario(scenario)
  count = 0
  scenario[:steps].each do |step|
    count += test_count(step)
  end
  count
end
time_in_scenario(scenario) click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 88
def time_in_scenario(scenario)
  time = 0.0
  scenario[:steps].each do |step|
    time += step[:timing].first[:real]
  end
  time
end
timestamp() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 60
def timestamp
  Time.now.strftime("%FT%T%:z")
end
to_json() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 21
def to_json
  clean_up_infinity.to_json
end
to_junit_xml() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 29
def to_junit_xml
  xml = Builder::XmlMarkup.new(indent: 2)
  xml.instruct! :xml, encoding: "UTF-8"
  xml.testsuites do
    results[:scenarios].each do |scenario|
      xml.testsuite name: scenario[:name],
                    timestamp: timestamp,
                    hostname: hostname,
                    tests: tests_in_scenario(scenario),
                    skipped: 0,
                    failures: failed_in_scenario(scenario),
                    errors: 0,
                    time: time_in_scenario(scenario) do
        scenario[:steps].each do |step|
          classname = name_to_camelcase(step[:name])
          RESULT_SECTIONS.each do |section|
            step[section].each do |s|
              xml.testcase classname: classname,
                          name: s[:name],
                          time: step_timing(step),
                          file: "./#{classname}.rb"  do
                s[:result] ? nil : xml.failure(message: s[:desc])
              end
            end
          end
        end
      end
    end
  end
end
to_markdown() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 195
def to_markdown
  output = []
  output << md_section_header(results[:name], results[:desc], 1)
  results[:scenarios].each do |scenario|
    output << md_section_header(scenario[:name], scenario[:desc], 2)
    scenario[:steps].each do |step|
      output.push(*md_step_header(step))
      RESULT_SECTIONS.each do |section|
        output.push(*md_section_content(step, section))
      end
    end
  end
  output.join("\n")
end
to_simple() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 156
def to_simple
  hash_in results
end
to_yaml() click to toggle source
# File lib/api_mini_tester/test_formatter.rb, line 25
def to_yaml
  clean_up_infinity.to_yaml
end