Spaces:
Sleeping
Sleeping
| 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"); | |
| }); | |
| }); | |