diff --git a/browser_tests/assets/primitive/primitive_combo_sampler_name.json b/browser_tests/assets/primitive/primitive_combo_sampler_name.json new file mode 100644 index 0000000000..b91acf97b0 --- /dev/null +++ b/browser_tests/assets/primitive/primitive_combo_sampler_name.json @@ -0,0 +1,58 @@ +{ + "last_node_id": 2, + "last_link_id": 1, + "nodes": [ + { + "id": 2, + "type": "KSampler", + "pos": [521, 41], + "size": [315, 262], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { "name": "model", "type": "MODEL", "link": null }, + { "name": "positive", "type": "CONDITIONING", "link": null }, + { "name": "negative", "type": "CONDITIONING", "link": null }, + { "name": "latent_image", "type": "LATENT", "link": null }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 1, + "widget": { "name": "sampler_name" } + } + ], + "outputs": [ + { "name": "LATENT", "type": "LATENT", "links": null, "shape": 3 } + ], + "properties": { "Node name for S&R": "KSampler" }, + "widgets_values": [0, "randomize", 20, 8, "euler", "normal", 1] + }, + { + "id": 1, + "type": "PrimitiveNode", + "pos": [15, 46], + "size": [400, 110], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [1], + "slot_index": 0, + "widget": { "name": "sampler_name" } + } + ], + "properties": { "Run widget replace on values": false }, + "widgets_values": ["euler", "fixed"] + } + ], + "links": [[1, 1, 0, 2, 4, "COMBO"]], + "groups": [], + "config": {}, + "extra": { "ds": { "scale": 1, "offset": [0, 0] } }, + "version": 0.4 +} diff --git a/browser_tests/tests/primitiveNode.spec.ts b/browser_tests/tests/primitiveNode.spec.ts index a1eb77042f..395e00b63f 100644 --- a/browser_tests/tests/primitiveNode.spec.ts +++ b/browser_tests/tests/primitiveNode.spec.ts @@ -59,6 +59,54 @@ test.describe('Primitive Node', { tag: ['@screenshot', '@node'] }, () => { ) }) + test('Preserves combo options on the primitive after pressing R to refresh', async ({ + comfyPage + }) => { + const getPrimitiveComboState = async () => + comfyPage.page.evaluate(() => { + const primitive = window.app!.graph!.nodes.find( + (node) => node.type === 'PrimitiveNode' + ) + const widget = primitive?.widgets?.[0] + const values = widget?.options?.values + return { + isArray: Array.isArray(values), + length: Array.isArray(values) ? values.length : 0, + includesEuler: Array.isArray(values) + ? values.includes('euler') + : false, + value: widget?.value + } + }) + + await comfyPage.workflow.loadWorkflow( + 'primitive/primitive_combo_sampler_name' + ) + + await expect + .poll(() => getPrimitiveComboState()) + .toMatchObject({ + isArray: true, + includesEuler: true, + value: 'euler' + }) + const before = await getPrimitiveComboState() + expect(before.length).toBeGreaterThan(0) + + await comfyPage.canvas.click() + await comfyPage.page.keyboard.press('r') + + await expect + .poll(() => getPrimitiveComboState()) + .toMatchObject({ + isArray: true, + includesEuler: true, + value: 'euler' + }) + const after = await getPrimitiveComboState() + expect(after.length).toBeGreaterThan(0) + }) + test('Report missing nodes when connect to missing node', async ({ comfyPage }) => {