xiamidaxia 766fdc1597
fix: flowDocument fromJSON will reload the node json data (#240)
* fix: flowDocument fromJSON update node data

* feat: getNodeForm add updateFormValues
2025-05-16 12:25:26 +00:00

62 lines
2.2 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { FlowDocument, FlowNodeFormData } from '@flowgram.ai/editor';
import { baseWithDataMock, baseWithDataMock2, formMock, formMock2 } from '../__mocks__/flow.mock';
import { createContainer } from './create-container';
describe('fixed-layout-preset', () => {
let flowDocument: FlowDocument;
beforeEach(() => {
const container = createContainer({});
flowDocument = container.get(FlowDocument);
});
it('fromJSON and toJSON', () => {
flowDocument.fromJSON(baseWithDataMock);
expect(flowDocument.toJSON()).toEqual(baseWithDataMock);
// reload data
flowDocument.fromJSON(baseWithDataMock2);
expect(flowDocument.toJSON()).toEqual(baseWithDataMock2);
});
it('custom fromNodeJSON and toNodeJSON', () => {
const container = createContainer({
fromNodeJSON: (node, json, isFirstCreate) => {
if (!json.data) {
json.data = {};
}
json.data = { ...json.data, isFirstCreate };
return json;
},
toNodeJSON(node, json) {
json.data.runningTimes = (json.data.runningTimes || 0) + 1;
return json;
},
});
container.get(FlowDocument).fromJSON(baseWithDataMock);
expect(container.get(FlowDocument).toJSON()).toMatchSnapshot();
container.get(FlowDocument).fromJSON(baseWithDataMock2);
expect(container.get(FlowDocument).toJSON()).toMatchSnapshot();
});
it('nodeEngine(v2) toJSON', async () => {
const container = createContainer({
nodeEngine: {},
nodeRegistries: [
{
type: 'noop',
formMeta: {
render: () => undefined,
},
},
],
});
flowDocument = container.get(FlowDocument);
flowDocument.fromJSON(formMock);
expect(flowDocument.toJSON()).toEqual(formMock);
const { formModel } = flowDocument.getNode('noop_0').getData(FlowNodeFormData);
expect(formModel.getFormItemByPath('title').value).toEqual('noop title');
formModel.getFormItemByPath('title').value = 'noop title2';
expect(flowDocument.toJSON()).toMatchSnapshot();
flowDocument.fromJSON(formMock2);
expect(flowDocument.toJSON()).toEqual(formMock2);
});
});