|
@@ -6,7 +6,7 @@ import { FormApi } from '../src/form-api';
|
|
|
vi.mock('@vben-core/shared/utils', () => ({
|
|
|
bindMethods: vi.fn(),
|
|
|
createMerge: vi.fn((mergeFn) => {
|
|
|
- return (stateOrFn, prev) => {
|
|
|
+ return (stateOrFn: any, prev: any) => {
|
|
|
mergeFn(prev, 'key', stateOrFn);
|
|
|
return { ...prev, ...stateOrFn };
|
|
|
};
|
|
@@ -144,3 +144,64 @@ describe('formApi', () => {
|
|
|
expect(isValid).toBe(true);
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+describe('updateSchema', () => {
|
|
|
+ let instance: FormApi;
|
|
|
+
|
|
|
+ beforeEach(() => {
|
|
|
+ instance = new FormApi();
|
|
|
+ instance.state = {
|
|
|
+ schema: [
|
|
|
+ { component: 'text', fieldName: 'name' },
|
|
|
+ { component: 'number', fieldName: 'age', label: 'Age' },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should update the schema correctly when fieldName matches', () => {
|
|
|
+ const newSchema = [
|
|
|
+ { component: 'text', fieldName: 'name' },
|
|
|
+ { component: 'number', fieldName: 'age', label: 'Age' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ instance.updateSchema(newSchema);
|
|
|
+
|
|
|
+ expect(instance.state?.schema?.[0]?.component).toBe('text');
|
|
|
+ expect(instance.state?.schema?.[1]?.label).toBe('Age');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should log an error if fieldName is missing in some items', () => {
|
|
|
+ const newSchema: any[] = [
|
|
|
+ { component: 'textarea', fieldName: 'name' },
|
|
|
+ { component: 'number' },
|
|
|
+ ];
|
|
|
+
|
|
|
+ const consoleErrorSpy = vi
|
|
|
+ .spyOn(console, 'error')
|
|
|
+ .mockImplementation(() => {});
|
|
|
+
|
|
|
+ instance.updateSchema(newSchema);
|
|
|
+
|
|
|
+ expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
|
+ 'All children of the form Schema array that need to be updated must contain the `field` field',
|
|
|
+ );
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should not update schema if fieldName does not match', () => {
|
|
|
+ const newSchema = [{ component: 'textarea', fieldName: 'unknown' }];
|
|
|
+
|
|
|
+ instance.updateSchema(newSchema);
|
|
|
+
|
|
|
+ expect(instance.state?.schema?.[0]?.component).toBe('text');
|
|
|
+ expect(instance.state?.schema?.[1]?.component).toBe('number');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should not update schema if updatedMap is empty', () => {
|
|
|
+ const newSchema: any[] = [{ component: 'textarea' }];
|
|
|
+
|
|
|
+ instance.updateSchema(newSchema);
|
|
|
+
|
|
|
+ expect(instance.state?.schema?.[0]?.component).toBe('text');
|
|
|
+ expect(instance.state?.schema?.[1]?.component).toBe('number');
|
|
|
+ });
|
|
|
+});
|