@@ -18,29 +18,16 @@ test.describe(
1818 await comfyPage . canvasOps . resetView ( )
1919 } )
2020
21- test ( 'hydrates all nodes, then swaps only after the viewport settles ' , async ( {
21+ test ( 'hydrates all nodes, then swaps to the settled viewport ' , async ( {
2222 comfyPage
2323 } ) => {
24- const graphNodeIds = await comfyPage . page . evaluate ( ( ) => {
25- const nodes = window . app ! . graph . nodes
26- nodes . forEach ( ( node , index ) => {
27- const x = index < 2 ? 100 + index * 500 : 1800 + ( index - 2 ) * 1800
28- node . setPos ( x , 100 )
29- node . updateArea ( )
30- } )
31- const canvas = window . app ! . canvas
32- canvas . ds . offset [ 0 ] = 0
33- canvas . ds . offset [ 1 ] = 0
34- canvas . ds . scale = 1
35- canvas . setDirty ( true , true )
36- return nodes . map ( ( node ) => String ( node . id ) )
37- } )
38- await comfyPage . nextFrame ( )
39-
40- await comfyPage . settings . setSetting (
41- 'Comfy.VueNodes.ViewportVirtualization' ,
42- true
43- )
24+ const graphNodeIds =
25+ await comfyPage . vueNodes . layoutNodesAndEnableVirtualization (
26+ ( _nodeId , index ) => [
27+ index < 2 ? 100 + index * 500 : 1800 + ( index - 2 ) * 1800 ,
28+ 100
29+ ]
30+ )
4431
4532 const firstViewportIds = graphNodeIds . slice ( 0 , 2 )
4633 await expect
@@ -54,7 +41,6 @@ test.describe(
5441 } )
5542 await comfyPage . nextFrame ( )
5643
57- expect ( await comfyPage . vueNodes . getNodeIds ( ) ) . toEqual ( firstViewportIds )
5844 await expect
5945 . poll ( ( ) => comfyPage . vueNodes . getNodeIds ( ) )
6046 . toEqual ( [ graphNodeIds [ 2 ] ] )
@@ -66,25 +52,13 @@ test.describe(
6652 test ( 'keeps a multi-node drag mount set frozen during edge auto-pan' , async ( {
6753 comfyPage
6854 } ) => {
69- const graphNodeIds = await comfyPage . page . evaluate ( ( ) => {
70- const nodes = window . app ! . graph . nodes
71- nodes . forEach ( ( node , index ) => {
72- const x = index < 2 ? 100 + index * 500 : 1800 + ( index - 2 ) * 1800
73- node . setPos ( x , 100 )
74- node . updateArea ( )
75- } )
76- const canvas = window . app ! . canvas
77- canvas . ds . offset [ 0 ] = 0
78- canvas . ds . offset [ 1 ] = 0
79- canvas . ds . scale = 1
80- canvas . setDirty ( true , true )
81- return nodes . map ( ( node ) => String ( node . id ) )
82- } )
83- await comfyPage . nextFrame ( )
84- await comfyPage . settings . setSetting (
85- 'Comfy.VueNodes.ViewportVirtualization' ,
86- true
87- )
55+ const graphNodeIds =
56+ await comfyPage . vueNodes . layoutNodesAndEnableVirtualization (
57+ ( _nodeId , index ) => [
58+ index < 2 ? 100 + index * 500 : 1800 + ( index - 2 ) * 1800 ,
59+ 100
60+ ]
61+ )
8862
8963 const initialIds = graphNodeIds . slice ( 0 , 2 )
9064 await expect
@@ -123,26 +97,16 @@ test.describe(
12397 comfyPage
12498 } ) => {
12599 await comfyPage . workflow . loadWorkflow ( 'groups/oversized_group' )
126- const nodeId = await comfyPage . page . evaluate ( ( ) => {
127- const node = window . app ! . graph . nodes [ 0 ]
100+ await comfyPage . page . evaluate ( ( ) => {
128101 const group = window . app ! . graph . groups [ 0 ]
129- node . setPos ( 100 , 100 )
130- node . updateArea ( )
131102 group . pos = [ 50 , 50 ]
132103 group . size = [ 900 , 825 ]
133- group . recomputeInsideNodes ( )
134- const canvas = window . app ! . canvas
135- canvas . ds . offset [ 0 ] = 0
136- canvas . ds . offset [ 1 ] = 0
137- canvas . ds . scale = 1
138- canvas . setDirty ( true , true )
139- return String ( node . id )
140104 } )
141- await comfyPage . nextFrame ( )
142- await comfyPage . settings . setSetting (
143- 'Comfy.VueNodes.ViewportVirtualization' ,
144- true
145- )
105+ const [ nodeId ] =
106+ await comfyPage . vueNodes . layoutNodesAndEnableVirtualization ( ( ) => [
107+ 100 , 100
108+ ] )
109+ if ( ! nodeId ) throw new Error ( 'Expected a node in the group workflow' )
146110 await expect . poll ( ( ) => comfyPage . vueNodes . getNodeIds ( ) ) . toEqual ( [ nodeId ] )
147111
148112 await comfyPage . page . evaluate ( ( ) => {
@@ -153,8 +117,9 @@ test.describe(
153117 node . updateArea ( )
154118 canvas . setDirty ( true , true )
155119 } )
156- await comfyPage . page . waitForTimeout ( 400 )
157- expect ( await comfyPage . vueNodes . getNodeIds ( ) ) . toEqual ( [ nodeId ] )
120+ await expect
121+ . poll ( ( ) => comfyPage . vueNodes . getNodeIds ( ) , { timeout : 1_000 } )
122+ . toEqual ( [ nodeId ] )
158123
159124 await comfyPage . page . evaluate ( ( ) => {
160125 window . app ! . canvas . isDragging = false
@@ -166,26 +131,14 @@ test.describe(
166131 test ( 'hydrates a node pasted into a distant settled viewport' , async ( {
167132 comfyPage
168133 } ) => {
169- const sourceId = await comfyPage . page . evaluate ( ( ) => {
170- const [ source , ...otherNodes ] = window . app ! . graph . nodes
171- source . setPos ( 100 , 100 )
172- source . updateArea ( )
173- otherNodes . forEach ( ( node , index ) => {
174- node . setPos ( 4000 + index * 1800 , 100 )
175- node . updateArea ( )
176- } )
177- const canvas = window . app ! . canvas
178- canvas . ds . offset [ 0 ] = 0
179- canvas . ds . offset [ 1 ] = 0
180- canvas . ds . scale = 1
181- canvas . setDirty ( true , true )
182- return String ( source . id )
183- } )
184- await comfyPage . nextFrame ( )
185- await comfyPage . settings . setSetting (
186- 'Comfy.VueNodes.ViewportVirtualization' ,
187- true
188- )
134+ const [ sourceId ] =
135+ await comfyPage . vueNodes . layoutNodesAndEnableVirtualization (
136+ ( _nodeId , index ) => [
137+ index === 0 ? 100 : 4000 + ( index - 1 ) * 1800 ,
138+ 100
139+ ]
140+ )
141+ if ( ! sourceId ) throw new Error ( 'Expected a source node' )
189142
190143 await expect
191144 . poll ( ( ) => comfyPage . vueNodes . getNodeIds ( ) )
@@ -234,29 +187,16 @@ test.describe(
234187 const target = graph . nodes . find (
235188 ( node ) => node . getTitle ( ) === 'KSampler'
236189 ) !
237- source . setPos ( 100 , 100 )
238- target . setPos ( 1800 , 100 )
239- source . updateArea ( )
240- target . updateArea ( )
241- graph . nodes
242- . filter ( ( node ) => node !== source && node !== target )
243- . forEach ( ( node , index ) => {
244- node . setPos ( 4000 + index * 1800 , 100 )
245- node . updateArea ( )
246- } )
247190 const targetSlot = target . findInputSlot ( 'model' )
248191 if ( targetSlot >= 0 ) target . disconnectInput ( targetSlot )
249- const canvas = window . app ! . canvas
250- canvas . ds . offset [ 0 ] = 0
251- canvas . ds . offset [ 1 ] = 0
252- canvas . ds . scale = 1
253- canvas . setDirty ( true , true )
254192 return { source : String ( source . id ) , target : String ( target . id ) }
255193 } )
256- await comfyPage . nextFrame ( )
257- await comfyPage . settings . setSetting (
258- 'Comfy.VueNodes.ViewportVirtualization' ,
259- true
194+ await comfyPage . vueNodes . layoutNodesAndEnableVirtualization (
195+ ( nodeId , index ) => {
196+ if ( nodeId === ids . source ) return [ 100 , 100 ]
197+ if ( nodeId === ids . target ) return [ 1800 , 100 ]
198+ return [ 4000 + index * 1800 , 100 ]
199+ }
260200 )
261201
262202 await expect ( comfyPage . vueNodes . getNodeLocator ( ids . source ) ) . toBeVisible ( )
0 commit comments