Skip to main content

lib/mix/tasks/scoria.test.ci_trust.ex

defmodule Mix.Tasks.Scoria.Test.CiTrust do
  use Mix.Task

  @shortdoc "Runs Phase 69 CI trust contract bundle (policy + optional ratchet hygiene)"

  @switches [fast: :boolean]

  @fast_files [
    "test/scoria/ci_policy_contract_test.exs",
    "test/scoria/verification_lanes_test.exs"
  ]

  @full_files @fast_files ++ ["test/scoria/warning_inventory/tmp_preflight_test.exs"]

  def ci_trust_test_files(mode \\ :full) do
    case mode do
      :fast -> @fast_files
      :full -> @full_files
    end
  end

  @impl Mix.Task
  def run(args) do
    {opts, _, invalid} = OptionParser.parse(args, strict: @switches)

    if invalid != [] do
      Mix.raise("invalid options: #{inspect(invalid)}")
    end

    files =
      if Keyword.get(opts, :fast, false) do
        @fast_files
      else
        @full_files
      end

    Mix.Task.run("loadpaths")

    for file <- files do
      Mix.Task.reenable("test")
      Mix.Task.run("test", [file])
    end
  end
end

defmodule Mix.Tasks.Test.CiTrust do
  use Mix.Task

  @shortdoc "Compatibility wrapper for CI trust contract verification"

  @impl Mix.Task
  def run(args), do: Mix.Tasks.Scoria.Test.CiTrust.run(args)
end