import { describe, expect, it } from "vitest";
import { sanitizeMessageBlocks } from "./blocks";

function hugeDoc(paragraphs: number) {
  return {
    v: 1,
    doc: {
      type: "doc",
      content: Array.from({ length: paragraphs }, (_, i) => ({
        type: "paragraph",
        content: [{ type: "text", text: `p${i} `.repeat(20) }],
      })),
    },
  };
}

describe("OD-2 composer budget — sanitizeMessageBlocks", () => {
  it("stays under 50ms for a budget-sized document on CI hardware", () => {
    const input = hugeDoc(400);
    const started = performance.now();
    const result = sanitizeMessageBlocks(input, "fallback");
    const elapsed = performance.now() - started;
    expect(result.v).toBe(1);
    expect(elapsed).toBeLessThan(50);
  });

  it("truncates trees that exceed the 2000-node budget instead of hanging", () => {
    const result = sanitizeMessageBlocks(hugeDoc(3_000), "fallback");
    expect(result.v).toBe(1);
    expect(result.doc).toBeTruthy();
  });
});
