class Minitest::CoverageRunner

Constants

RESOURCE_BLACK_LIST

Attributes

api_endpoints[R]
covered_resources[R]
partially_covered_resources[R]
raw_data[R]
uncovered_resources[R]

Public Class Methods

new(file_path) click to toggle source
# File lib/minitest/coverage_reporter.rb, line 8
def initialize(file_path)
  @raw_data = JSON.load(File.open(file_path))
  @api_endpoints = {}
  @covered_resources = []
  @uncovered_resources = []
  @partially_covered_resources = {}
end

Public Instance Methods

color(str, code) click to toggle source
# File lib/minitest/coverage_reporter.rb, line 77
def color(str, code)
  puts "\e[#{code}m#{str}\e[0m"
end
covered_endpoints_by_resource() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 34
def covered_endpoints_by_resource
  get_endpoints_by_resource(filtered_endpoints(true))
end
covered_endpoints_percentage() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 58
def covered_endpoints_percentage
  endpoints_percentage(filtered_endpoints(true))
end
endpoints_percentage(endpoints) click to toggle source
# File lib/minitest/coverage_reporter.rb, line 50
def endpoints_percentage(endpoints)
  "#{(endpoints.count / api_endpoints.count.to_f * 100 ).to_i}%"
end
filtered_endpoints(covered) click to toggle source
# File lib/minitest/coverage_reporter.rb, line 16
def filtered_endpoints(covered)
  api_endpoints.select { |_k, v| v == covered }.keys
end
get_coverage() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 38
def get_coverage
  get_endpoints_by_resource(api_endpoints.keys).each do |resource, actions|
    if covered_endpoints_by_resource[resource] == actions
      @covered_resources << resource
    elsif uncovered_endpoints_by_resource[resource] == actions
      @uncovered_resources << resource
    else
      @partially_covered_resources[resource] = uncovered_endpoints_by_resource[resource]
    end
  end
end
get_endpoints_by_resource(endpoints) click to toggle source
# File lib/minitest/coverage_reporter.rb, line 20
def get_endpoints_by_resource(endpoints)
  endpoints_by_resource = {}
  endpoints.each do |url|
    resource,action = url.split("/")
    endpoints_by_resource[resource] ||= []
    endpoints_by_resource[resource] << action
  end
  endpoints_by_resource
end
output_coverage() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 81
def output_coverage
  covered_resources
  color("COVERED RESOURCES" , 32)
  puts covered_resources
  color("NOT COVERED AT ALL", 31)
  puts uncovered_resources
  color("PARTIALLY COVERED RESOURCES", 33)
  partially_covered_resources.each do |resource, endpoints|
    puts "#{resource}: #{endpoints.join(' ')}"
  end
  color("covered endpoints #{covered_endpoints_percentage} uncovered endpoints #{uncovered_endpoints_percentage}", 35)
end
run_tests() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 62
def run_tests
  raw_data["docs"]["resources"].each do |resource|
    resource[1]["methods"].each do | method |
      @api_endpoints[method["doc_url"].delete_prefix!("../apidoc/v2/")] = false
    end unless RESOURCE_BLACK_LIST.include? resource[0]
  end
  HammerCLIForeman::Testing::APIExpectations.api_calls.each do |api_call|
    resource, action = api_call
      url = "#{resource}/#{action}"
      @api_endpoints[url] =  true
  end
  get_coverage
  output_coverage
end
uncovered_endpoints_by_resource() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 30
def uncovered_endpoints_by_resource
  get_endpoints_by_resource(filtered_endpoints(false))
end
uncovered_endpoints_percentage() click to toggle source
# File lib/minitest/coverage_reporter.rb, line 54
def uncovered_endpoints_percentage
  endpoints_percentage(filtered_endpoints(false))
end