mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 06:20:11 +00:00
## Summary - Remove the legacy missing nodes modal dialog and migrate all functionality to the existing Error Overlay / TabErrors system - Migrate core node version warning from `MissingCoreNodesMessage.vue` to `MissingNodeCard` in the errors tab - Remove `Comfy.Workflow.ShowMissingNodesWarning` setting (errors tab always surfaces missing nodes) - Delete 6 legacy files: `useMissingNodesDialog.ts`, `MissingNodesContent.vue`, `MissingNodesFooter.vue`, `MissingNodesHeader.vue`, `MissingCoreNodesMessage.vue` and its test - Rename `showMissingNodesDialog`/`showMissingModelsDialog` params to `showMissingNodes`/`showMissingModels` - Add `errorOverlay` and `missingNodeCard` to centralized `TestIds` - Migrate all E2E tests from legacy dialog selectors to error overlay testIds - Add new E2E test: MissingNodeCard visible via "See Errors" button flow - Add new E2E test: subgraph missing node type verified by expanding pack row - Add `surfaceMissingNodes` unit tests to `executionErrorStore` - Guard `semver.compare` against invalid version strings - Add `role="alert"`, `aria-hidden` for accessibility - Use reactive props destructuring in `MissingNodeCard` and `MissingPackGroupRow` **Net change: -669 lines** (19 files, +323 / -992) <img width="733" height="579" alt="image" src="https://github.com/user-attachments/assets/c497809d-b176-43bf-9872-34bd74c6ea0d" /> ## Test plan - [x] Unit tests: MissingNodeCard core node warning (7 tests) - [x] Unit tests: surfaceMissingNodes (4 tests) - [x] Unit tests: workflowService showPendingWarnings (updated) - [x] E2E: Error overlay visible on missing nodes workflow - [x] E2E: Error overlay visible on subgraph missing nodes - [x] E2E: MissingNodeCard visible via See Errors button - [x] E2E: Subgraph node type visible after expanding pack row - [x] E2E: Error overlay does not resurface on undo/redo - [x] E2E: Error overlay does not reappear on workflow tab switch - [x] Typecheck, lint, knip all passing ## Related issues - Closes #9923 (partially — `errorOverlay` and `missingNodeCard` added to TestIds) - References #10027 (mock hoisting inconsistency) - References #10033 (i18n-based test selectors) - References #10085 (DDD layer violation + focusedErrorNodeId) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-10102-refactor-remove-legacy-missing-nodes-dialog-3256d73d365081c194d2e90bc6401846) by [Unito](https://www.unito.io)
79 lines
2.8 KiB
TypeScript
79 lines
2.8 KiB
TypeScript
import { expect } from '@playwright/test'
|
|
|
|
import { comfyPageFixture as test } from '../fixtures/ComfyPage'
|
|
import { TestIds } from '../fixtures/selectors'
|
|
import type { NodeReference } from '../fixtures/utils/litegraphUtils'
|
|
|
|
test.beforeEach(async ({ comfyPage }) => {
|
|
await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Disabled')
|
|
})
|
|
|
|
test.describe('Primitive Node', { tag: ['@screenshot', '@node'] }, () => {
|
|
test('Can load with correct size', async ({ comfyPage }) => {
|
|
await comfyPage.workflow.loadWorkflow('primitive/primitive_node')
|
|
await expect(comfyPage.canvas).toHaveScreenshot('primitive_node.png')
|
|
})
|
|
|
|
// When link is dropped on widget, it should automatically convert the widget
|
|
// to input.
|
|
test('Can connect to widget', async ({ comfyPage }) => {
|
|
await comfyPage.workflow.loadWorkflow(
|
|
'primitive/primitive_node_unconnected'
|
|
)
|
|
const primitiveNode: NodeReference =
|
|
await comfyPage.nodeOps.getNodeRefById(1)
|
|
const ksamplerNode: NodeReference =
|
|
await comfyPage.nodeOps.getNodeRefById(2)
|
|
// Connect the output of the primitive node to the input of first widget of the ksampler node
|
|
await primitiveNode.connectWidget(0, ksamplerNode, 0)
|
|
await expect(comfyPage.canvas).toHaveScreenshot(
|
|
'primitive_node_connected.png'
|
|
)
|
|
})
|
|
|
|
test('Can connect to dom widget', async ({ comfyPage }) => {
|
|
await comfyPage.workflow.loadWorkflow(
|
|
'primitive/primitive_node_unconnected_dom_widget'
|
|
)
|
|
const primitiveNode: NodeReference =
|
|
await comfyPage.nodeOps.getNodeRefById(1)
|
|
const clipEncoderNode: NodeReference =
|
|
await comfyPage.nodeOps.getNodeRefById(2)
|
|
await primitiveNode.connectWidget(0, clipEncoderNode, 0)
|
|
await expect(comfyPage.canvas).toHaveScreenshot(
|
|
'primitive_node_connected_dom_widget.png'
|
|
)
|
|
})
|
|
|
|
test('Can connect to static primitive node', async ({ comfyPage }) => {
|
|
await comfyPage.workflow.loadWorkflow(
|
|
'primitive/static_primitive_unconnected'
|
|
)
|
|
const primitiveNode: NodeReference =
|
|
await comfyPage.nodeOps.getNodeRefById(1)
|
|
const ksamplerNode: NodeReference =
|
|
await comfyPage.nodeOps.getNodeRefById(2)
|
|
await primitiveNode.connectWidget(0, ksamplerNode, 0)
|
|
await expect(comfyPage.canvas).toHaveScreenshot(
|
|
'static_primitive_connected.png'
|
|
)
|
|
})
|
|
|
|
test('Report missing nodes when connect to missing node', async ({
|
|
comfyPage
|
|
}) => {
|
|
await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Top')
|
|
await comfyPage.settings.setSetting(
|
|
'Comfy.RightSidePanel.ShowErrorsTab',
|
|
true
|
|
)
|
|
await comfyPage.workflow.loadWorkflow(
|
|
'primitive/primitive_node_connect_missing_node'
|
|
)
|
|
const errorOverlay = comfyPage.page.getByTestId(
|
|
TestIds.dialogs.errorOverlay
|
|
)
|
|
await expect(errorOverlay).toBeVisible()
|
|
})
|
|
})
|