dragooncjw d7bdf8a078 feat: init flowgram.ai
Co-Authored-By: xiamidaxia <xiamidaxia@icloud.com>
2025-02-21 16:26:12 +08:00

89 lines
2.7 KiB
TypeScript

import { beforeEach, describe, it, expect, vi } from 'vitest';
import { FieldArrayModel, FormModel } from '@flowgram.ai/form';
import { HistoryService } from '@flowgram.ai/history';
import * as utils from '../src/utils';
import { createContainer } from './create-container';
function delay(timeout: number) {}
describe('form', () => {
let formModel: FormModel;
let historyService: HistoryService;
beforeEach(() => {
const container = createContainer();
formModel = container.formModel;
historyService = container.historyService;
vi.spyOn(utils, 'getFormModelV2').mockImplementation(() => formModel as any);
vi.useFakeTimers();
});
it('object set', async () => {
const obj = formModel.createField('obj');
const fieldA = formModel.createField('obj.a');
fieldA.value = 1;
vi.advanceTimersByTime(500);
fieldA.value = 2;
obj.value = { a: 3 };
await historyService.undo();
expect(obj.value).toEqual({ a: 1 });
await historyService.redo();
expect(obj.value).toEqual({ a: 3 });
});
it('array delete', async () => {
formModel.createFieldArray('arr');
const arrField = formModel.getField<FieldArrayModel>('arr')!;
expect(arrField.value).toEqual(undefined);
arrField.value = ['a', 'b', 'c'];
expect(arrField.value).toEqual(['a', 'b', 'c']);
vi.advanceTimersByTime(500);
arrField.delete(1);
expect(arrField.value).toEqual(['a', 'c']);
await historyService.undo();
expect(arrField.value).toEqual(['a', 'b', 'c']);
await historyService.redo();
expect(arrField.value).toEqual(['a', 'c']);
});
it('array append', async () => {
formModel.createFieldArray('arr');
const arrField = formModel.getField<FieldArrayModel>('arr')!;
arrField.value = ['a'];
expect(arrField.value).toEqual(['a']);
await historyService.undo();
expect(arrField.value).toEqual(undefined);
await historyService.redo();
expect(arrField.value).toEqual(['a']);
vi.advanceTimersByTime(500);
arrField.append('b');
expect(arrField.value).toEqual(['a', 'b']);
await historyService.undo();
expect(arrField.value).toEqual(['a']);
await historyService.redo();
expect(arrField.value).toEqual(['a', 'b']);
});
it('array set', async () => {
formModel.createFieldArray('arr');
const arrField = formModel.getField<FieldArrayModel>('arr')!;
arrField.value = ['a'];
expect(arrField.value).toEqual(['a']);
vi.advanceTimersByTime(500);
formModel.setValueIn('arr.0', undefined);
expect(arrField.value).toEqual([undefined]);
await historyService.undo();
expect(arrField.value).toEqual(['a']);
await historyService.redo();
expect(arrField.value).toEqual([undefined]);
});
});