* feat(canvas): 视频节点截取重生成 - 支持多段/时间线导入并调用视频模型批量重生成 * test(canvas): 视频节点时间线导入 - 修正旧数据标题回退测试 * style(canvas): 视频节点截取重生成 - 格式化新增文件并修正测试 --------- Co-authored-by: sikongyue <3155157671@qq.com>
53 lines
1.9 KiB
TypeScript
53 lines
1.9 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import { collectUpstreamVideoNodes } from "../src/lib/canvas/canvas-resource-references";
|
|
import { CanvasNodeType, type CanvasConnection, type CanvasNodeData } from "../src/types/canvas";
|
|
|
|
function videoNode(id: string): CanvasNodeData {
|
|
return {
|
|
id,
|
|
type: CanvasNodeType.Video,
|
|
title: id,
|
|
position: { x: 0, y: 0 },
|
|
width: 100,
|
|
height: 100,
|
|
metadata: { content: `data:video/mp4;base64,${id}` },
|
|
};
|
|
}
|
|
|
|
function textNode(id: string): CanvasNodeData {
|
|
return {
|
|
id,
|
|
type: CanvasNodeType.Text,
|
|
title: id,
|
|
position: { x: 0, y: 0 },
|
|
width: 100,
|
|
height: 60,
|
|
metadata: { content: id },
|
|
};
|
|
}
|
|
|
|
function connection(fromNodeId: string, toNodeId: string): CanvasConnection {
|
|
return { id: `conn-${fromNodeId}-${toNodeId}`, fromNodeId, toNodeId };
|
|
}
|
|
|
|
describe("collectUpstreamVideoNodes", () => {
|
|
test("下游视频节点能回溯到上游视频源", () => {
|
|
const source = videoNode("source-video");
|
|
const segment = videoNode("segment-video");
|
|
const target = videoNode("target-video");
|
|
const text = textNode("script");
|
|
const nodes = [target, segment, source, text];
|
|
const connections = [connection("source-video", "segment-video"), connection("segment-video", "target-video"), connection("script", "segment-video")];
|
|
expect(collectUpstreamVideoNodes("target-video", nodes, connections).map((node) => node.id)).toEqual(["target-video", "segment-video", "source-video"]);
|
|
});
|
|
|
|
test("存在环时不会死循环", () => {
|
|
const a = videoNode("a");
|
|
const b = videoNode("b");
|
|
const nodes = [a, b];
|
|
const connections = [connection("a", "b"), connection("b", "a")];
|
|
expect(collectUpstreamVideoNodes("a", nodes, connections).length).toBe(2);
|
|
});
|
|
});
|