diff --git a/browser_tests/assets/group_node_identical_nodes_hidden_inputs.json b/browser_tests/assets/groupnodes/group_node_identical_nodes_hidden_inputs.json similarity index 100% rename from browser_tests/assets/group_node_identical_nodes_hidden_inputs.json rename to browser_tests/assets/groupnodes/group_node_identical_nodes_hidden_inputs.json diff --git a/browser_tests/assets/group_node_v1.3.3.json b/browser_tests/assets/groupnodes/group_node_v1.3.3.json similarity index 100% rename from browser_tests/assets/group_node_v1.3.3.json rename to browser_tests/assets/groupnodes/group_node_v1.3.3.json diff --git a/browser_tests/assets/legacy_group_node.json b/browser_tests/assets/groupnodes/legacy_group_node.json similarity index 100% rename from browser_tests/assets/legacy_group_node.json rename to browser_tests/assets/groupnodes/legacy_group_node.json diff --git a/browser_tests/assets/mixed_graph_items.json b/browser_tests/assets/groups/mixed_graph_items.json similarity index 100% rename from browser_tests/assets/mixed_graph_items.json rename to browser_tests/assets/groups/mixed_graph_items.json diff --git a/browser_tests/assets/oversized_group.json b/browser_tests/assets/groups/oversized_group.json similarity index 100% rename from browser_tests/assets/oversized_group.json rename to browser_tests/assets/groups/oversized_group.json diff --git a/browser_tests/assets/single_group.json b/browser_tests/assets/groups/single_group.json similarity index 100% rename from browser_tests/assets/single_group.json rename to browser_tests/assets/groups/single_group.json diff --git a/browser_tests/assets/single_group_only.json b/browser_tests/assets/groups/single_group_only.json similarity index 100% rename from browser_tests/assets/single_group_only.json rename to browser_tests/assets/groups/single_group_only.json diff --git a/browser_tests/assets/default_input.json b/browser_tests/assets/inputs/default_input.json similarity index 100% rename from browser_tests/assets/default_input.json rename to browser_tests/assets/inputs/default_input.json diff --git a/browser_tests/assets/dynamically_added_input.json b/browser_tests/assets/inputs/dynamically_added_input.json similarity index 100% rename from browser_tests/assets/dynamically_added_input.json rename to browser_tests/assets/inputs/dynamically_added_input.json diff --git a/browser_tests/assets/force_input.json b/browser_tests/assets/inputs/force_input.json similarity index 100% rename from browser_tests/assets/force_input.json rename to browser_tests/assets/inputs/force_input.json diff --git a/browser_tests/assets/input_order_swap.json b/browser_tests/assets/inputs/input_order_swap.json similarity index 100% rename from browser_tests/assets/input_order_swap.json rename to browser_tests/assets/inputs/input_order_swap.json diff --git a/browser_tests/assets/node_with_v2_combo_input.json b/browser_tests/assets/inputs/node_with_v2_combo_input.json similarity index 100% rename from browser_tests/assets/node_with_v2_combo_input.json rename to browser_tests/assets/inputs/node_with_v2_combo_input.json diff --git a/browser_tests/assets/old_workflow_converted_input.json b/browser_tests/assets/inputs/old_workflow_converted_input.json similarity index 100% rename from browser_tests/assets/old_workflow_converted_input.json rename to browser_tests/assets/inputs/old_workflow_converted_input.json diff --git a/browser_tests/assets/only_optional_inputs.json b/browser_tests/assets/inputs/only_optional_inputs.json similarity index 100% rename from browser_tests/assets/only_optional_inputs.json rename to browser_tests/assets/inputs/only_optional_inputs.json diff --git a/browser_tests/assets/optional_combo_input.json b/browser_tests/assets/inputs/optional_combo_input.json similarity index 100% rename from browser_tests/assets/optional_combo_input.json rename to browser_tests/assets/inputs/optional_combo_input.json diff --git a/browser_tests/assets/optional_input_correct_shape.json b/browser_tests/assets/inputs/optional_input_correct_shape.json similarity index 100% rename from browser_tests/assets/optional_input_correct_shape.json rename to browser_tests/assets/inputs/optional_input_correct_shape.json diff --git a/browser_tests/assets/optional_input_no_shape.json b/browser_tests/assets/inputs/optional_input_no_shape.json similarity index 100% rename from browser_tests/assets/optional_input_no_shape.json rename to browser_tests/assets/inputs/optional_input_no_shape.json diff --git a/browser_tests/assets/optional_input_wrong_shape.json b/browser_tests/assets/inputs/optional_input_wrong_shape.json similarity index 100% rename from browser_tests/assets/optional_input_wrong_shape.json rename to browser_tests/assets/inputs/optional_input_wrong_shape.json diff --git a/browser_tests/assets/remote_widget.json b/browser_tests/assets/inputs/remote_widget.json similarity index 100% rename from browser_tests/assets/remote_widget.json rename to browser_tests/assets/inputs/remote_widget.json diff --git a/browser_tests/assets/renamed_converted_widget.json b/browser_tests/assets/inputs/renamed_converted_widget.json similarity index 100% rename from browser_tests/assets/renamed_converted_widget.json rename to browser_tests/assets/inputs/renamed_converted_widget.json diff --git a/browser_tests/assets/simple_slider.json b/browser_tests/assets/inputs/simple_slider.json similarity index 100% rename from browser_tests/assets/simple_slider.json rename to browser_tests/assets/inputs/simple_slider.json diff --git a/browser_tests/assets/string_input.json b/browser_tests/assets/inputs/string_input.json similarity index 100% rename from browser_tests/assets/string_input.json rename to browser_tests/assets/inputs/string_input.json diff --git a/browser_tests/assets/bad_link.json b/browser_tests/assets/links/bad_link.json similarity index 100% rename from browser_tests/assets/bad_link.json rename to browser_tests/assets/links/bad_link.json diff --git a/browser_tests/assets/batch_move_links.json b/browser_tests/assets/links/batch_move_links.json similarity index 100% rename from browser_tests/assets/batch_move_links.json rename to browser_tests/assets/links/batch_move_links.json diff --git a/browser_tests/assets/single_connected_reroute_node.json b/browser_tests/assets/links/single_connected_reroute_node.json similarity index 100% rename from browser_tests/assets/single_connected_reroute_node.json rename to browser_tests/assets/links/single_connected_reroute_node.json diff --git a/browser_tests/assets/snap_to_slot.json b/browser_tests/assets/links/snap_to_slot.json similarity index 100% rename from browser_tests/assets/snap_to_slot.json rename to browser_tests/assets/links/snap_to_slot.json diff --git a/browser_tests/assets/missing_models.json b/browser_tests/assets/missing/missing_models.json similarity index 100% rename from browser_tests/assets/missing_models.json rename to browser_tests/assets/missing/missing_models.json diff --git a/browser_tests/assets/missing_models_from_node_properties.json b/browser_tests/assets/missing/missing_models_from_node_properties.json similarity index 100% rename from browser_tests/assets/missing_models_from_node_properties.json rename to browser_tests/assets/missing/missing_models_from_node_properties.json diff --git a/browser_tests/assets/missing_nodes.json b/browser_tests/assets/missing/missing_nodes.json similarity index 100% rename from browser_tests/assets/missing_nodes.json rename to browser_tests/assets/missing/missing_nodes.json diff --git a/browser_tests/assets/missing_nodes_converted_widget.json b/browser_tests/assets/missing/missing_nodes_converted_widget.json similarity index 100% rename from browser_tests/assets/missing_nodes_converted_widget.json rename to browser_tests/assets/missing/missing_nodes_converted_widget.json diff --git a/browser_tests/assets/missing_nodes_in_subgraph.json b/browser_tests/assets/missing/missing_nodes_in_subgraph.json similarity index 100% rename from browser_tests/assets/missing_nodes_in_subgraph.json rename to browser_tests/assets/missing/missing_nodes_in_subgraph.json diff --git a/browser_tests/assets/model_metadata_widget_mismatch.json b/browser_tests/assets/missing/model_metadata_widget_mismatch.json similarity index 100% rename from browser_tests/assets/model_metadata_widget_mismatch.json rename to browser_tests/assets/missing/model_metadata_widget_mismatch.json diff --git a/browser_tests/assets/every_node_color.json b/browser_tests/assets/nodes/every_node_color.json similarity index 100% rename from browser_tests/assets/every_node_color.json rename to browser_tests/assets/nodes/every_node_color.json diff --git a/browser_tests/assets/execution_error.json b/browser_tests/assets/nodes/execution_error.json similarity index 100% rename from browser_tests/assets/execution_error.json rename to browser_tests/assets/nodes/execution_error.json diff --git a/browser_tests/assets/note_nodes.json b/browser_tests/assets/nodes/note_nodes.json similarity index 100% rename from browser_tests/assets/note_nodes.json rename to browser_tests/assets/nodes/note_nodes.json diff --git a/browser_tests/assets/single_ksampler.json b/browser_tests/assets/nodes/single_ksampler.json similarity index 100% rename from browser_tests/assets/single_ksampler.json rename to browser_tests/assets/nodes/single_ksampler.json diff --git a/browser_tests/assets/single_save_image_node.json b/browser_tests/assets/nodes/single_save_image_node.json similarity index 100% rename from browser_tests/assets/single_save_image_node.json rename to browser_tests/assets/nodes/single_save_image_node.json diff --git a/browser_tests/assets/string_node_id.json b/browser_tests/assets/nodes/string_node_id.json similarity index 100% rename from browser_tests/assets/string_node_id.json rename to browser_tests/assets/nodes/string_node_id.json diff --git a/browser_tests/assets/basic-subgraph.json b/browser_tests/assets/subgraphs/basic-subgraph.json similarity index 100% rename from browser_tests/assets/basic-subgraph.json rename to browser_tests/assets/subgraphs/basic-subgraph.json diff --git a/browser_tests/assets/nested-subgraph.json b/browser_tests/assets/subgraphs/nested-subgraph.json similarity index 100% rename from browser_tests/assets/nested-subgraph.json rename to browser_tests/assets/subgraphs/nested-subgraph.json diff --git a/browser_tests/assets/subgraph-with-multiple-promoted-widgets.json b/browser_tests/assets/subgraphs/subgraph-with-multiple-promoted-widgets.json similarity index 100% rename from browser_tests/assets/subgraph-with-multiple-promoted-widgets.json rename to browser_tests/assets/subgraphs/subgraph-with-multiple-promoted-widgets.json diff --git a/browser_tests/assets/subgraph-with-promoted-text-widget.json b/browser_tests/assets/subgraphs/subgraph-with-promoted-text-widget.json similarity index 100% rename from browser_tests/assets/subgraph-with-promoted-text-widget.json rename to browser_tests/assets/subgraphs/subgraph-with-promoted-text-widget.json diff --git a/browser_tests/assets/subgraph-with-text-widget.json b/browser_tests/assets/subgraphs/subgraph-with-text-widget.json similarity index 100% rename from browser_tests/assets/subgraph-with-text-widget.json rename to browser_tests/assets/subgraphs/subgraph-with-text-widget.json diff --git a/browser_tests/assets/collapsed_multiline.json b/browser_tests/assets/widgets/collapsed_multiline.json similarity index 100% rename from browser_tests/assets/collapsed_multiline.json rename to browser_tests/assets/widgets/collapsed_multiline.json diff --git a/browser_tests/assets/edited_workflow.webp b/browser_tests/assets/workflowInMedia/edited_workflow.webp similarity index 100% rename from browser_tests/assets/edited_workflow.webp rename to browser_tests/assets/workflowInMedia/edited_workflow.webp diff --git a/browser_tests/assets/large_workflow.webp b/browser_tests/assets/workflowInMedia/large_workflow.webp similarity index 100% rename from browser_tests/assets/large_workflow.webp rename to browser_tests/assets/workflowInMedia/large_workflow.webp diff --git a/browser_tests/assets/no_workflow.webp b/browser_tests/assets/workflowInMedia/no_workflow.webp similarity index 100% rename from browser_tests/assets/no_workflow.webp rename to browser_tests/assets/workflowInMedia/no_workflow.webp diff --git a/browser_tests/assets/workflow.avif b/browser_tests/assets/workflowInMedia/workflow.avif similarity index 100% rename from browser_tests/assets/workflow.avif rename to browser_tests/assets/workflowInMedia/workflow.avif diff --git a/browser_tests/assets/workflow.glb b/browser_tests/assets/workflowInMedia/workflow.glb similarity index 100% rename from browser_tests/assets/workflow.glb rename to browser_tests/assets/workflowInMedia/workflow.glb diff --git a/browser_tests/assets/workflow.m4v b/browser_tests/assets/workflowInMedia/workflow.m4v similarity index 100% rename from browser_tests/assets/workflow.m4v rename to browser_tests/assets/workflowInMedia/workflow.m4v diff --git a/browser_tests/assets/workflow.mov b/browser_tests/assets/workflowInMedia/workflow.mov similarity index 100% rename from browser_tests/assets/workflow.mov rename to browser_tests/assets/workflowInMedia/workflow.mov diff --git a/browser_tests/assets/workflow.mp4 b/browser_tests/assets/workflowInMedia/workflow.mp4 similarity index 100% rename from browser_tests/assets/workflow.mp4 rename to browser_tests/assets/workflowInMedia/workflow.mp4 diff --git a/browser_tests/assets/workflow.svg b/browser_tests/assets/workflowInMedia/workflow.svg similarity index 100% rename from browser_tests/assets/workflow.svg rename to browser_tests/assets/workflowInMedia/workflow.svg diff --git a/browser_tests/assets/workflow.webm b/browser_tests/assets/workflowInMedia/workflow.webm similarity index 100% rename from browser_tests/assets/workflow.webm rename to browser_tests/assets/workflowInMedia/workflow.webm diff --git a/browser_tests/assets/workflow.webp b/browser_tests/assets/workflowInMedia/workflow.webp similarity index 100% rename from browser_tests/assets/workflow.webp rename to browser_tests/assets/workflowInMedia/workflow.webp diff --git a/browser_tests/tests/colorPalette.spec.ts b/browser_tests/tests/colorPalette.spec.ts index fa370a831b..901cce9137 100644 --- a/browser_tests/tests/colorPalette.spec.ts +++ b/browser_tests/tests/colorPalette.spec.ts @@ -154,7 +154,7 @@ test.describe('Color Palette', () => { // doesn't update the store immediately. await comfyPage.setup() - await comfyPage.loadWorkflow('every_node_color') + await comfyPage.loadWorkflow('nodes/every_node_color') await comfyPage.setSetting('Comfy.ColorPalette', 'obsidian_dark') await expect(comfyPage.canvas).toHaveScreenshot( 'custom-color-palette-obsidian-dark-all-colors.png' @@ -192,7 +192,7 @@ test.describe('Color Palette', () => { test.describe('Node Color Adjustments', () => { test.beforeEach(async ({ comfyPage }) => { - await comfyPage.loadWorkflow('every_node_color') + await comfyPage.loadWorkflow('nodes/every_node_color') }) test('should adjust opacity via node opacity setting', async ({ diff --git a/browser_tests/tests/dialog.spec.ts b/browser_tests/tests/dialog.spec.ts index 1223d69406..bdfcd392fd 100644 --- a/browser_tests/tests/dialog.spec.ts +++ b/browser_tests/tests/dialog.spec.ts @@ -7,7 +7,7 @@ test.describe('Load workflow warning', () => { test('Should display a warning when loading a workflow with missing nodes', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('missing_nodes') + await comfyPage.loadWorkflow('missing/missing_nodes') // Wait for the element with the .comfy-missing-nodes selector to be visible const missingNodesWarning = comfyPage.page.locator('.comfy-missing-nodes') @@ -17,7 +17,7 @@ test.describe('Load workflow warning', () => { test('Should display a warning when loading a workflow with missing nodes in subgraphs', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('missing_nodes_in_subgraph') + await comfyPage.loadWorkflow('missing/missing_nodes_in_subgraph') // Wait for the element with the .comfy-missing-nodes selector to be visible const missingNodesWarning = comfyPage.page.locator('.comfy-missing-nodes') @@ -33,7 +33,7 @@ test.describe('Load workflow warning', () => { test('Does not report warning on undo/redo', async ({ comfyPage }) => { await comfyPage.setSetting('Comfy.NodeSearchBoxImpl', 'default') - await comfyPage.loadWorkflow('missing_nodes') + await comfyPage.loadWorkflow('missing/missing_nodes') await comfyPage.closeDialog() // Make a change to the graph @@ -51,7 +51,7 @@ test.describe('Execution error', () => { test('Should display an error message when an execution error occurs', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('execution_error') + await comfyPage.loadWorkflow('nodes/execution_error') await comfyPage.queueButton.click() await comfyPage.nextFrame() @@ -61,7 +61,7 @@ test.describe('Execution error', () => { }) test('Can display Issue Report form', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('execution_error') + await comfyPage.loadWorkflow('nodes/execution_error') await comfyPage.queueButton.click() await comfyPage.nextFrame() @@ -84,7 +84,7 @@ test.describe('Missing models warning', () => { test('Should display a warning when missing models are found', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('missing_models') + await comfyPage.loadWorkflow('missing/missing_models') const missingModelsWarning = comfyPage.page.locator('.comfy-missing-models') await expect(missingModelsWarning).toBeVisible() @@ -97,7 +97,7 @@ test.describe('Missing models warning', () => { comfyPage }) => { // Load workflow that has a node with models metadata at the node level - await comfyPage.loadWorkflow('missing_models_from_node_properties') + await comfyPage.loadWorkflow('missing/missing_models_from_node_properties') const missingModelsWarning = comfyPage.page.locator('.comfy-missing-models') await expect(missingModelsWarning).toBeVisible() @@ -142,7 +142,7 @@ test.describe('Missing models warning', () => { { times: 1 } ) - await comfyPage.loadWorkflow('missing_models') + await comfyPage.loadWorkflow('missing/missing_models') const missingModelsWarning = comfyPage.page.locator('.comfy-missing-models') await expect(missingModelsWarning).not.toBeVisible() @@ -153,7 +153,7 @@ test.describe('Missing models warning', () => { }) => { // This tests the scenario where outdated model metadata exists in the workflow // but the actual selected models (widget values) have changed - await comfyPage.loadWorkflow('model_metadata_widget_mismatch') + await comfyPage.loadWorkflow('missing/model_metadata_widget_mismatch') // The missing models warning should NOT appear const missingModelsWarning = comfyPage.page.locator('.comfy-missing-models') @@ -167,7 +167,7 @@ test.describe('Missing models warning', () => { }) => { // The fake_model.safetensors is served by // https://github.com/Comfy-Org/ComfyUI_devtools/blob/main/__init__.py - await comfyPage.loadWorkflow('missing_models') + await comfyPage.loadWorkflow('missing/missing_models') const missingModelsWarning = comfyPage.page.locator('.comfy-missing-models') await expect(missingModelsWarning).toBeVisible() @@ -190,7 +190,7 @@ test.describe('Missing models warning', () => { 'Comfy.Workflow.ShowMissingModelsWarning', true ) - await comfyPage.loadWorkflow('missing_models') + await comfyPage.loadWorkflow('missing/missing_models') checkbox = comfyPage.page.getByLabel("Don't show this again") closeButton = comfyPage.page.getByLabel('Close') diff --git a/browser_tests/tests/domWidget.spec.ts b/browser_tests/tests/domWidget.spec.ts index 8119a71adf..91d53c4078 100644 --- a/browser_tests/tests/domWidget.spec.ts +++ b/browser_tests/tests/domWidget.spec.ts @@ -4,7 +4,7 @@ import { comfyPageFixture as test } from '../fixtures/ComfyPage' test.describe('DOM Widget', () => { test('Collapsed multiline textarea is not visible', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('collapsed_multiline') + await comfyPage.loadWorkflow('widgets/collapsed_multiline') const textareaWidget = comfyPage.page.locator('.comfy-multiline-input') await expect(textareaWidget).not.toBeVisible() }) diff --git a/browser_tests/tests/graph.spec.ts b/browser_tests/tests/graph.spec.ts index a209ee5ba4..25e166bab8 100644 --- a/browser_tests/tests/graph.spec.ts +++ b/browser_tests/tests/graph.spec.ts @@ -6,7 +6,7 @@ test.describe('Graph', () => { // Should be able to fix link input slot index after swap the input order // Ref: https://github.com/Comfy-Org/ComfyUI_frontend/issues/3348 test('Fix link input slots', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('input_order_swap') + await comfyPage.loadWorkflow('inputs/input_order_swap') expect( await comfyPage.page.evaluate(() => { return window['app'].graph.links.get(1)?.target_slot @@ -15,7 +15,7 @@ test.describe('Graph', () => { }) test('Validate workflow links', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('bad_link') + await comfyPage.loadWorkflow('links/bad_link') await expect(comfyPage.getVisibleToastCount()).resolves.toBe(2) }) }) diff --git a/browser_tests/tests/groupNode.spec.ts b/browser_tests/tests/groupNode.spec.ts index fb282e6a77..41b50224ad 100644 --- a/browser_tests/tests/groupNode.spec.ts +++ b/browser_tests/tests/groupNode.spec.ts @@ -137,7 +137,9 @@ test.describe('Group Node', () => { test('Preserves hidden input configuration when containing duplicate node types', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('group_node_identical_nodes_hidden_inputs') + await comfyPage.loadWorkflow( + 'groupnodes/group_node_identical_nodes_hidden_inputs' + ) await comfyPage.nextFrame() const groupNodeId = 19 @@ -204,7 +206,7 @@ test.describe('Group Node', () => { test('Loads from a workflow using the legacy path separator ("/")', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('legacy_group_node') + await comfyPage.loadWorkflow('groupnodes/legacy_group_node') expect(await comfyPage.getGraphNodesCount()).toBe(1) await expect( comfyPage.page.locator('.comfy-missing-nodes') @@ -213,7 +215,7 @@ test.describe('Group Node', () => { test.describe('Copy and paste', () => { let groupNode: NodeReference | null - const WORKFLOW_NAME = 'group_node_v1.3.3' + const WORKFLOW_NAME = 'groupnodes/group_node_v1.3.3' const GROUP_NODE_CATEGORY = 'group nodes>workflow' const GROUP_NODE_PREFIX = 'workflow>' const GROUP_NODE_NAME = 'group_node' // Node name in given workflow diff --git a/browser_tests/tests/interaction.spec.ts b/browser_tests/tests/interaction.spec.ts index 9341077921..2ddf9e086c 100644 --- a/browser_tests/tests/interaction.spec.ts +++ b/browser_tests/tests/interaction.spec.ts @@ -10,7 +10,7 @@ import { type NodeReference } from '../fixtures/utils/litegraphUtils' test.describe('Item Interaction', () => { test('Can select/delete all items', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('mixed_graph_items') + await comfyPage.loadWorkflow('groups/mixed_graph_items') await comfyPage.canvas.press('Control+a') await expect(comfyPage.canvas).toHaveScreenshot('selected-all.png') await comfyPage.canvas.press('Delete') @@ -18,7 +18,7 @@ test.describe('Item Interaction', () => { }) test('Can pin/unpin items with keyboard shortcut', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('mixed_graph_items') + await comfyPage.loadWorkflow('groups/mixed_graph_items') await comfyPage.canvas.press('Control+a') await comfyPage.canvas.press('KeyP') await comfyPage.nextFrame() @@ -223,7 +223,7 @@ test.describe('Node Interaction', () => { }) test('Link snap to slot', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('snap_to_slot') + await comfyPage.loadWorkflow('links/snap_to_slot') await expect(comfyPage.canvas).toHaveScreenshot('snap_to_slot.png') const outputSlotPos = { @@ -240,7 +240,7 @@ test.describe('Node Interaction', () => { }) test('Can batch move links by drag with shift', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('batch_move_links') + await comfyPage.loadWorkflow('links/batch_move_links') await expect(comfyPage.canvas).toHaveScreenshot('batch_move_links.png') const outputSlot1Pos = { @@ -320,7 +320,7 @@ test.describe('Node Interaction', () => { x: 167, y: 143 } - await comfyPage.loadWorkflow('single_save_image_node') + await comfyPage.loadWorkflow('nodes/single_save_image_node') await comfyPage.canvas.click({ position: textWidgetPos }) @@ -340,7 +340,7 @@ test.describe('Node Interaction', () => { }) test('Can double click node title to edit', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await comfyPage.canvas.dblclick({ position: { x: 50, @@ -356,7 +356,7 @@ test.describe('Node Interaction', () => { test('Double click node body does not trigger edit', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await comfyPage.canvas.dblclick({ position: { x: 50, @@ -381,7 +381,7 @@ test.describe('Node Interaction', () => { }) test('Can fit group to contents', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('oversized_group') + await comfyPage.loadWorkflow('groups/oversized_group') await comfyPage.ctrlA() await comfyPage.nextFrame() await comfyPage.executeCommand('Comfy.Graph.FitGroupToContents') @@ -414,7 +414,7 @@ test.describe('Node Interaction', () => { test.describe('Group Interaction', () => { test('Can double click group title to edit', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_group') + await comfyPage.loadWorkflow('groups/single_group') await comfyPage.canvas.dblclick({ position: { x: 50, @@ -632,21 +632,21 @@ test.describe('Widget Interaction', () => { test.describe('Load workflow', () => { test('Can load workflow with string node id', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('string_node_id') + await comfyPage.loadWorkflow('nodes/string_node_id') await expect(comfyPage.canvas).toHaveScreenshot('string_node_id.png') }) test('Can load workflow with ("STRING",) input node', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('string_input') + await comfyPage.loadWorkflow('inputs/string_input') await expect(comfyPage.canvas).toHaveScreenshot('string_input.png') }) test('Restore workflow on reload (switch workflow)', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await expect(comfyPage.canvas).toHaveScreenshot('single_ksampler.png') await comfyPage.setup({ clearStorage: false }) await expect(comfyPage.canvas).toHaveScreenshot('single_ksampler.png') @@ -655,7 +655,7 @@ test.describe('Load workflow', () => { test('Restore workflow on reload (modify workflow)', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') const node = (await comfyPage.getFirstNodeRef())! await node.click('collapse') // Wait 300ms between 2 clicks so that it is not treated as a double click @@ -734,7 +734,7 @@ test.describe('Load workflow', () => { test('Auto fit view after loading workflow', async ({ comfyPage }) => { await comfyPage.setSetting('Comfy.EnableWorkflowViewRestore', false) - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await expect(comfyPage.canvas).toHaveScreenshot('single_ksampler_fit.png') }) }) @@ -747,10 +747,10 @@ test.describe('Load duplicate workflow', () => { test('A workflow can be loaded multiple times in a row', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await comfyPage.menu.workflowsTab.open() await comfyPage.executeCommand('Comfy.NewBlankWorkflow') - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') expect(await comfyPage.getGraphNodesCount()).toBe(1) }) }) diff --git a/browser_tests/tests/loadWorkflowInMedia.spec.ts b/browser_tests/tests/loadWorkflowInMedia.spec.ts index 1250d33852..92fa8dd9dd 100644 --- a/browser_tests/tests/loadWorkflowInMedia.spec.ts +++ b/browser_tests/tests/loadWorkflowInMedia.spec.ts @@ -22,7 +22,7 @@ test.describe('Load Workflow in Media', () => { test(`Load workflow in ${fileName} (drop from filesystem)`, async ({ comfyPage }) => { - await comfyPage.dragAndDropFile(fileName) + await comfyPage.dragAndDropFile(`workflowInMedia/${fileName}`) await expect(comfyPage.canvas).toHaveScreenshot(`${fileName}.png`) }) }) diff --git a/browser_tests/tests/loadWorkflowInMedia.spec.ts-snapshots/no-workflow-webp-chromium-linux.png b/browser_tests/tests/loadWorkflowInMedia.spec.ts-snapshots/no-workflow-webp-chromium-linux.png index fb45f673e5..4a4bea714c 100644 Binary files a/browser_tests/tests/loadWorkflowInMedia.spec.ts-snapshots/no-workflow-webp-chromium-linux.png and b/browser_tests/tests/loadWorkflowInMedia.spec.ts-snapshots/no-workflow-webp-chromium-linux.png differ diff --git a/browser_tests/tests/nodeBadge.spec.ts b/browser_tests/tests/nodeBadge.spec.ts index bc15465932..984dd6ea1f 100644 --- a/browser_tests/tests/nodeBadge.spec.ts +++ b/browser_tests/tests/nodeBadge.spec.ts @@ -66,7 +66,7 @@ test.describe('Node source badge', () => { Object.values(NodeBadgeMode).forEach(async (mode) => { test(`Shows node badges (${mode})`, async ({ comfyPage }) => { // Execution error workflow has both custom node and core node. - await comfyPage.loadWorkflow('execution_error') + await comfyPage.loadWorkflow('nodes/execution_error') await comfyPage.setSetting('Comfy.NodeBadge.NodeSourceBadgeMode', mode) await comfyPage.setSetting('Comfy.NodeBadge.NodeIdBadgeMode', mode) await comfyPage.nextFrame() diff --git a/browser_tests/tests/nodeDisplay.spec.ts b/browser_tests/tests/nodeDisplay.spec.ts index 1fa1976501..2b76d45427 100644 --- a/browser_tests/tests/nodeDisplay.spec.ts +++ b/browser_tests/tests/nodeDisplay.spec.ts @@ -6,32 +6,32 @@ import { comfyPageFixture as test } from '../fixtures/ComfyPage' // a hollow circle no matter what shape it was defined in the workflow JSON. test.describe('Optional input', () => { test('No shape specified', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('optional_input_no_shape') + await comfyPage.loadWorkflow('inputs/optional_input_no_shape') await expect(comfyPage.canvas).toHaveScreenshot('optional_input.png') }) test('Wrong shape specified', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('optional_input_wrong_shape') + await comfyPage.loadWorkflow('inputs/optional_input_wrong_shape') await expect(comfyPage.canvas).toHaveScreenshot('optional_input.png') }) test('Correct shape specified', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('optional_input_correct_shape') + await comfyPage.loadWorkflow('inputs/optional_input_correct_shape') await expect(comfyPage.canvas).toHaveScreenshot('optional_input.png') }) test('Force input', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('force_input') + await comfyPage.loadWorkflow('inputs/force_input') await expect(comfyPage.canvas).toHaveScreenshot('force_input.png') }) test('Default input', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('default_input') + await comfyPage.loadWorkflow('inputs/default_input') await expect(comfyPage.canvas).toHaveScreenshot('default_input.png') }) test('Only optional inputs', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('only_optional_inputs') + await comfyPage.loadWorkflow('inputs/only_optional_inputs') expect(await comfyPage.getGraphNodesCount()).toBe(1) await expect( comfyPage.page.locator('.comfy-missing-nodes') @@ -43,7 +43,7 @@ test.describe('Optional input', () => { ) }) test('Old workflow with converted input', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('old_workflow_converted_input') + await comfyPage.loadWorkflow('inputs/old_workflow_converted_input') const node = await comfyPage.getNodeRefById('1') const inputs = await node.getProperty('inputs') const vaeInput = inputs.find((w) => w.name === 'vae') @@ -55,25 +55,25 @@ test.describe('Optional input', () => { expect(convertedInput.link).not.toBeNull() }) test('Renamed converted input', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('renamed_converted_widget') + await comfyPage.loadWorkflow('inputs/renamed_converted_widget') const node = await comfyPage.getNodeRefById('3') const inputs = await node.getProperty('inputs') const renamedInput = inputs.find((w) => w.name === 'breadth') expect(renamedInput).toBeUndefined() }) test('slider', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('simple_slider') + await comfyPage.loadWorkflow('inputs/simple_slider') await expect(comfyPage.canvas).toHaveScreenshot('simple_slider.png') }) test('unknown converted widget', async ({ comfyPage }) => { await comfyPage.setSetting('Comfy.Workflow.ShowMissingNodesWarning', false) - await comfyPage.loadWorkflow('missing_nodes_converted_widget') + await comfyPage.loadWorkflow('missing/missing_nodes_converted_widget') await expect(comfyPage.canvas).toHaveScreenshot( 'missing_nodes_converted_widget.png' ) }) test('dynamically added input', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('dynamically_added_input') + await comfyPage.loadWorkflow('inputs/dynamically_added_input') await expect(comfyPage.canvas).toHaveScreenshot( 'dynamically_added_input.png' ) diff --git a/browser_tests/tests/nodeHelp.spec.ts b/browser_tests/tests/nodeHelp.spec.ts index b4e252e778..ced74c903d 100644 --- a/browser_tests/tests/nodeHelp.spec.ts +++ b/browser_tests/tests/nodeHelp.spec.ts @@ -319,7 +319,7 @@ test.describe('Node Help', () => { comfyPage }) => { // First load workflow with custom node - await comfyPage.loadWorkflow('group_node_v1.3.3') + await comfyPage.loadWorkflow('groupnodes/group_node_v1.3.3') // Mock custom node documentation with fallback await comfyPage.page.route( diff --git a/browser_tests/tests/nodeSearchBox.spec.ts b/browser_tests/tests/nodeSearchBox.spec.ts index f455c926a4..3c5e3cbe24 100644 --- a/browser_tests/tests/nodeSearchBox.spec.ts +++ b/browser_tests/tests/nodeSearchBox.spec.ts @@ -16,7 +16,7 @@ test.describe('Node search box', () => { }) test(`Can trigger on group body double click`, async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_group_only') + await comfyPage.loadWorkflow('groups/single_group_only') await comfyPage.page.mouse.dblclick(50, 50, { delay: 5 }) await comfyPage.nextFrame() await expect(comfyPage.searchBox.input).toHaveCount(1) @@ -59,7 +59,7 @@ test.describe('Node search box', () => { }) test('Can auto link batch moved node', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('batch_move_links') + await comfyPage.loadWorkflow('links/batch_move_links') const outputSlot1Pos = { x: 304, @@ -110,7 +110,7 @@ test.describe('Node search box', () => { test('@mobile Can trigger on empty canvas tap', async ({ comfyPage }) => { await comfyPage.closeMenu() - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') const screenCenter = { x: 200, y: 400 diff --git a/browser_tests/tests/noteNode.spec.ts b/browser_tests/tests/noteNode.spec.ts index eda32112fb..0f3d6a3178 100644 --- a/browser_tests/tests/noteNode.spec.ts +++ b/browser_tests/tests/noteNode.spec.ts @@ -4,7 +4,7 @@ import { comfyPageFixture as test } from '../fixtures/ComfyPage' test.describe('Note Node', () => { test('Can load node nodes', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('note_nodes') + await comfyPage.loadWorkflow('nodes/note_nodes') await expect(comfyPage.canvas).toHaveScreenshot('note_nodes.png') }) }) diff --git a/browser_tests/tests/remoteWidgets.spec.ts b/browser_tests/tests/remoteWidgets.spec.ts index 233bda811c..3231f47ee2 100644 --- a/browser_tests/tests/remoteWidgets.spec.ts +++ b/browser_tests/tests/remoteWidgets.spec.ts @@ -89,7 +89,7 @@ test.describe('Remote COMBO Widget', () => { comfyPage }) => { const nodeName = 'Remote Widget Node' - await comfyPage.loadWorkflow('remote_widget') + await comfyPage.loadWorkflow('inputs/remote_widget') await comfyPage.page.waitForTimeout(512) const node = await comfyPage.page.evaluate((name) => { diff --git a/browser_tests/tests/rerouteNode.spec.ts b/browser_tests/tests/rerouteNode.spec.ts index fb39f208e8..89fdf38b29 100644 --- a/browser_tests/tests/rerouteNode.spec.ts +++ b/browser_tests/tests/rerouteNode.spec.ts @@ -15,7 +15,7 @@ test.describe('Reroute Node', () => { test('loads from inserted workflow', async ({ comfyPage }) => { const workflowName = 'single_connected_reroute_node.json' await comfyPage.setupWorkflowsDirectory({ - [workflowName]: workflowName + [workflowName]: 'links/single_connected_reroute_node.json' }) await comfyPage.setup() await comfyPage.menu.topbar.triggerTopbarCommand(['New']) diff --git a/browser_tests/tests/selectionToolbox.spec.ts b/browser_tests/tests/selectionToolbox.spec.ts index 203dd35069..72264e8b34 100644 --- a/browser_tests/tests/selectionToolbox.spec.ts +++ b/browser_tests/tests/selectionToolbox.spec.ts @@ -33,7 +33,7 @@ test.describe('Selection Toolbox', () => { test('shows at correct position when node is pasted', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await comfyPage.selectNodes(['KSampler']) await comfyPage.ctrlC() await comfyPage.page.mouse.move(100, 100) @@ -56,7 +56,7 @@ test.describe('Selection Toolbox', () => { test('hide when select and drag happen at the same time', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') const node = (await comfyPage.getNodeRefsByTitle('KSampler'))[0] const nodePos = await node.getPosition() @@ -103,7 +103,7 @@ test.describe('Selection Toolbox', () => { comfyPage }) => { // A group + a KSampler node - await comfyPage.loadWorkflow('single_group') + await comfyPage.loadWorkflow('groups/single_group') // Select group + node should show bypass button await comfyPage.page.focus('canvas') diff --git a/browser_tests/tests/sidebar/workflows.spec.ts b/browser_tests/tests/sidebar/workflows.spec.ts index 8a700ccdca..658d9bb343 100644 --- a/browser_tests/tests/sidebar/workflows.spec.ts +++ b/browser_tests/tests/sidebar/workflows.spec.ts @@ -74,7 +74,7 @@ test.describe('Workflows sidebar', () => { test('Can open workflow after insert', async ({ comfyPage }) => { await comfyPage.setupWorkflowsDirectory({ - 'workflow1.json': 'single_ksampler.json' + 'workflow1.json': 'nodes/single_ksampler.json' }) const tab = comfyPage.menu.workflowsTab @@ -241,7 +241,7 @@ test.describe('Workflows sidebar', () => { test('Does not report warning when switching between opened workflows', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('missing_nodes') + await comfyPage.loadWorkflow('missing/missing_nodes') await comfyPage.closeDialog() // Load blank workflow diff --git a/browser_tests/tests/subgraph-rename-dialog.spec.ts b/browser_tests/tests/subgraph-rename-dialog.spec.ts index b5c5ff8a98..0bdb9766df 100644 --- a/browser_tests/tests/subgraph-rename-dialog.spec.ts +++ b/browser_tests/tests/subgraph-rename-dialog.spec.ts @@ -20,7 +20,7 @@ test.describe('Subgraph Slot Rename Dialog', () => { test('Shows current slot label (not stale) in rename dialog', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -106,7 +106,7 @@ test.describe('Subgraph Slot Rename Dialog', () => { test('Shows current output slot label in rename dialog', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() diff --git a/browser_tests/tests/subgraph.spec.ts b/browser_tests/tests/subgraph.spec.ts index 6e0427d831..87ea504bb5 100644 --- a/browser_tests/tests/subgraph.spec.ts +++ b/browser_tests/tests/subgraph.spec.ts @@ -52,7 +52,7 @@ test.describe('Subgraph Operations', () => { test.describe('I/O Slot Management', () => { test('Can add input slots to subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -68,7 +68,7 @@ test.describe('Subgraph Operations', () => { }) test('Can add output slots to subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -84,7 +84,7 @@ test.describe('Subgraph Operations', () => { }) test('Can remove input slots from subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -104,7 +104,7 @@ test.describe('Subgraph Operations', () => { }) test('Can remove output slots from subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -124,7 +124,7 @@ test.describe('Subgraph Operations', () => { }) test('Can rename I/O slots', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -157,7 +157,7 @@ test.describe('Subgraph Operations', () => { }) test('Can rename input slots via double-click', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -189,7 +189,7 @@ test.describe('Subgraph Operations', () => { }) test('Can rename output slots via double-click', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -224,7 +224,7 @@ test.describe('Subgraph Operations', () => { test('Right-click context menu still works alongside double-click', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -261,7 +261,7 @@ test.describe('Subgraph Operations', () => { test('Can double-click on slot label text to rename', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -355,7 +355,7 @@ test.describe('Subgraph Operations', () => { }) test('Can delete subgraph node', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') expect(await subgraphNode.exists()).toBe(true) @@ -377,7 +377,7 @@ test.describe('Subgraph Operations', () => { test('Can copy subgraph node by dragging + alt', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') @@ -406,7 +406,7 @@ test.describe('Subgraph Operations', () => { test('Copying subgraph node by dragging + alt creates a new subgraph node with unique type', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') @@ -438,7 +438,7 @@ test.describe('Subgraph Operations', () => { test.describe('Operations Inside Subgraphs', () => { test('Can copy and paste nodes in subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -469,7 +469,7 @@ test.describe('Subgraph Operations', () => { }) test('Can undo and redo operations in subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') const subgraphNode = await comfyPage.getNodeRefById('2') await subgraphNode.navigateIntoSubgraph() @@ -506,7 +506,7 @@ test.describe('Subgraph Operations', () => { test('Breadcrumb updates when subgraph node title is changed', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('nested-subgraph') + await comfyPage.loadWorkflow('subgraphs/nested-subgraph') await comfyPage.nextFrame() const subgraphNode = await comfyPage.getNodeRefById('10') @@ -558,7 +558,9 @@ test.describe('Subgraph Operations', () => { test('DOM widget visibility persists through subgraph navigation', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('subgraph-with-promoted-text-widget') + await comfyPage.loadWorkflow( + 'subgraphs/subgraph-with-promoted-text-widget' + ) await comfyPage.nextFrame() // Verify promoted widget is visible in parent graph @@ -589,7 +591,9 @@ test.describe('Subgraph Operations', () => { test('DOM widget content is preserved through navigation', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('subgraph-with-promoted-text-widget') + await comfyPage.loadWorkflow( + 'subgraphs/subgraph-with-promoted-text-widget' + ) const textarea = comfyPage.page.locator(SELECTORS.domWidget) await textarea.fill(TEST_WIDGET_CONTENT) @@ -610,7 +614,9 @@ test.describe('Subgraph Operations', () => { test('DOM elements are cleaned up when subgraph node is removed', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('subgraph-with-promoted-text-widget') + await comfyPage.loadWorkflow( + 'subgraphs/subgraph-with-promoted-text-widget' + ) const initialCount = await comfyPage.page .locator(SELECTORS.domWidget) @@ -635,7 +641,7 @@ test.describe('Subgraph Operations', () => { // Enable new menu for breadcrumb navigation await comfyPage.setSetting('Comfy.UseNewMenu', 'Top') - const workflowName = 'subgraph-with-promoted-text-widget' + const workflowName = 'subgraphs/subgraph-with-promoted-text-widget' await comfyPage.loadWorkflow(workflowName) const textareaCount = await comfyPage.page @@ -661,8 +667,8 @@ test.describe('Subgraph Operations', () => { // Click breadcrumb to navigate back to parent graph const homeBreadcrumb = comfyPage.page.getByRole('link', { // In the subgraph navigation breadcrumbs, the home/top level - // breadcrumb is just the workflow name - name: workflowName + // breadcrumb is just the workflow name without the folder path + name: 'subgraph-with-promoted-text-widget' }) await homeBreadcrumb.waitFor({ state: 'visible' }) await homeBreadcrumb.click() @@ -680,7 +686,9 @@ test.describe('Subgraph Operations', () => { test('Multiple promoted widgets are handled correctly', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('subgraph-with-multiple-promoted-widgets') + await comfyPage.loadWorkflow( + 'subgraphs/subgraph-with-multiple-promoted-widgets' + ) const parentCount = await comfyPage.page .locator(SELECTORS.domWidget) @@ -711,7 +719,7 @@ test.describe('Subgraph Operations', () => { }) test('Navigation hotkey can be customized', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') await comfyPage.nextFrame() // Change the Exit Subgraph keybinding from Escape to Alt+Q @@ -767,7 +775,7 @@ test.describe('Subgraph Operations', () => { test('Escape prioritizes closing dialogs over exiting subgraph', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('basic-subgraph') + await comfyPage.loadWorkflow('subgraphs/basic-subgraph') await comfyPage.nextFrame() const subgraphNode = await comfyPage.getNodeRefById('2') diff --git a/browser_tests/tests/widget.spec.ts b/browser_tests/tests/widget.spec.ts index 2bb5d2ee3b..0d8978c79d 100644 --- a/browser_tests/tests/widget.spec.ts +++ b/browser_tests/tests/widget.spec.ts @@ -38,7 +38,7 @@ test.describe('Combo text widget', () => { .options.values }) - await comfyPage.loadWorkflow('optional_combo_input') + await comfyPage.loadWorkflow('inputs/optional_combo_input') const initialComboValues = await getComboValues() // Focus canvas @@ -57,7 +57,7 @@ test.describe('Combo text widget', () => { test('Should refresh combo values of nodes with v2 combo input spec', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('node_with_v2_combo_input') + await comfyPage.loadWorkflow('inputs/node_with_v2_combo_input') // click canvas to focus await comfyPage.page.mouse.click(400, 300) // press R to trigger refresh @@ -90,7 +90,7 @@ test.describe('Boolean widget', () => { test.describe('Slider widget', () => { test('Can drag adjust value', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('simple_slider') + await comfyPage.loadWorkflow('inputs/simple_slider') await comfyPage.page.waitForTimeout(300) const node = (await comfyPage.getFirstNodeRef())! const widget = await node.getWidget(0) @@ -136,7 +136,7 @@ test.describe('Dynamic widget manipulation', () => { test('Auto expand node when widget is added dynamically', async ({ comfyPage }) => { - await comfyPage.loadWorkflow('single_ksampler') + await comfyPage.loadWorkflow('nodes/single_ksampler') await comfyPage.page.waitForTimeout(300) await comfyPage.page.evaluate(() => {