import { describe, expect, test } from "bun:test" import type { SnapshotFileDiff } from "@opencode-ai/sdk/v2" import type { Message } from "@opencode-ai/sdk/v2/client" import { diffs, message } from "./diffs" const item = { file: "src/app.ts", patch: "@@ -1 +1 @@\n-old\n+new\n", additions: 1, deletions: 1, status: "modified", } satisfies SnapshotFileDiff describe("diffs", () => { test("keeps valid arrays", () => { expect(diffs([item])).toEqual([item]) }) test("wraps a single diff object", () => { expect(diffs(item)).toEqual([item]) }) test("reads keyed diff objects", () => { expect(diffs({ a: item })).toEqual([item]) }) test("drops invalid entries", () => { expect( diffs([ item, { file: "src/bad.ts", additions: 1, deletions: 1 }, { patch: item.patch, additions: 1, deletions: 1 }, ]), ).toEqual([item]) }) }) describe("message", () => { test("normalizes user summaries with object diffs", () => { const input = { id: "msg_1", sessionID: "ses_1", role: "user", time: { created: 1 }, agent: "build", model: { providerID: "openai", modelID: "gpt-5" }, summary: { title: "Edit", diffs: { a: item }, }, } as unknown as Message expect(message(input)).toMatchObject({ summary: { title: "Edit", diffs: [item], }, }) }) test("drops invalid user summaries", () => { const input = { id: "msg_1", sessionID: "ses_1", role: "user", time: { created: 1 }, agent: "build", model: { providerID: "openai", modelID: "gpt-5" }, summary: true, } as unknown as Message expect(message(input)).toMatchObject({ summary: undefined }) }) })