11import type { Node } from "@xyflow/react" ;
22import { describe , expect , it , vi } from "vitest" ;
33
4+ import { NodeManager } from "@/nodeManager" ;
45import type { TaskNodeData } from "@/types/nodes" ;
56import type {
67 ComponentSpec ,
@@ -19,6 +20,8 @@ import {
1920
2021import { duplicateNodes } from "./duplicateNodes" ;
2122
23+ const createMockNodeManager = ( ) => new NodeManager ( ) ;
24+
2225// Mock utility functions
2326const mockTaskSpec : TaskSpec = {
2427 componentRef : { name : "test-component" } ,
@@ -155,8 +158,9 @@ describe("duplicateNodes", () => {
155158 } ;
156159
157160 const nodes : Node [ ] = [ ] ;
161+ const nodeManager = createMockNodeManager ( ) ;
158162
159- expect ( ( ) => duplicateNodes ( componentSpec , nodes ) ) . toThrow (
163+ expect ( ( ) => duplicateNodes ( componentSpec , nodes , nodeManager ) ) . toThrow (
160164 "ComponentSpec does not contain a graph implementation." ,
161165 ) ;
162166 } ) ;
@@ -180,7 +184,8 @@ describe("duplicateNodes", () => {
180184 y : 100 ,
181185 } ) ;
182186
183- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
187+ const nodeManager = createMockNodeManager ( ) ;
188+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
184189
185190 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
186191 expect ( result . newNodes [ 0 ] . type ) . toBe ( "task" ) ;
@@ -210,7 +215,8 @@ describe("duplicateNodes", () => {
210215
211216 const inputNode = createMockInputNode ( "original-input" , { x : 50 , y : 50 } ) ;
212217
213- const result = duplicateNodes ( componentSpec , [ inputNode ] ) ;
218+ const nodeManager = createMockNodeManager ( ) ;
219+ const result = duplicateNodes ( componentSpec , [ inputNode ] , nodeManager ) ;
214220
215221 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
216222 expect ( result . newNodes [ 0 ] . type ) . toBe ( "input" ) ;
@@ -247,7 +253,8 @@ describe("duplicateNodes", () => {
247253 y : 300 ,
248254 } ) ;
249255
250- const result = duplicateNodes ( componentSpec , [ outputNode ] ) ;
256+ const nodeManager = createMockNodeManager ( ) ;
257+ const result = duplicateNodes ( componentSpec , [ outputNode ] , nodeManager ) ;
251258
252259 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
253260 expect ( result . newNodes [ 0 ] . type ) . toBe ( "output" ) ;
@@ -278,7 +285,8 @@ describe("duplicateNodes", () => {
278285 createMockTaskNode ( "task2" , taskSpec2 , { x : 200 , y : 200 } ) ,
279286 ] ;
280287
281- const result = duplicateNodes ( componentSpec , nodes ) ;
288+ const nodeManager = createMockNodeManager ( ) ;
289+ const result = duplicateNodes ( componentSpec , nodes , nodeManager ) ;
282290
283291 expect ( result . newNodes ) . toHaveLength ( 2 ) ;
284292 expect ( result . newNodes . map ( ( n ) => n . id ) ) . toEqual ( [
@@ -297,7 +305,8 @@ describe("duplicateNodes", () => {
297305 const taskNode = createMockTaskNode ( "original-task" , mockTaskSpec ) ;
298306 taskNode . selected = true ;
299307
300- const result = duplicateNodes ( componentSpec , [ taskNode ] , {
308+ const nodeManager = createMockNodeManager ( ) ;
309+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager , {
301310 selected : false ,
302311 } ) ;
303312
@@ -321,7 +330,8 @@ describe("duplicateNodes", () => {
321330
322331 const taskNode = createMockTaskNode ( "original-task" , taskSpecWithStatus ) ;
323332
324- const result = duplicateNodes ( componentSpec , [ taskNode ] , {
333+ const nodeManager = createMockNodeManager ( ) ;
334+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager , {
325335 status : false ,
326336 } ) ;
327337
@@ -347,7 +357,8 @@ describe("duplicateNodes", () => {
347357 createMockTaskNode ( "task2" , mockTaskSpec , { x : 200 , y : 200 } ) ,
348358 ] ;
349359
350- const result = duplicateNodes ( componentSpec , nodes , {
360+ const nodeManager = createMockNodeManager ( ) ;
361+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
351362 position : { x : 500 , y : 500 } ,
352363 } ) ;
353364
@@ -403,7 +414,8 @@ describe("duplicateNodes", () => {
403414 createMockTaskNode ( "task2" , task2 ) ,
404415 ] ;
405416
406- const result = duplicateNodes ( componentSpec , nodes , {
417+ const nodeManager = createMockNodeManager ( ) ;
418+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
407419 connection : "none" ,
408420 } ) ;
409421
@@ -426,7 +438,8 @@ describe("duplicateNodes", () => {
426438 createMockTaskNode ( "task2" , task2 ) ,
427439 ] ;
428440
429- const result = duplicateNodes ( componentSpec , nodes , {
441+ const nodeManager = createMockNodeManager ( ) ;
442+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
430443 connection : "internal" ,
431444 } ) ;
432445
@@ -478,7 +491,8 @@ describe("duplicateNodes", () => {
478491 createMockTaskNode ( "task2" , task2WithConnections ) ,
479492 ] ;
480493
481- const result = duplicateNodes ( componentSpec , nodes , {
494+ const nodeManager = createMockNodeManager ( ) ;
495+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
482496 connection : "external" ,
483497 } ) ;
484498
@@ -511,7 +525,8 @@ describe("duplicateNodes", () => {
511525 createMockTaskNode ( "task2" , task2 ) ,
512526 ] ;
513527
514- const result = duplicateNodes ( componentSpec , nodes , {
528+ const nodeManager = createMockNodeManager ( ) ;
529+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
515530 connection : "all" ,
516531 } ) ;
517532
@@ -553,7 +568,8 @@ describe("duplicateNodes", () => {
553568 createMockTaskNode ( "task1" , taskSpec ) ,
554569 ] ;
555570
556- const result = duplicateNodes ( componentSpec , nodes , {
571+ const nodeManager = createMockNodeManager ( ) ;
572+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
557573 connection : "all" ,
558574 } ) ;
559575
@@ -590,7 +606,8 @@ describe("duplicateNodes", () => {
590606 createMockOutputNode ( "graph-output" ) ,
591607 ] ;
592608
593- const result = duplicateNodes ( componentSpec , nodes , {
609+ const nodeManager = createMockNodeManager ( ) ;
610+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
594611 connection : "all" ,
595612 } ) ;
596613
@@ -613,7 +630,8 @@ describe("duplicateNodes", () => {
613630 describe ( "edge cases" , ( ) => {
614631 it ( "should handle empty node array" , ( ) => {
615632 const componentSpec = createMockComponentSpec ( ) ;
616- const result = duplicateNodes ( componentSpec , [ ] ) ;
633+ const nodeManager = createMockNodeManager ( ) ;
634+ const result = duplicateNodes ( componentSpec , [ ] , nodeManager ) ;
617635
618636 expect ( result . newNodes ) . toHaveLength ( 0 ) ;
619637 expect ( result . nodeIdMap ) . toEqual ( { } ) ;
@@ -627,7 +645,8 @@ describe("duplicateNodes", () => {
627645 const taskNode = createMockTaskNode ( "original-task" , mockTaskSpec ) ;
628646 taskNode . measured = { width : 300 , height : 200 } ;
629647
630- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
648+ const nodeManager = createMockNodeManager ( ) ;
649+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
631650
632651 expect ( result . newNodes [ 0 ] . measured ) . toEqual ( { width : 300 , height : 200 } ) ;
633652 } ) ;
@@ -647,7 +666,8 @@ describe("duplicateNodes", () => {
647666 taskSpecWithoutPosition ,
648667 ) ;
649668
650- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
669+ const nodeManager = createMockNodeManager ( ) ;
670+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
651671
652672 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
653673 expect ( result . newNodes [ 0 ] . position ) . toEqual ( { x : 110 , y : 110 } ) ;
@@ -662,7 +682,8 @@ describe("duplicateNodes", () => {
662682
663683 const taskNode = createMockTaskNode ( "original-task" , mockTaskSpec ) ;
664684
665- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
685+ const nodeManager = createMockNodeManager ( ) ;
686+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
666687
667688 expect ( result ) . toHaveProperty ( "updatedComponentSpec" ) ;
668689 expect ( result ) . toHaveProperty ( "nodeIdMap" ) ;
0 commit comments