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 ,
@@ -17,6 +18,8 @@ import {
1718
1819import { duplicateNodes } from "./duplicateNodes" ;
1920
21+ const createMockNodeManager = ( ) => new NodeManager ( ) ;
22+
2023// Mock utility functions
2124const mockTaskSpec : TaskSpec = {
2225 componentRef : { name : "test-component" } ,
@@ -153,8 +156,9 @@ describe("duplicateNodes", () => {
153156 } ;
154157
155158 const nodes : Node [ ] = [ ] ;
159+ const nodeManager = createMockNodeManager ( ) ;
156160
157- expect ( ( ) => duplicateNodes ( componentSpec , nodes ) ) . toThrow (
161+ expect ( ( ) => duplicateNodes ( componentSpec , nodes , nodeManager ) ) . toThrow (
158162 "ComponentSpec does not contain a graph implementation." ,
159163 ) ;
160164 } ) ;
@@ -178,7 +182,9 @@ describe("duplicateNodes", () => {
178182 y : 100 ,
179183 } ) ;
180184
181- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
185+ const nodeManager = createMockNodeManager ( ) ;
186+
187+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
182188
183189 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
184190 expect ( result . newNodes [ 0 ] . type ) . toBe ( "task" ) ;
@@ -208,7 +214,9 @@ describe("duplicateNodes", () => {
208214
209215 const inputNode = createMockInputNode ( "original-input" , { x : 50 , y : 50 } ) ;
210216
211- const result = duplicateNodes ( componentSpec , [ inputNode ] ) ;
217+ const nodeManager = createMockNodeManager ( ) ;
218+
219+ const result = duplicateNodes ( componentSpec , [ inputNode ] , nodeManager ) ;
212220
213221 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
214222 expect ( result . newNodes [ 0 ] . type ) . toBe ( "input" ) ;
@@ -243,7 +251,9 @@ describe("duplicateNodes", () => {
243251 y : 300 ,
244252 } ) ;
245253
246- const result = duplicateNodes ( componentSpec , [ outputNode ] ) ;
254+ const nodeManager = createMockNodeManager ( ) ;
255+
256+ const result = duplicateNodes ( componentSpec , [ outputNode ] , nodeManager ) ;
247257
248258 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
249259 expect ( result . newNodes [ 0 ] . type ) . toBe ( "output" ) ;
@@ -274,7 +284,9 @@ describe("duplicateNodes", () => {
274284 createMockTaskNode ( "task2" , taskSpec2 , { x : 200 , y : 200 } ) ,
275285 ] ;
276286
277- const result = duplicateNodes ( componentSpec , nodes ) ;
287+ const nodeManager = createMockNodeManager ( ) ;
288+
289+ const result = duplicateNodes ( componentSpec , nodes , nodeManager ) ;
278290
279291 expect ( result . newNodes ) . toHaveLength ( 2 ) ;
280292 expect ( result . newNodes . map ( ( n ) => n . id ) ) . toEqual ( [
@@ -293,7 +305,9 @@ describe("duplicateNodes", () => {
293305 const taskNode = createMockTaskNode ( "original-task" , mockTaskSpec ) ;
294306 taskNode . selected = true ;
295307
296- const result = duplicateNodes ( componentSpec , [ taskNode ] , {
308+ const nodeManager = createMockNodeManager ( ) ;
309+
310+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager , {
297311 selected : false ,
298312 } ) ;
299313
@@ -317,7 +331,9 @@ describe("duplicateNodes", () => {
317331
318332 const taskNode = createMockTaskNode ( "original-task" , taskSpecWithStatus ) ;
319333
320- const result = duplicateNodes ( componentSpec , [ taskNode ] , {
334+ const nodeManager = createMockNodeManager ( ) ;
335+
336+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager , {
321337 status : false ,
322338 } ) ;
323339
@@ -343,7 +359,9 @@ describe("duplicateNodes", () => {
343359 createMockTaskNode ( "task2" , mockTaskSpec , { x : 200 , y : 200 } ) ,
344360 ] ;
345361
346- const result = duplicateNodes ( componentSpec , nodes , {
362+ const nodeManager = createMockNodeManager ( ) ;
363+
364+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
347365 position : { x : 500 , y : 500 } ,
348366 } ) ;
349367
@@ -399,7 +417,9 @@ describe("duplicateNodes", () => {
399417 createMockTaskNode ( "task2" , task2 ) ,
400418 ] ;
401419
402- const result = duplicateNodes ( componentSpec , nodes , {
420+ const nodeManager = createMockNodeManager ( ) ;
421+
422+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
403423 connection : "none" ,
404424 } ) ;
405425
@@ -422,7 +442,9 @@ describe("duplicateNodes", () => {
422442 createMockTaskNode ( "task2" , task2 ) ,
423443 ] ;
424444
425- const result = duplicateNodes ( componentSpec , nodes , {
445+ const nodeManager = createMockNodeManager ( ) ;
446+
447+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
426448 connection : "internal" ,
427449 } ) ;
428450
@@ -474,7 +496,9 @@ describe("duplicateNodes", () => {
474496 createMockTaskNode ( "task2" , task2WithConnections ) ,
475497 ] ;
476498
477- const result = duplicateNodes ( componentSpec , nodes , {
499+ const nodeManager = createMockNodeManager ( ) ;
500+
501+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
478502 connection : "external" ,
479503 } ) ;
480504
@@ -507,7 +531,9 @@ describe("duplicateNodes", () => {
507531 createMockTaskNode ( "task2" , task2 ) ,
508532 ] ;
509533
510- const result = duplicateNodes ( componentSpec , nodes , {
534+ const nodeManager = createMockNodeManager ( ) ;
535+
536+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
511537 connection : "all" ,
512538 } ) ;
513539
@@ -549,7 +575,9 @@ describe("duplicateNodes", () => {
549575 createMockTaskNode ( "task1" , taskSpec ) ,
550576 ] ;
551577
552- const result = duplicateNodes ( componentSpec , nodes , {
578+ const nodeManager = createMockNodeManager ( ) ;
579+
580+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
553581 connection : "all" ,
554582 } ) ;
555583
@@ -586,7 +614,9 @@ describe("duplicateNodes", () => {
586614 createMockOutputNode ( "graph-output" ) ,
587615 ] ;
588616
589- const result = duplicateNodes ( componentSpec , nodes , {
617+ const nodeManager = createMockNodeManager ( ) ;
618+
619+ const result = duplicateNodes ( componentSpec , nodes , nodeManager , {
590620 connection : "all" ,
591621 } ) ;
592622
@@ -609,7 +639,8 @@ describe("duplicateNodes", () => {
609639 describe ( "edge cases" , ( ) => {
610640 it ( "should handle empty node array" , ( ) => {
611641 const componentSpec = createMockComponentSpec ( ) ;
612- const result = duplicateNodes ( componentSpec , [ ] ) ;
642+ const nodeManager = createMockNodeManager ( ) ;
643+ const result = duplicateNodes ( componentSpec , [ ] , nodeManager ) ;
613644
614645 expect ( result . newNodes ) . toHaveLength ( 0 ) ;
615646 expect ( result . nodeIdMap ) . toEqual ( { } ) ;
@@ -623,7 +654,9 @@ describe("duplicateNodes", () => {
623654 const taskNode = createMockTaskNode ( "original-task" , mockTaskSpec ) ;
624655 taskNode . measured = { width : 300 , height : 200 } ;
625656
626- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
657+ const nodeManager = createMockNodeManager ( ) ;
658+
659+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
627660
628661 expect ( result . newNodes [ 0 ] . measured ) . toEqual ( { width : 300 , height : 200 } ) ;
629662 } ) ;
@@ -643,7 +676,9 @@ describe("duplicateNodes", () => {
643676 taskSpecWithoutPosition ,
644677 ) ;
645678
646- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
679+ const nodeManager = createMockNodeManager ( ) ;
680+
681+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
647682
648683 expect ( result . newNodes ) . toHaveLength ( 1 ) ;
649684 expect ( result . newNodes [ 0 ] . position ) . toEqual ( { x : 110 , y : 110 } ) ;
@@ -658,7 +693,9 @@ describe("duplicateNodes", () => {
658693
659694 const taskNode = createMockTaskNode ( "original-task" , mockTaskSpec ) ;
660695
661- const result = duplicateNodes ( componentSpec , [ taskNode ] ) ;
696+ const nodeManager = createMockNodeManager ( ) ;
697+
698+ const result = duplicateNodes ( componentSpec , [ taskNode ] , nodeManager ) ;
662699
663700 expect ( result ) . toHaveProperty ( "updatedComponentSpec" ) ;
664701 expect ( result ) . toHaveProperty ( "nodeIdMap" ) ;
0 commit comments