opencode / packages /app /src /utils /session-export.test.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
eb1202c verified
Raw
History Blame Contribute Delete
1.81 kB
import { describe, expect, test } from "bun:test"
import { fetchSessionExport, sessionExportFilename } from "./session-export"
import type { Message, Part, Session } from "@opencode-ai/sdk/v2/client"
describe("sessionExportFilename", () => {
test("generates filename from title", () => {
expect(sessionExportFilename({ id: "ses_123", title: "Clone PR in worktree from fork" })).toBe(
"clone-pr-in-worktree-from-fork.json",
)
})
test("generates filename from slug when title missing", () => {
expect(sessionExportFilename({ id: "ses_123", slug: "my-session-slug" })).toBe("my-session-slug.json")
})
test("falls back to id when title and slug are empty", () => {
expect(sessionExportFilename({ id: "ses_123" })).toBe("ses_123.json")
})
})
describe("fetchSessionExport", () => {
test("fetches full transcript from client", async () => {
const session = { id: "ses_1", title: "Test Session" } as Session
const msg = { id: "msg_1", role: "user" } as Message
const part = { id: "prt_1", type: "text", text: "hello" } as Part
const messages = [{ info: msg, parts: [part] }]
const client = {
session: {
get: async () => ({ data: session }),
messages: async () => ({ data: messages }),
},
}
const result = await fetchSessionExport({
sessionID: "ses_1",
client,
})
expect(result).toEqual({
info: session,
messages,
})
})
test("throws when session not found", async () => {
const client = {
session: {
get: async () => ({ data: null }),
messages: async () => ({ data: [] }),
},
}
expect(
fetchSessionExport({
sessionID: "ses_missing",
client,
}),
).rejects.toThrow("Session not found: ses_missing")
})
})