test/openagents/scv/open_code_report_test.exs

main at 58e6347eeb72 · 1 KB

defmodule OpenAgents.SCV.OpenCodeReportTest do
  use ExUnit.Case, async: true

  alias OpenAgents.SCV.OpenCodeReport

  test "collects only prose text events" do
    report =
      OpenCodeReport.new()
      |> OpenCodeReport.ingest(
        Jason.encode!(%{"type" => "tool_use", "part" => %{"output" => "private source"}})
      )
      |> OpenCodeReport.ingest(
        Jason.encode!(%{"type" => "text", "part" => %{"text" => "First finding"}})
      )
      |> OpenCodeReport.ingest("not-json")
      |> OpenCodeReport.ingest(
        Jason.encode!(%{"type" => "text", "part" => %{"text" => "Second finding"}})
      )
      |> OpenCodeReport.summary()

    assert report == %{
             schema: "openagents.scv.report.v1",
             text: "First finding\nSecond finding",
             bytes: 28,
             truncated: false
           }

    refute inspect(report) =~ "private source"
  end

  test "bounds a report without producing invalid UTF-8" do
    oversized = String.duplicate("🚀", 9_000)

    report =
      OpenCodeReport.new()
      |> OpenCodeReport.ingest(
        Jason.encode!(%{"type" => "text", "part" => %{"text" => oversized}})
      )
      |> OpenCodeReport.summary()

    assert report.bytes <= 32_768
    assert byte_size(report.text) == report.bytes
    assert String.valid?(report.text)
    assert report.truncated
  end

  test "splits a report into ordered UTF-8-safe chunks" do
    text = String.duplicate("audit 🚀 ", 1_000)
    report = %{text: text}

    chunks = OpenCodeReport.chunks(report, 1_025)

    assert length(chunks) > 1
    assert Enum.all?(chunks, &(byte_size(&1) <= 1_025))
    assert Enum.all?(chunks, &String.valid?/1)
    assert Enum.join(chunks) == text
  end
end