mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 06:20:11 +00:00
## Summary Fixes an issue where handlers would be leaked causing Vue node rendering to be corrupted (Vue nodes would not render) due to the 00000000-0000-0000-0000-000000000000 ID being used on the root graph. ## Changes - **What**: - LGraph clear() skips store cleanup for the zero uuid, leaking handlers that cause the node manager/handlers to be overwritten during operations such as undo due to stale onNodeAdded hooks - Ensures that graph configuration assigns a valid ID for root graphs ## Screenshots (if applicable) Before fix, after doing ctrl+z after entering subgraph <img width="1011" height="574" alt="image" src="https://github.com/user-attachments/assets/1ff4692b-b961-4777-bf2d-9b981e311f91" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10825-fix-Ensure-zero-uuid-root-graphs-get-assigned-a-valid-id-3366d73d3650817d8603c71ffb5e5742) by [Unito](https://www.unito.io) --------- Co-authored-by: jaeone94 <89377375+jaeone94@users.noreply.github.com> Co-authored-by: Alexander Brown <drjkl@comfy.org>
50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import { expect } from '@playwright/test'
|
|
|
|
import { comfyPageFixture as test } from '../../fixtures/ComfyPage'
|
|
|
|
test.describe(
|
|
'Zero UUID workflow: subgraph undo rendering',
|
|
{ tag: ['@workflow', '@subgraph'] },
|
|
() => {
|
|
test.beforeEach(async ({ comfyPage }) => {
|
|
test.setTimeout(30000) // Extend timeout as we need to reload the page an additional time
|
|
await comfyPage.settings.setSetting('Comfy.VueNodes.Enabled', true)
|
|
await comfyPage.page.reload() // Reload page as we need to enter in Vue mode
|
|
await comfyPage.page.waitForFunction(() => !!window.app?.graph)
|
|
})
|
|
|
|
test('Undo after subgraph enter/exit renders all nodes when workflow starts with zero UUID', async ({
|
|
comfyPage
|
|
}) => {
|
|
await comfyPage.workflow.loadWorkflow(
|
|
'subgraphs/basic-subgraph-zero-uuid'
|
|
)
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
|
|
const assertInSubgraph = async (inSubgraph: boolean) => {
|
|
await expect
|
|
.poll(() => comfyPage.subgraph.isInSubgraph())
|
|
.toBe(inSubgraph)
|
|
}
|
|
|
|
// Root graph has 1 subgraph node, rendered in the DOM
|
|
await expect.poll(() => comfyPage.nodeOps.getGraphNodesCount()).toBe(1)
|
|
await expect.poll(() => comfyPage.vueNodes.getNodeCount()).toBe(1)
|
|
|
|
await comfyPage.vueNodes.enterSubgraph()
|
|
await assertInSubgraph(true)
|
|
|
|
await comfyPage.subgraph.exitViaBreadcrumb()
|
|
await assertInSubgraph(false)
|
|
|
|
await comfyPage.canvas.focus()
|
|
await comfyPage.keyboard.undo()
|
|
await comfyPage.nextFrame()
|
|
|
|
// After undo, the subgraph node is still visible and rendered
|
|
await expect.poll(() => comfyPage.nodeOps.getGraphNodesCount()).toBe(1)
|
|
await expect.poll(() => comfyPage.vueNodes.getNodeCount()).toBe(1)
|
|
})
|
|
}
|
|
)
|