fixed-layout-preset.test.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { describe, it, expect, beforeEach } from 'vitest';
  6. import { FlowDocument, FlowNodeFormData } from '@flowgram.ai/editor';
  7. import { baseWithDataMock, baseWithDataMock2, formMock, formMock2 } from '../__mocks__/flow.mock';
  8. import { createContainer } from './create-container';
  9. describe('fixed-layout-preset', () => {
  10. let flowDocument: FlowDocument;
  11. beforeEach(() => {
  12. const container = createContainer({});
  13. flowDocument = container.get(FlowDocument);
  14. });
  15. it('fromJSON and toJSON', () => {
  16. flowDocument.fromJSON(baseWithDataMock);
  17. expect(flowDocument.toJSON()).toEqual(baseWithDataMock);
  18. // reload data
  19. flowDocument.fromJSON(baseWithDataMock2);
  20. expect(flowDocument.toJSON()).toEqual(baseWithDataMock2);
  21. });
  22. it('custom fromNodeJSON and toNodeJSON', () => {
  23. const container = createContainer({
  24. fromNodeJSON: (node, json, isFirstCreate) => {
  25. if (!json.data) {
  26. json.data = {};
  27. }
  28. json.data = { ...json.data, isFirstCreate };
  29. return json;
  30. },
  31. toNodeJSON(node, json) {
  32. json.data.runningTimes = (json.data.runningTimes || 0) + 1;
  33. return json;
  34. },
  35. });
  36. container.get(FlowDocument).fromJSON(baseWithDataMock);
  37. expect(container.get(FlowDocument).toJSON()).toMatchSnapshot();
  38. container.get(FlowDocument).fromJSON(baseWithDataMock2);
  39. expect(container.get(FlowDocument).toJSON()).toMatchSnapshot();
  40. });
  41. it('nodeEngine(v2) toJSON', async () => {
  42. const container = createContainer({
  43. nodeEngine: {},
  44. nodeRegistries: [
  45. {
  46. type: 'noop',
  47. formMeta: {
  48. render: () => undefined,
  49. },
  50. },
  51. ],
  52. });
  53. flowDocument = container.get(FlowDocument);
  54. flowDocument.fromJSON(formMock);
  55. expect(flowDocument.toJSON()).toEqual(formMock);
  56. const { formModel } = flowDocument.getNode('noop_0').getData(FlowNodeFormData);
  57. expect(formModel.getFormItemByPath('title').value).toEqual('noop title');
  58. formModel.getFormItemByPath('title').value = 'noop title2';
  59. expect(flowDocument.toJSON()).toMatchSnapshot();
  60. flowDocument.fromJSON(formMock2);
  61. expect(flowDocument.toJSON()).toEqual(formMock2);
  62. });
  63. });