Files
ComfyUI_frontend/browser_tests/assets/subgraphs/subgraph-promoted-linked.json
jaeone94 5bddd078d3 test: add unit and E2E tests for promoted widget identity and link position
Unit tests:
- widgetUtil: verify rename does not propagate to interior nodes
- promotedWidgetView: identityName vs label separation, fixture-based
  configure round-trip using renamedPromotedLabels fixture
- useGraphNodeManager: promotedLabel field for promoted/regular widgets

E2E tests (subgraphPromotedWidgetLabel):
- Rename non-propagation: interior KSampler widget names unchanged
- Fix existing tests to use widget.label instead of widget.name

E2E tests (subgraphPromotedSlotLinks, new):
- Vue-to-Legacy switch: link endpoints at slot position, not header
- Legacy-to-Vue switch: link endpoints converge after debounced reset
- Draft restore: promoted widgets visible after draft reload
- Screenshot assertions for all three scenarios

New fixtures:
- renamedPromotedLabels.ts: TS fixture for unit test configure()
- subgraph-promoted-linked.json: E2E fixture with external link
2026-03-23 23:01:07 +09:00

238 lines
5.3 KiB
JSON

{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"revision": 0,
"last_node_id": 3,
"last_link_id": 1,
"nodes": [
{
"id": 2,
"type": "e5fb1765-0001-4548-801a-5aead34d879e",
"pos": [600, 300],
"size": [400, 200],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"name": "positive",
"type": "CONDITIONING",
"link": null
},
{
"label": "my_seed",
"name": "seed",
"type": "INT",
"widget": { "name": "seed" },
"link": 1
},
{
"label": "num_steps",
"name": "steps",
"type": "INT",
"widget": { "name": "steps" },
"link": null
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": null
}
],
"properties": {
"proxyWidgets": [
["1", "seed"],
["1", "steps"]
]
},
"widgets_values": []
},
{
"id": 3,
"type": "PrimitiveNode",
"pos": [200, 350],
"size": [210, 82],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "INT",
"type": "INT",
"links": [1]
}
],
"title": "Seed Source",
"properties": {
"Run widget replace on values": false
},
"widgets_values": [42, "fixed"]
}
],
"links": [[1, 3, 0, 2, 1, "INT"]],
"groups": [],
"definitions": {
"subgraphs": [
{
"id": "e5fb1765-0001-4548-801a-5aead34d879e",
"version": 1,
"state": {
"lastGroupId": 0,
"lastNodeId": 2,
"lastLinkId": 6,
"lastRerouteId": 0
},
"revision": 0,
"config": {},
"name": "Renamed Labels Subgraph",
"inputNode": {
"id": -10,
"bounding": [200, 300, 120, 100]
},
"outputNode": {
"id": -20,
"bounding": [900, 400, 120, 60]
},
"inputs": [
{
"id": "slot-positive",
"name": "positive",
"type": "CONDITIONING",
"linkIds": [1],
"pos": [220, 320]
},
{
"id": "slot-seed",
"name": "seed",
"type": "INT",
"linkIds": [3],
"label": "my_seed",
"pos": [220, 340]
},
{
"id": "slot-steps",
"name": "steps",
"type": "INT",
"linkIds": [4],
"label": "num_steps",
"pos": [220, 360]
}
],
"outputs": [
{
"id": "slot-latent-out",
"name": "LATENT",
"type": "LATENT",
"linkIds": [2],
"pos": [920, 420]
}
],
"widgets": [],
"nodes": [
{
"id": 1,
"type": "KSampler",
"pos": [500, 200],
"size": [270, 262],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": null
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 1
},
{
"name": "negative",
"type": "CONDITIONING",
"link": null
},
{
"name": "latent_image",
"type": "LATENT",
"link": null
},
{
"name": "seed",
"type": "INT",
"widget": { "name": "seed" },
"link": 3
},
{
"name": "steps",
"type": "INT",
"widget": { "name": "steps" },
"link": 4
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [2]
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [0, "randomize", 20, 8, "euler", "simple", 1]
}
],
"groups": [],
"links": [
{
"id": 1,
"origin_id": -10,
"origin_slot": 0,
"target_id": 1,
"target_slot": 1,
"type": "CONDITIONING"
},
{
"id": 2,
"origin_id": 1,
"origin_slot": 0,
"target_id": -20,
"target_slot": 0,
"type": "LATENT"
},
{
"id": 3,
"origin_id": -10,
"origin_slot": 1,
"target_id": 1,
"target_slot": 4,
"type": "INT"
},
{
"id": 4,
"origin_id": -10,
"origin_slot": 2,
"target_id": 1,
"target_slot": 5,
"type": "INT"
}
],
"extra": {}
}
]
},
"config": {},
"extra": {
"ds": {
"scale": 1,
"offset": [0, 0]
},
"frontendVersion": "1.41.21"
},
"version": 0.4
}