form.test.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { beforeEach, describe, it, expect, vi } from 'vitest';
  6. import { FieldArrayModel, FormModel } from '@flowgram.ai/form';
  7. import { HistoryService } from '@flowgram.ai/history';
  8. import * as utils from '../src/utils';
  9. import { createContainer } from './create-container';
  10. function delay(timeout: number) {}
  11. describe('form', () => {
  12. let formModel: FormModel;
  13. let historyService: HistoryService;
  14. beforeEach(() => {
  15. const container = createContainer();
  16. formModel = container.formModel;
  17. historyService = container.historyService;
  18. vi.spyOn(utils, 'getFormModelV2').mockImplementation(() => formModel as any);
  19. vi.useFakeTimers();
  20. });
  21. it('object set', async () => {
  22. const obj = formModel.createField('obj');
  23. const fieldA = formModel.createField('obj.a');
  24. fieldA.value = 1;
  25. vi.advanceTimersByTime(500);
  26. fieldA.value = 2;
  27. obj.value = { a: 3 };
  28. await historyService.undo();
  29. expect(obj.value).toEqual({ a: 1 });
  30. await historyService.redo();
  31. expect(obj.value).toEqual({ a: 3 });
  32. });
  33. it('array delete', async () => {
  34. formModel.createFieldArray('arr');
  35. const arrField = formModel.getField<FieldArrayModel>('arr')!;
  36. expect(arrField.value).toEqual(undefined);
  37. arrField.value = ['a', 'b', 'c'];
  38. expect(arrField.value).toEqual(['a', 'b', 'c']);
  39. vi.advanceTimersByTime(500);
  40. arrField.delete(1);
  41. expect(arrField.value).toEqual(['a', 'c']);
  42. await historyService.undo();
  43. expect(arrField.value).toEqual(['a', 'b', 'c']);
  44. await historyService.redo();
  45. expect(arrField.value).toEqual(['a', 'c']);
  46. });
  47. it('array append', async () => {
  48. formModel.createFieldArray('arr');
  49. const arrField = formModel.getField<FieldArrayModel>('arr')!;
  50. arrField.value = ['a'];
  51. expect(arrField.value).toEqual(['a']);
  52. await historyService.undo();
  53. expect(arrField.value).toEqual(undefined);
  54. await historyService.redo();
  55. expect(arrField.value).toEqual(['a']);
  56. vi.advanceTimersByTime(500);
  57. arrField.append('b');
  58. expect(arrField.value).toEqual(['a', 'b']);
  59. await historyService.undo();
  60. expect(arrField.value).toEqual(['a']);
  61. await historyService.redo();
  62. expect(arrField.value).toEqual(['a', 'b']);
  63. });
  64. it('array set', async () => {
  65. formModel.createFieldArray('arr');
  66. const arrField = formModel.getField<FieldArrayModel>('arr')!;
  67. arrField.value = ['a'];
  68. expect(arrField.value).toEqual(['a']);
  69. vi.advanceTimersByTime(500);
  70. formModel.setValueIn('arr.0', undefined);
  71. expect(arrField.value).toEqual([undefined]);
  72. await historyService.undo();
  73. expect(arrField.value).toEqual(['a']);
  74. await historyService.redo();
  75. expect(arrField.value).toEqual([undefined]);
  76. });
  77. });