lib/mix/tasks/archeometer.explore.coverage.ex

defmodule Mix.Tasks.Arch.Explore.Coverage do
  @moduledoc """
  Mix Task to collect and store test coverage information into a Archeometer database.
  """
  use Mix.Task
  alias Archeometer.Explore.Coverage
  alias Archeometer.Util.DumpStats

  @shortdoc "Dumps test coverage of current project into Archeometer DB"

  @preferred_cli_env :test

  @impl Mix.Task
  def run(_argv) do
    if Archeometer.Repo.db_ready?(:basic) do
      Mix.shell().info("Starting test coverage analysis...")

      Mix.shell().info("Collecting coverage information...")
      _code_server = Coverage.prepare_code_server()

      Mix.shell().info("Calculating test coverage per module..")
      mod_coverage = Coverage.calculate_module_coverage()

      Mix.shell().info("Calculating test coverage per function..")
      fun_coverage = Coverage.calculate_function_coverage()

      Mix.shell().info("Coverage calculated! Now saving values to the database")
      DumpStats.add_module_coverages(mod_coverage)
      DumpStats.add_function_coverages(fun_coverage)

      Mix.shell().info("All values saved to the database!")
    else
      Mix.shell().error("Please run static analysis first")
    end
  end
end