489 lines
9.9 KiB
TypeScript

import '../fixtures/window';
import { Node, Designer, getConvertedExtraKey } from '@ali/lowcode-designer';
import { Editor, globalContext } from '@ali/lowcode-editor-core';
import { initNodeReducer } from '../../src/props-reducers/init-node-reducer';
import formSchema from '../fixtures/schema/form';
describe('initNodeReducer 测试', () => {
it('initNodeReducer 测试 - 有 initials', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {
initials: [
{
name: 'propA',
initial: () => '111',
},
{
name: 'propB',
initial: () => '111',
},
{
name: 'propC',
initial: () => {
throw new Error('111');
},
},
{
name: 'propD',
initial: () => '111',
},
{
name: 'propE',
initial: () => '111',
},
{
name: 'propF',
initial: () => '111',
},
],
},
};
},
prototype: {
options: {
configure: [
{
name: 'propF',
setter: {
type: {
displayName: 'I18nSetter',
},
},
},
],
},
},
},
settingEntry: {
getProp(propName) {
return { name: propName };
},
},
props: {
has() {
return false;
},
add() {},
},
};
expect(
initNodeReducer(
{
propA: '111',
propC: '222',
propD: {
type: 'JSExpression',
mock: '111',
},
propE: {
type: 'variable',
value: '111',
},
},
mockNode,
),
).toEqual({
propA: '111',
propB: '111',
propC: '222',
propD: {
type: 'JSExpression',
mock: '111',
},
propE: {
type: 'variable',
value: '111',
},
propF: {
type: 'i18n',
use: 'zh_CN',
zh_CN: '111',
},
});
});
it('filterReducer 测试 - 无 initials', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {},
};
},
},
settingEntry: {
getProp(propName) {
return { name: propName };
},
},
};
expect(
initNodeReducer(
{
propA: 111,
},
mockNode,
),
).toEqual({
propA: 111,
});
});
describe('i18n', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {
initials: [
{
name: 'propF',
initial: () => 111,
},
],
},
};
},
},
prototype: {
options: {
configure: [
{
name: 'propF',
setter: {
type: {
displayName: 'I18nSetter',
},
},
},
],
},
},
props: {
has() {
return false;
},
add() {},
},
};
it('isI18NObject(ov): true', () => {
expect(
initNodeReducer(
{
propF: {
type: 'i18n',
zh_CN: '222',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'i18n',
zh_CN: '222',
},
});
});
it('isJSExpression(ov): true', () => {
expect(
initNodeReducer(
{
propF: {
type: 'JSExpression',
value: 'state.a',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'JSExpression',
value: 'state.a',
},
});
});
it('isJSBlock(ov): true', () => {
expect(
initNodeReducer(
{
propF: {
type: 'JSBlock',
value: 'state.a',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'JSBlock',
value: 'state.a',
},
});
});
it('isJSSlot(ov): true', () => {
expect(
initNodeReducer(
{
propF: {
type: 'JSSlot',
value: 'state.a',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'JSSlot',
value: 'state.a',
},
});
});
it('isVariable(ov): true', () => {
expect(
initNodeReducer(
{
propF: {
type: 'variable',
value: 'state.a',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'variable',
value: 'state.a',
},
});
});
it('isI18NObject(v): false', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {
initials: [
{
name: 'propF',
initial: () => 111,
},
],
},
};
},
prototype: {
options: {
configure: [
{
name: 'propF',
setter: {
type: {
displayName: 'I18nSetter',
},
},
},
],
},
},
},
props: {
has() {
return false;
},
add() {},
},
};
expect(
initNodeReducer(
{
propF: {
type: 'variable',
value: 'state.a',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'variable',
value: 'state.a',
},
});
});
it('isI18NObject(v): false', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {
initials: [{
name: 'propF',
initial: () => 111,
}],
},
};
},
},
prototype: {
options: {
configure: [
{
name: 'propF',
setter: {
type: {
displayName: 'I18nSetter',
},
},
},
],
},
},
props: {
has() {
return false;
},
add() {},
},
};
expect(
initNodeReducer(
{
propF: {
type: 'variable',
value: 'state.a',
},
},
mockNode,
),
).toEqual({
propF: {
type: 'variable',
value: 'state.a',
},
});
});
});
it('成功使用兼容后的 i18n 对象', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {
initials: [{
name: 'propF',
initial: () => {
return {
type: 'i18n',
use: 'zh_CN',
zh_CN: '111',
};
},
}],
},
};
},
prototype: {
options: {
configure: [
{
name: 'propF',
setter: {
type: {
displayName: 'I18nSetter',
},
},
},
],
},
},
},
props: {
has() {
return false;
},
add() {},
},
};
expect(
initNodeReducer(
{
propF: '111',
},
mockNode,
),
).toEqual({
propF: {
type: 'i18n',
use: 'zh_CN',
zh_CN: '111',
},
});
});
describe('fieldId', () => {
const mockNode = {
componentMeta: {
getMetadata() {
return {
experimental: {
initials: [
{
name: 'propA',
initial: () => '111',
},
],
},
};
},
},
settingEntry: {
getProp(propName) {
return { name: propName };
},
},
props: {
has() {
return false;
},
add() {},
},
};
const editor = new Editor();
globalContext.register(editor, Editor);
const designer = new Designer({ editor });
editor.set('designer', designer);
designer.project.open(formSchema);
it('fieldId - 已存在', () => {
expect(initNodeReducer({
propA: '111',
fieldId: 'form',
}, mockNode)).toEqual({
propA: '111',
fieldId: undefined,
});
});
it('fieldId - 已存在,但有全局关闭标识', () => {
window.__disable_unique_id_checker__ = true;
expect(initNodeReducer({
propA: '111',
fieldId: 'form',
}, mockNode)).toEqual({
propA: '111',
fieldId: 'form',
});
});
});
});