module SleepingKingStudios::Tasks::Ci::CucumberParser

Parses the output from cucumber –format=json into a summary report.

Attributes

report[R]

Public Class Methods

parse(results) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 9
def parse results
  @report = build_report

  results.each { |feature| parse_feature(feature) }

  report['duration'] = report['duration'] / (1.0 * 10**9)

  report
end

Private Class Methods

build_report() click to toggle source
# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 23
def build_report
  {
    'scenario_count'     => 0,
    'failing_scenarios'  => [],
    'pending_scenarios'  => [],
    'step_count'         => 0,
    'failing_step_count' => 0,
    'pending_step_count' => 0,
    'duration'           => 0
  } # end report
end
parse_feature(feature) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 35
def parse_feature feature
  feature['elements'].each do |scenario|
    parse_scenario(scenario, feature)
  end # each
end
parse_scenario(scenario, feature) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 42
def parse_scenario scenario, feature
  failing = false
  pending = false

  scenario['steps'].each do |step|
    status = parse_step(step)

    failing ||= status == 'failed'
    pending ||= status == 'pending' || status == 'skipped'
  end # each

  report_scenario(
    scenario,
    feature,
    :failing => failing,
    :pending => pending
  ) # end report scenario
end
parse_step(step) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 62
def parse_step step
  report['step_count'] += 1
  report['duration']   += step_duration(step)

  status = step_status(step) || 'failed'

  case status
  when 'failed'
    report['failing_step_count'] += 1
  when 'pending', 'skipped'
    report['pending_step_count'] += 1
  end

  status
end
report_scenario(scenario, feature, failing:, pending: report['scenario_count'] += 1) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 79
def report_scenario scenario, feature, failing:, pending:
  report['scenario_count'] += 1

  return unless failing || pending

  hsh =
    {
      'location' => "#{feature['uri']}:#{scenario['line']}",
      'description' => "#{scenario['keyword']}: #{scenario['name']}"
    }

  if failing
    report['failing_scenarios'] << hsh
  else
    report['pending_scenarios'] << hsh
  end # if-else
end
step_duration(hsh) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 98
def step_duration hsh
  return 0 if hsh.nil? || hsh.empty?

  result = hsh['result']

  return 0 if result.nil? || result.empty?

  result['duration'] || 0
end
step_status(hsh) click to toggle source
# File lib/sleeping_king_studios/tasks/ci/cucumber_parser.rb, line 108
def step_status hsh
  return nil if hsh.nil? || hsh.empty?

  result = hsh['result']

  return nil if result.nil? || result.empty?

  result['status']
end