import { describe, expect, it } from "vitest"; import { buildTestAnalysisRequest } from "./build-test-analysis-request.ts"; import type { TestRunExecutionResult } from "./execute-test-run-plan.ts"; function result( overrides: Partial = {}, ): TestRunExecutionResult { return { ok: false, displayCommand: "go test -race ./...", stdout: "PASS\n", stderr: "FAIL: TestBroken\n", exitCode: 1, killed: false, ...overrides, }; } describe("buildTestAnalysisRequest", () => { it("includes the command, exit code and output", () => { const request = buildTestAnalysisRequest(result()); expect(request).toContain("`go test -race ./...`"); expect(request).toContain("(exit code 1)"); expect(request).toContain("stdout:"); expect(request).toContain("PASS"); expect(request).toContain("stderr:"); expect(request).toContain("FAIL: TestBroken"); }); it("mentions when the command was killed", () => { const request = buildTestAnalysisRequest(result({ killed: true })); expect(request).toContain("(exit code 1, killed)"); }); it("asks for a summary and problem identification", () => { const request = buildTestAnalysisRequest(result()); expect(request).toContain("Summarize the test results"); expect(request).toContain("identify what the problem is"); }); it("truncates long output with a marker", () => { const request = buildTestAnalysisRequest( result({ stdout: "x".repeat(20_000) }), ); expect(request).toContain("[truncated]"); expect(request).not.toContain("x".repeat(12_001)); }); it("handles empty output streams", () => { const request = buildTestAnalysisRequest( result({ stdout: "", stderr: "" }), ); expect(request).toContain("stdout:"); expect(request).toContain("stderr:"); }); });