mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
## Summary Simplifies test setup for common settings ## Changes - **What**: - add vue-nodes tag to auto enable nodes 2.0 - remove UseNewMenu Top as this is default ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-11184-test-Simplify-vue-node-menu-test-setup-3416d73d3650815487e0c357d28761fe) by [Unito](https://www.unito.io)
89 lines
3.4 KiB
TypeScript
89 lines
3.4 KiB
TypeScript
import {
|
|
comfyExpect as expect,
|
|
comfyPageFixture as test
|
|
} from '@e2e/fixtures/ComfyPage'
|
|
import type { ComfyPage } from '@e2e/fixtures/ComfyPage'
|
|
|
|
async function openVueNodeContextMenu(comfyPage: ComfyPage, nodeTitle: string) {
|
|
const fixture = await comfyPage.vueNodes.getFixtureByTitle(nodeTitle)
|
|
await comfyPage.contextMenu.openForVueNode(fixture.header)
|
|
}
|
|
|
|
test.describe(
|
|
'Subgraph Duplicate Independent Values',
|
|
{ tag: ['@slow', '@subgraph', '@vue-nodes'] },
|
|
() => {
|
|
test('Duplicated subgraphs maintain independent widget values', async ({
|
|
comfyPage
|
|
}) => {
|
|
const clipNodeTitle = 'CLIP Text Encode (Prompt)'
|
|
|
|
// Convert first CLIP Text Encode node to subgraph
|
|
await openVueNodeContextMenu(comfyPage, clipNodeTitle)
|
|
await comfyPage.contextMenu.clickMenuItemExact('Convert to Subgraph')
|
|
await comfyPage.contextMenu.waitForHidden()
|
|
const subgraphNode = comfyPage.vueNodes.getNodeByTitle('New Subgraph')
|
|
await expect(subgraphNode).toBeVisible()
|
|
|
|
// Duplicate the subgraph
|
|
await openVueNodeContextMenu(comfyPage, 'New Subgraph')
|
|
await comfyPage.contextMenu.clickMenuItemExact('Duplicate')
|
|
await comfyPage.contextMenu.waitForHidden()
|
|
|
|
// Capture both subgraph node IDs
|
|
const subgraphNodes = comfyPage.vueNodes.getNodeByTitle('New Subgraph')
|
|
await expect(subgraphNodes).toHaveCount(2)
|
|
const nodeIds = await subgraphNodes.evaluateAll((nodes) =>
|
|
nodes
|
|
.map((n) => n.getAttribute('data-node-id'))
|
|
.filter((id): id is string => id !== null)
|
|
)
|
|
const [nodeId1, nodeId2] = nodeIds
|
|
|
|
// Enter first subgraph, set text widget value
|
|
await comfyPage.vueNodes.enterSubgraph(nodeId1)
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
const textarea1 = comfyPage.vueNodes
|
|
.getNodeByTitle(clipNodeTitle)
|
|
.first()
|
|
.getByRole('textbox', { name: 'text' })
|
|
await textarea1.fill('subgraph1_value')
|
|
await expect(textarea1).toHaveValue('subgraph1_value')
|
|
await comfyPage.subgraph.exitViaBreadcrumb()
|
|
|
|
// Enter second subgraph, set text widget value
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
await comfyPage.vueNodes.enterSubgraph(nodeId2)
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
const textarea2 = comfyPage.vueNodes
|
|
.getNodeByTitle(clipNodeTitle)
|
|
.first()
|
|
.getByRole('textbox', { name: 'text' })
|
|
await textarea2.fill('subgraph2_value')
|
|
await expect(textarea2).toHaveValue('subgraph2_value')
|
|
await comfyPage.subgraph.exitViaBreadcrumb()
|
|
|
|
// Re-enter first subgraph, assert value preserved
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
await comfyPage.vueNodes.enterSubgraph(nodeId1)
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
const textarea1Again = comfyPage.vueNodes
|
|
.getNodeByTitle(clipNodeTitle)
|
|
.first()
|
|
.getByRole('textbox', { name: 'text' })
|
|
await expect(textarea1Again).toHaveValue('subgraph1_value')
|
|
await comfyPage.subgraph.exitViaBreadcrumb()
|
|
|
|
// Re-enter second subgraph, assert value preserved
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
await comfyPage.vueNodes.enterSubgraph(nodeId2)
|
|
await comfyPage.vueNodes.waitForNodes()
|
|
const textarea2Again = comfyPage.vueNodes
|
|
.getNodeByTitle(clipNodeTitle)
|
|
.first()
|
|
.getByRole('textbox', { name: 'text' })
|
|
await expect(textarea2Again).toHaveValue('subgraph2_value')
|
|
})
|
|
}
|
|
)
|