import assert from "node:assert/strict"; import { describe, it } from "node:test"; import { clearAssistantChat, loadAssistantChat, saveAssistantChat, toClientChatMessage, } from "../../src/modules/agent/assistant-chat-storage"; const storage = new Map(); Object.defineProperty(globalThis, "localStorage", { value: { getItem: (key: string) => storage.get(key) ?? null, setItem: (key: string, value: string) => { storage.set(key, value); }, removeItem: (key: string) => { storage.delete(key); }, }, configurable: true, }); describe("assistant chat storage", () => { it("round-trips messages per user", () => { storage.clear(); const userId = "user-a"; const messages = [ { role: "user" as const, content: "hello" }, { role: "assistant" as const, content: "hi there" }, ]; saveAssistantChat(userId, messages); assert.deepEqual(loadAssistantChat(userId), messages); }); it("keeps sessions isolated by user id", () => { storage.clear(); saveAssistantChat("user-a", [{ role: "user", content: "for a" }]); saveAssistantChat("user-b", [{ role: "user", content: "for b" }]); assert.deepEqual(loadAssistantChat("user-a"), [{ role: "user", content: "for a" }]); assert.deepEqual(loadAssistantChat("user-b"), [{ role: "user", content: "for b" }]); }); it("clears stored chat", () => { storage.clear(); saveAssistantChat("user-a", [{ role: "user", content: "hello" }]); clearAssistantChat("user-a"); assert.deepEqual(loadAssistantChat("user-a"), []); }); it("maps stored image messages to client attachments", () => { const message = toClientChatMessage({ role: "user", content: "read this", imageUrl: "/api/uploads/assistant/home/photo.jpg", }); assert.deepEqual(message.attachments, [ { type: "image", url: "/api/uploads/assistant/home/photo.jpg" }, ]); }); });