work on fixing group drag
This commit is contained in:
@@ -192,6 +192,73 @@ test('serializeExecutionGraph allows a singleton ImageDemo graph so previews can
|
||||
});
|
||||
});
|
||||
|
||||
test('serializeExecutionGraph ignores group shells and resolves collapsed proxy edges back to child endpoints', () => {
|
||||
const nodes = [
|
||||
{
|
||||
id: '1',
|
||||
data: {
|
||||
className: 'Image',
|
||||
definition: {
|
||||
input: { required: { filename: ['FILE_PICKER', {}] }, optional: {} },
|
||||
manual_trigger: false,
|
||||
},
|
||||
widgetValues: { filename: 'scan.gwy' },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: '10',
|
||||
data: {
|
||||
className: 'Group',
|
||||
definition: null,
|
||||
widgetValues: {},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
parentId: '10',
|
||||
hidden: true,
|
||||
data: {
|
||||
className: 'PreviewImage',
|
||||
definition: {
|
||||
input: { required: { field: ['DATA_FIELD', {}] }, optional: {} },
|
||||
manual_trigger: false,
|
||||
},
|
||||
widgetValues: {},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const edges = [
|
||||
{
|
||||
source: '1',
|
||||
sourceHandle: 'output::0::DATA_FIELD',
|
||||
target: '10',
|
||||
targetHandle: 'group-proxy::in::2::DATA_FIELD::input%3A%3Afield%3A%3ADATA_FIELD',
|
||||
data: {
|
||||
groupProxyOwner: '10',
|
||||
groupProxyOriginal: {
|
||||
target: '2',
|
||||
targetHandle: 'input::field::DATA_FIELD',
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const prompt = serializeExecutionGraph(nodes, edges);
|
||||
|
||||
assert.deepEqual(prompt, {
|
||||
'1': {
|
||||
class_type: 'Image',
|
||||
inputs: { filename: 'scan.gwy' },
|
||||
},
|
||||
'2': {
|
||||
class_type: 'PreviewImage',
|
||||
inputs: { field: ['1', 0] },
|
||||
},
|
||||
});
|
||||
assert.equal('10' in prompt, false);
|
||||
});
|
||||
|
||||
test('getAutoRunnableNodes ignores disconnected nodes when deciding what can auto-run', () => {
|
||||
const nodes = [
|
||||
{ id: '1', data: { definition: {}, widgetValues: {} } },
|
||||
|
||||
@@ -265,3 +265,28 @@ test('clipboard payload deep-copies local widget and runtime fields', () => {
|
||||
assert.equal(payload.nodes[0].data.widgetValues.markup_shapes[0].points[0], 0.1);
|
||||
assert.equal(payload.nodes[0].data.runtimeValues.camera.azimuth, 15);
|
||||
});
|
||||
|
||||
test('clipboard payload preserves wrapper class names for group shells', () => {
|
||||
const payload = buildNodeClipboardPayloadForIds(
|
||||
[
|
||||
{
|
||||
id: '50',
|
||||
type: 'custom',
|
||||
className: 'group-shell',
|
||||
position: { x: 0, y: 0 },
|
||||
data: {
|
||||
label: 'group',
|
||||
className: 'Group',
|
||||
widgetValues: {},
|
||||
},
|
||||
},
|
||||
],
|
||||
[],
|
||||
['50'],
|
||||
);
|
||||
|
||||
const instantiated = instantiateNodeClipboardPayload(payload, {}, 80);
|
||||
|
||||
assert.equal(payload.nodes[0].className, 'group-shell');
|
||||
assert.equal(instantiated.nodes[0].className, 'group-shell');
|
||||
});
|
||||
|
||||
@@ -226,3 +226,26 @@ test('hydrateWorkflowState clears saved folder selections on shared workflows',
|
||||
assert.deepEqual(hydrated.nodes[0].data.definition.output, ['PATH']);
|
||||
assert.deepEqual(hydrated.nodes[0].data.definition.output_name, ['path']);
|
||||
});
|
||||
|
||||
test('workflow serialization preserves wrapper class names for group shells', () => {
|
||||
const nodes = [
|
||||
{
|
||||
id: '31',
|
||||
type: 'custom',
|
||||
className: 'group-shell',
|
||||
position: { x: 5, y: 15 },
|
||||
style: { width: 420, height: 260 },
|
||||
data: {
|
||||
label: 'group',
|
||||
className: 'Group',
|
||||
widgetValues: {},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const serialized = serializeWorkflowState(nodes, []);
|
||||
const hydrated = hydrateWorkflowState(serialized, {});
|
||||
|
||||
assert.equal(serialized.nodes[0].className, 'group-shell');
|
||||
assert.equal(hydrated.nodes[0].className, 'group-shell');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user