feat(*): 创作工作台 - 完善媒体上传预览与连线交互并修复任务章节及日志筛选

This commit is contained in:
ddCat committed 2026-09-08 17:26:34 +08:00
1 parent 95b004ec0f
commit 068a8daea6
56 files changed
+3316 -274

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
import { describe, expect, test } from "bun:test";
import { parseChapterAssetBreakdown } from "../src/lib/canvas/chapter-asset-breakdown";
describe("章节三类资产解析", () => {
test("无角色章节仍可提取场景和道具", () => {
const result = parseChapterAssetBreakdown(JSON.stringify({ characters: [], scenes: [{ name: "车站", description: "空旷站台", prompt: "夜间站台" }], props: [{ name: "信封", description: "牛皮纸信封", prompt: "褐色信封特写" }] }));
expect(result.characters).toEqual([]);
expect(result.scenes[0].name).toBe("车站");
expect(result.props[0].name).toBe("信封");
});
test("缺失数组或缺失描述不能静默跳过", () => {
expect(() => parseChapterAssetBreakdown('{"characters":[]}')).toThrow("缺少");
expect(() => parseChapterAssetBreakdown('{"characters":[],"scenes":[{"name":"车站"}],"props":[]}')).toThrow("description");
});
test("支持围栏 JSON 和无资产章节", () => {
expect(parseChapterAssetBreakdown('```json\n{"characters":[],"scenes":[],"props":[]}\n```')).toEqual({ characters: [], scenes: [], props: [] });
});
test("忽略正文解释但仍校验完整资产对象", () => {
expect(parseChapterAssetBreakdown('提取结果如下:\n{"characters":[],"scenes":[],"props":[]}\n以上为全部结果。')).toEqual({ characters: [], scenes: [], props: [] });
});
});