better-chatbot / src /lib /ai /workflow /extract-workflow-diff.test.ts
Bot
Initial commit for HF Spaces
05c5ed5
Raw
History Blame Contribute Delete
2.63 kB
import { describe, it, expect } from "vitest";
import { Edge } from "@xyflow/react";
import { extractWorkflowDiff } from "./extract-workflow-diff";
import { UINode, NodeKind } from "./workflow.interface";
describe("extractWorkflowDiff", () => {
const createTestNode = (
id: string,
name: string,
position = { x: 0, y: 0 },
): UINode => ({
id,
type: "default",
position,
data: {
id,
name,
kind: NodeKind.Input,
outputSchema: { type: "object", properties: {} },
runtime: {},
},
});
const createTestEdge = (
id: string,
source: string,
target: string,
): Edge => ({
id,
source,
target,
});
it("should detect added nodes and edges", () => {
const oldData = {
nodes: [createTestNode("node1", "Node 1")],
edges: [createTestEdge("edge1", "node1", "node2")],
};
const newData = {
nodes: [
createTestNode("node1", "Node 1"),
createTestNode("node2", "Node 2", { x: 100, y: 100 }),
],
edges: [
createTestEdge("edge1", "node1", "node2"),
createTestEdge("edge2", "node2", "node3"),
],
};
const result = extractWorkflowDiff(oldData, newData);
expect(result.deleteNodes).toHaveLength(0);
expect(result.deleteEdges).toHaveLength(0);
expect(result.updateNodes).toHaveLength(1);
expect(result.updateEdges).toHaveLength(1);
expect(result.updateNodes[0].id).toBe("node2");
expect(result.updateEdges[0].id).toBe("edge2");
});
it("should detect deleted and updated nodes and edges", () => {
const oldData = {
nodes: [
createTestNode("node1", "Node 1"),
createTestNode("node2", "Node 2"),
createTestNode("node3", "Node 3", { x: 50, y: 50 }),
],
edges: [
createTestEdge("edge1", "node1", "node2"),
createTestEdge("edge2", "node2", "node3"),
],
};
const newData = {
nodes: [
createTestNode("node1", "Node 1 Updated", { x: 10, y: 10 }),
createTestNode("node3", "Node 3", { x: 50, y: 50 }),
],
edges: [createTestEdge("edge1", "node1", "node3")],
};
const result = extractWorkflowDiff(oldData, newData);
expect(result.deleteNodes).toHaveLength(1);
expect(result.deleteNodes[0].id).toBe("node2");
expect(result.deleteEdges).toHaveLength(1);
expect(result.deleteEdges[0].id).toBe("edge2");
expect(result.updateNodes).toHaveLength(1);
expect(result.updateNodes[0].id).toBe("node1");
expect(result.updateEdges).toHaveLength(1);
expect(result.updateEdges[0].id).toBe("edge1");
});
});