form.test.ts 2.7 KB

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