lowcode-engine/packages/engine/tests/inner-plugins/default-command.test.ts

111 lines
5.5 KiB
TypeScript

import { checkPropTypes } from '@alilc/lowcode-utils/src/check-prop-types';
import { nodeSchemaPropType } from '../../src/inner-plugins/default-command';
describe('nodeSchemaPropType', () => {
const componentName = 'NodeComponent';
const getPropType = (name: string) => nodeSchemaPropType.value.find(d => d.name === name)?.propType;
it('should validate the id as a string', () => {
const validId = 'node1';
const invalidId = 123; // Not a string
expect(checkPropTypes(validId, 'id', getPropType('id'), componentName)).toBe(true);
expect(checkPropTypes(invalidId, 'id', getPropType('id'), componentName)).toBe(false);
// isRequired
expect(checkPropTypes(undefined, 'id', getPropType('id'), componentName)).toBe(false);
});
it('should validate the componentName as a string', () => {
const validComponentName = 'Button';
const invalidComponentName = false; // Not a string
expect(checkPropTypes(validComponentName, 'componentName', getPropType('componentName'), componentName)).toBe(true);
expect(checkPropTypes(invalidComponentName, 'componentName', getPropType('componentName'), componentName)).toBe(false);
// isRequired
expect(checkPropTypes(undefined, 'componentName', getPropType('componentName'), componentName)).toBe(false);
});
it('should validate the props as an object', () => {
const validProps = { key: 'value' };
const invalidProps = 'Not an object'; // Not an object
expect(checkPropTypes(validProps, 'props', getPropType('props'), componentName)).toBe(true);
expect(checkPropTypes(invalidProps, 'props', getPropType('props'), componentName)).toBe(false);
});
it('should validate the props as a JSExpression', () => {
const validProps = { type: 'JSExpression', value: 'props' };
expect(checkPropTypes(validProps, 'props', getPropType('props'), componentName)).toBe(true);
});
it('should validate the props as a JSFunction', () => {
const validProps = { type: 'JSFunction', value: 'props' };
expect(checkPropTypes(validProps, 'props', getPropType('props'), componentName)).toBe(true);
});
it('should validate the props as a JSSlot', () => {
const validProps = { type: 'JSSlot', value: 'props' };
expect(checkPropTypes(validProps, 'props', getPropType('props'), componentName)).toBe(true);
});
it('should validate the condition as a bool', () => {
const validCondition = true;
const invalidCondition = 'Not a bool'; // Not a boolean
expect(checkPropTypes(validCondition, 'condition', getPropType('condition'), componentName)).toBe(true);
expect(checkPropTypes(invalidCondition, 'condition', getPropType('condition'), componentName)).toBe(false);
});
it('should validate the condition as a JSExpression', () => {
const validCondition = { type: 'JSExpression', value: '1 + 1 === 2' };
const invalidCondition = { type: 'JSExpression', value: 123 }; // Not a string
expect(checkPropTypes(validCondition, 'condition', getPropType('condition'), componentName)).toBe(true);
expect(checkPropTypes(invalidCondition, 'condition', getPropType('condition'), componentName)).toBe(false);
});
it('should validate the loop as an array', () => {
const validLoop = ['item1', 'item2'];
const invalidLoop = 'Not an array'; // Not an array
expect(checkPropTypes(validLoop, 'loop', getPropType('loop'), componentName)).toBe(true);
expect(checkPropTypes(invalidLoop, 'loop', getPropType('loop'), componentName)).toBe(false);
});
it('should validate the loop as a JSExpression', () => {
const validLoop = { type: 'JSExpression', value: 'items' };
const invalidLoop = { type: 'JSExpression', value: 123 }; // Not a string
expect(checkPropTypes(validLoop, 'loop', getPropType('loop'), componentName)).toBe(true);
expect(checkPropTypes(invalidLoop, 'loop', getPropType('loop'), componentName)).toBe(false);
})
it('should validate the loopArgs as an array', () => {
const validLoopArgs = ['item'];
const invalidLoopArgs = 'Not an array'; // Not an array
expect(checkPropTypes(validLoopArgs, 'loopArgs', getPropType('loopArgs'), componentName)).toBe(true);
expect(checkPropTypes(invalidLoopArgs, 'loopArgs', getPropType('loopArgs'), componentName)).toBe(false);
});
it('should validate the loopArgs as a JSExpression', () => {
const validLoopArgs = { type: 'JSExpression', value: 'item' };
const invalidLoopArgs = { type: 'JSExpression', value: 123 }; // Not a string
const validLoopArgs2 = [{ type: 'JSExpression', value: 'item' }, { type: 'JSExpression', value: 'index' }];
expect(checkPropTypes(validLoopArgs, 'loopArgs', getPropType('loopArgs'), componentName)).toBe(true);
expect(checkPropTypes(invalidLoopArgs, 'loopArgs', getPropType('loopArgs'), componentName)).toBe(false);
expect(checkPropTypes(validLoopArgs2, 'loopArgs', getPropType('loopArgs'), componentName)).toBe(true);
});
it('should validate the children as an array', () => {
const validChildren = [{
id: 'child1',
componentName: 'Button',
}, {
id: 'child2',
componentName: 'Button',
}];
const invalidChildren = 'Not an array'; // Not an array
const invalidChildren2 = [{}]; // Not an valid array
expect(checkPropTypes(invalidChildren, 'children', getPropType('children'), componentName)).toBe(false);
expect(checkPropTypes(validChildren, 'children', getPropType('children'), componentName)).toBe(true);
expect(checkPropTypes(invalidChildren2, 'children', getPropType('children'), componentName)).toBe(false);
});
afterEach(() => {
jest.clearAllMocks();
});
});