Files
nanobot/tui/src/diff-viewer.test.ts
T

48 lines
1.5 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import { latestTurnFileEdits, mergeFileEdits } from "./diff-viewer"
describe("DiffViewer projection", () => {
test("merges lifecycle frames without losing the final unified patch", () => {
const edits = mergeFileEdits(
[{ call_id: "edit-1", tool: "edit_file", path: "src/app.ts", status: "editing" }],
[{
call_id: "edit-1",
tool: "edit_file",
path: "src/app.ts",
status: "done",
added: 2,
deleted: 1,
diff: { format: "unified", text: "--- a/src/app.ts\n+++ b/src/app.ts" },
}],
)
expect(edits).toHaveLength(1)
expect(edits[0]?.status).toBe("done")
expect(edits[0]?.diff?.text).toContain("+++ b/src/app.ts")
})
test("uses only the newest user turn instead of leaking an older diff", () => {
const oldEdit = {
call_id: "old",
tool: "edit_file",
path: "old.ts",
status: "done",
diff: { format: "unified", text: "old" },
}
expect(latestTurnFileEdits([
{ role: "user", content: "edit the old file" },
{ role: "activity", content: "", fileEdits: [oldEdit] },
{ role: "assistant", content: "done" },
{ role: "user", content: "just explain it" },
{ role: "assistant", content: "explained" },
])).toEqual([])
expect(latestTurnFileEdits([
{ role: "user", content: "edit the old file" },
{ role: "activity", content: "", fileEdits: [oldEdit] },
{ role: "assistant", content: "done" },
])).toEqual([oldEdit])
})
})