Spaces:
Sleeping
Sleeping
| import fs from "node:fs"; | |
| import os from "node:os"; | |
| import path from "node:path"; | |
| import { afterEach, beforeEach, describe, expect, it } from "vitest"; | |
| import { | |
| appendAssistantMessageToSessionTranscript, | |
| resolveMirroredTranscriptText, | |
| } from "./transcript.js"; | |
| describe("resolveMirroredTranscriptText", () => { | |
| it("prefers media filenames over text", () => { | |
| const result = resolveMirroredTranscriptText({ | |
| text: "caption here", | |
| mediaUrls: ["https://example.com/files/report.pdf?sig=123"], | |
| }); | |
| expect(result).toBe("report.pdf"); | |
| }); | |
| it("returns trimmed text when no media", () => { | |
| const result = resolveMirroredTranscriptText({ text: " hello " }); | |
| expect(result).toBe("hello"); | |
| }); | |
| }); | |
| describe("appendAssistantMessageToSessionTranscript", () => { | |
| let tempDir: string; | |
| let storePath: string; | |
| let sessionsDir: string; | |
| beforeEach(() => { | |
| tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "transcript-test-")); | |
| sessionsDir = path.join(tempDir, "agents", "main", "sessions"); | |
| fs.mkdirSync(sessionsDir, { recursive: true }); | |
| storePath = path.join(sessionsDir, "sessions.json"); | |
| }); | |
| afterEach(() => { | |
| fs.rmSync(tempDir, { recursive: true, force: true }); | |
| }); | |
| it("returns error for missing sessionKey", async () => { | |
| const result = await appendAssistantMessageToSessionTranscript({ | |
| sessionKey: "", | |
| text: "test", | |
| storePath, | |
| }); | |
| expect(result.ok).toBe(false); | |
| if (!result.ok) { | |
| expect(result.reason).toBe("missing sessionKey"); | |
| } | |
| }); | |
| it("returns error for empty text", async () => { | |
| const result = await appendAssistantMessageToSessionTranscript({ | |
| sessionKey: "test-session", | |
| text: " ", | |
| storePath, | |
| }); | |
| expect(result.ok).toBe(false); | |
| if (!result.ok) { | |
| expect(result.reason).toBe("empty text"); | |
| } | |
| }); | |
| it("returns error for unknown sessionKey", async () => { | |
| fs.writeFileSync(storePath, JSON.stringify({}), "utf-8"); | |
| const result = await appendAssistantMessageToSessionTranscript({ | |
| sessionKey: "nonexistent", | |
| text: "test message", | |
| storePath, | |
| }); | |
| expect(result.ok).toBe(false); | |
| if (!result.ok) { | |
| expect(result.reason).toContain("unknown sessionKey"); | |
| } | |
| }); | |
| it("creates transcript file and appends message for valid session", async () => { | |
| const sessionId = "test-session-id"; | |
| const sessionKey = "test-session"; | |
| const store = { | |
| [sessionKey]: { | |
| sessionId, | |
| chatType: "direct", | |
| channel: "discord", | |
| }, | |
| }; | |
| fs.writeFileSync(storePath, JSON.stringify(store), "utf-8"); | |
| const result = await appendAssistantMessageToSessionTranscript({ | |
| sessionKey, | |
| text: "Hello from delivery mirror!", | |
| storePath, | |
| }); | |
| expect(result.ok).toBe(true); | |
| if (result.ok) { | |
| expect(fs.existsSync(result.sessionFile)).toBe(true); | |
| const lines = fs.readFileSync(result.sessionFile, "utf-8").trim().split("\n"); | |
| expect(lines.length).toBe(2); // header + message | |
| const header = JSON.parse(lines[0]); | |
| expect(header.type).toBe("session"); | |
| expect(header.id).toBe(sessionId); | |
| const messageLine = JSON.parse(lines[1]); | |
| expect(messageLine.type).toBe("message"); | |
| expect(messageLine.message.role).toBe("assistant"); | |
| expect(messageLine.message.content[0].type).toBe("text"); | |
| expect(messageLine.message.content[0].text).toBe("Hello from delivery mirror!"); | |
| } | |
| }); | |
| }); | |