37 lines
1.5 KiB
JavaScript
37 lines
1.5 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { readFileSync } from "node:fs";
|
|
|
|
import { parseUserAttachments } from "../web/static/js/attachments.js";
|
|
|
|
const chatJs = readFileSync("web/static/js/chat.js", "utf8");
|
|
|
|
test("user attachment protocol lines are separated from visible message text", () => {
|
|
const parsed = parseUserAttachments(
|
|
"请比较这张图\n\n[用户上传的参考图] 项目/显微照片.png\n[用户上传的文件] 项目/数据表.xlsx",
|
|
);
|
|
assert.equal(parsed.content, "请比较这张图");
|
|
assert.deepEqual(parsed.attachments, [
|
|
{ path: "项目/显微照片.png", kind: "image" },
|
|
{ path: "项目/数据表.xlsx", kind: "file" },
|
|
]);
|
|
});
|
|
|
|
test("attachment-only messages have an empty visible body", () => {
|
|
const parsed = parseUserAttachments("[用户上传的参考图] 项目/照片 01.png");
|
|
assert.equal(parsed.content, "");
|
|
assert.deepEqual(parsed.attachments, [{ path: "项目/照片 01.png", kind: "image" }]);
|
|
});
|
|
|
|
test("ordinary bracketed text remains visible", () => {
|
|
const content = "[备注] 这不是附件\n继续处理";
|
|
assert.deepEqual(parseUserAttachments(content), { content, attachments: [] });
|
|
});
|
|
|
|
test("new sends use structured attachments and history keeps a legacy fallback", () => {
|
|
assert.match(chatJs, /attachments:\s*pendingAttachments\.map/);
|
|
assert.match(chatJs, /Array\.isArray\(m\.attachment_refs\)/);
|
|
assert.match(chatJs, /structuredAttachments === null/);
|
|
assert.doesNotMatch(chatJs, /content = content \? `\$\{content\}\\n\\n\$\{lines\}`/);
|
|
});
|