diff --git a/tests-ui/tests/widgets/proxyWidget.test.ts b/tests-ui/tests/widgets/proxyWidget.test.ts index 3b14d65f2..956c66637 100644 --- a/tests-ui/tests/widgets/proxyWidget.test.ts +++ b/tests-ui/tests/widgets/proxyWidget.test.ts @@ -2,7 +2,7 @@ import { describe, expect, test, vi } from 'vitest' //import { ComponentWidgetImpl, DOMWidgetImpl } from '@/scripts/domWidget' -import { LGraphNode } from '@/lib/litegraph/src/litegraph' +import { LGraphNode, type SubgraphNode } from '@/lib/litegraph/src/litegraph' import type { IBaseWidget } from '@/lib/litegraph/src/types/widgets.ts' import '@/scripts/proxyWidget' @@ -23,32 +23,71 @@ function testWidget(nodeId: string | number, widgetName: string): IBaseWidget { _overlay: { isProxyWidget: true, nodeId: `${nodeId}`, widgetName } } as unknown as IBaseWidget } +function setupSubgraph( + innerNodeCount: number = 0 +): [SubgraphNode, LGraphNode[]] { + const subgraph = createTestSubgraph() + const subgraphNode = createTestSubgraphNode(subgraph) + subgraphNode._internalConfigureAfterSlots() + const graph = subgraphNode.graph + graph.add(subgraphNode) + const innerNodes = [] + for (let i = 0; i < innerNodeCount; i++) { + const innerNode = new LGraphNode(`InnerNode${i}`) + subgraph.add(innerNode) + innerNodes.push(innerNode) + } + return [subgraphNode, innerNodes] +} describe('Subgraph proxyWidgets', () => { test('Can add simple widget', () => { - const subgraph = createTestSubgraph() - const subgraphNode = createTestSubgraphNode(subgraph) - subgraphNode._internalConfigureAfterSlots() - const graph = subgraphNode.graph - graph.add(subgraphNode) - const innerNode = new LGraphNode('test-node') - subgraph.add(innerNode) - innerNode.addWidget('text', 'stringWidget', 'value', () => {}) + const [subgraphNode, innerNodes] = setupSubgraph(1) + innerNodes[0].addWidget('text', 'stringWidget', 'value', () => {}) subgraphNode.properties.proxyWidgets = JSON.stringify([ ['1', 'stringWidget'] ]) expect(subgraphNode.widgets.length).toBe(1) }) test('Can read existing widget', () => { - const subgraph = createTestSubgraph() - const subgraphNode = createTestSubgraphNode(subgraph) - subgraphNode._internalConfigureAfterSlots() - const graph = subgraphNode.graph - graph.add(subgraphNode) + const [subgraphNode] = setupSubgraph() subgraphNode.widgets = [testWidget(5, 'testWidget')] - expect(subgraphNode.properties.proxyWidgets).toBe( JSON.stringify([['5', 'testWidget']]) ) }) + test('Can add multiple widgets with same name', () => { + const [subgraphNode, innerNodes] = setupSubgraph(2) + for (const innerNode of innerNodes) + innerNode.addWidget('text', 'stringWidget', 'value', () => {}) + subgraphNode.properties.proxyWidgets = JSON.stringify([ + ['1', 'stringWidget'], + ['2', 'stringWidget'] + ]) + expect(subgraphNode.widgets.length).toBe(2) + }) + test('Will not modify existing widgets', () => { + const [subgraphNode, innerNodes] = setupSubgraph(1) + innerNodes[0].addWidget('text', 'stringWidget', 'value', () => {}) + subgraphNode.addWidget('text', 'stringWidget', 'value', () => {}) + subgraphNode.properties.proxyWidgets = JSON.stringify([ + ['1', 'stringWidget'] + ]) + expect(subgraphNode.widgets.length).toBe(2) + subgraphNode.properties.proxyWidgets = JSON.stringify([]) + expect(subgraphNode.widgets.length).toBe(1) + }) + test('Will mirror changes to value', () => { + const [subgraphNode, innerNodes] = setupSubgraph(1) + innerNodes[0].addWidget('text', 'stringWidget', 'value', () => {}) + subgraphNode.properties.proxyWidgets = JSON.stringify([ + ['1', 'stringWidget'] + ]) + expect(subgraphNode.widgets.length).toBe(1) + expect(subgraphNode.widgets![0].value).toBe('value') + innerNodes[0].widgets![0].value = 'test' + expect(subgraphNode.widgets![0].value).toBe('test') + subgraphNode.widgets[0].value = 'test2' + expect(innerNodes[0].widgets![0].value).toBe('test2') + }) })