mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-22 23:41:07 +00:00
115 lines
3.4 KiB
TypeScript
115 lines
3.4 KiB
TypeScript
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!");
|
|
}
|
|
});
|
|
});
|