feat: manually mirror opencoze's code from bytedance
Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
@@ -0,0 +1,283 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { isEqual } from 'lodash-es';
|
||||
import { type JSONSchema7 } from 'json-schema';
|
||||
import {
|
||||
ROOT_KEY,
|
||||
getArrayItemKey,
|
||||
transDataWithStatus2Object,
|
||||
transSchema2DataWithStatus,
|
||||
} from '@coze-studio/mockset-shared';
|
||||
|
||||
import {
|
||||
getMergedDataWithStatus,
|
||||
mergeDataWithStatus,
|
||||
safeJSONParse,
|
||||
transMockData2DataWithStatus,
|
||||
} from '../src/util/utils';
|
||||
import {
|
||||
MockDataStatus,
|
||||
type MockDataValueType,
|
||||
type MockDataWithStatus,
|
||||
} from '../src/util/typings';
|
||||
|
||||
const testSchema: JSONSchema7 = {
|
||||
$schema: 'https://json-schema.org/draft-07/schema',
|
||||
required: ['num', 'str', 'bool'],
|
||||
properties: {
|
||||
bool: {
|
||||
additionalProperties: false,
|
||||
type: ['boolean'],
|
||||
},
|
||||
int: {
|
||||
additionalProperties: false,
|
||||
type: ['integer'],
|
||||
},
|
||||
num: {
|
||||
additionalProperties: false,
|
||||
type: ['number'],
|
||||
},
|
||||
str: {
|
||||
additionalProperties: false,
|
||||
type: ['string'],
|
||||
},
|
||||
},
|
||||
additionalProperties: false,
|
||||
type: ['object'],
|
||||
};
|
||||
|
||||
const testMockA: MockDataWithStatus = {
|
||||
children: [
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: 'false',
|
||||
isRequired: true,
|
||||
key: 'mock-bool',
|
||||
label: 'bool',
|
||||
status: 'added' as MockDataStatus,
|
||||
type: 'boolean' as MockDataValueType,
|
||||
realValue: false,
|
||||
},
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: '0',
|
||||
isRequired: false,
|
||||
key: 'mock-int',
|
||||
label: 'int',
|
||||
status: 'added' as MockDataStatus,
|
||||
type: 'integer' as MockDataValueType,
|
||||
realValue: 0,
|
||||
},
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: '0',
|
||||
isRequired: true,
|
||||
key: 'mock-num',
|
||||
label: 'num',
|
||||
status: 'added' as MockDataStatus,
|
||||
type: 'number' as MockDataValueType,
|
||||
realValue: 0,
|
||||
},
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: '""',
|
||||
isRequired: true,
|
||||
key: 'mock-str',
|
||||
label: 'str',
|
||||
status: 'added' as MockDataStatus,
|
||||
type: 'string' as MockDataValueType,
|
||||
realValue: '',
|
||||
},
|
||||
],
|
||||
description: undefined,
|
||||
displayValue: undefined,
|
||||
isRequired: false,
|
||||
key: 'mock',
|
||||
label: 'mock',
|
||||
status: 'added' as MockDataStatus,
|
||||
type: 'object' as MockDataValueType,
|
||||
realValue: undefined,
|
||||
};
|
||||
|
||||
const testMockAObj = { mock: { bool: false, int: 0, num: 0, str: '' } };
|
||||
|
||||
const testMockBStr = '{"bool":true,"num":2,"str":"hello","extra":"extra"}';
|
||||
|
||||
const testMockB: MockDataWithStatus = {
|
||||
key: 'mock',
|
||||
label: 'mock',
|
||||
realValue: undefined,
|
||||
displayValue: undefined,
|
||||
isRequired: false,
|
||||
type: 'object' as MockDataValueType,
|
||||
status: 'removed' as MockDataStatus,
|
||||
children: [
|
||||
{
|
||||
key: 'mock-bool',
|
||||
label: 'bool',
|
||||
realValue: true,
|
||||
displayValue: 'true',
|
||||
isRequired: false,
|
||||
type: 'boolean' as MockDataValueType,
|
||||
status: 'removed' as MockDataStatus,
|
||||
},
|
||||
{
|
||||
key: 'mock-num',
|
||||
label: 'num',
|
||||
realValue: 2,
|
||||
displayValue: '2',
|
||||
isRequired: false,
|
||||
type: 'number' as MockDataValueType,
|
||||
status: 'removed' as MockDataStatus,
|
||||
},
|
||||
{
|
||||
key: 'mock-str',
|
||||
label: 'str',
|
||||
realValue: 'hello',
|
||||
displayValue: '"hello"',
|
||||
isRequired: false,
|
||||
type: 'string' as MockDataValueType,
|
||||
status: 'removed' as MockDataStatus,
|
||||
},
|
||||
{
|
||||
key: 'mock-extra',
|
||||
label: 'extra',
|
||||
realValue: 'extra',
|
||||
displayValue: '"extra"',
|
||||
isRequired: false,
|
||||
type: 'string' as MockDataValueType,
|
||||
status: 'removed' as MockDataStatus,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const testMergedMockData: MockDataWithStatus = {
|
||||
key: 'mock',
|
||||
label: 'mock',
|
||||
description: undefined,
|
||||
realValue: undefined,
|
||||
displayValue: undefined,
|
||||
isRequired: false,
|
||||
type: 'object' as MockDataValueType,
|
||||
status: 'added' as MockDataStatus,
|
||||
children: [
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: 'true',
|
||||
isRequired: true,
|
||||
key: 'mock-bool',
|
||||
label: 'bool',
|
||||
status: 'default' as MockDataStatus,
|
||||
type: 'boolean' as MockDataValueType,
|
||||
realValue: true,
|
||||
},
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: '0',
|
||||
isRequired: false,
|
||||
key: 'mock-int',
|
||||
label: 'int',
|
||||
status: 'added' as MockDataStatus,
|
||||
type: 'integer' as MockDataValueType,
|
||||
realValue: 0,
|
||||
},
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: '2',
|
||||
isRequired: true,
|
||||
key: 'mock-num',
|
||||
label: 'num',
|
||||
status: 'default' as MockDataStatus,
|
||||
type: 'number' as MockDataValueType,
|
||||
realValue: 2,
|
||||
},
|
||||
{
|
||||
description: undefined,
|
||||
displayValue: '"hello"',
|
||||
isRequired: true,
|
||||
key: 'mock-str',
|
||||
label: 'str',
|
||||
status: 'default' as MockDataStatus,
|
||||
type: 'string' as MockDataValueType,
|
||||
realValue: 'hello',
|
||||
},
|
||||
{
|
||||
key: 'mock-extra',
|
||||
label: 'extra',
|
||||
realValue: 'extra',
|
||||
displayValue: '"extra"',
|
||||
isRequired: false,
|
||||
type: 'string' as MockDataValueType,
|
||||
status: 'removed' as MockDataStatus,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
describe('plugin-mock-data-utils', () => {
|
||||
it('getArrayItemKey', () => {
|
||||
const key = getArrayItemKey(1);
|
||||
|
||||
expect(key).toEqual('item_1');
|
||||
});
|
||||
|
||||
it('transSchema2DataWithStatus', () => {
|
||||
const data = transSchema2DataWithStatus(ROOT_KEY, testSchema);
|
||||
const compareResult = isEqual(data, testMockA);
|
||||
|
||||
expect(compareResult).toEqual(true);
|
||||
});
|
||||
|
||||
it('transDataWithStatus2Object', () => {
|
||||
const data = transDataWithStatus2Object(testMockA);
|
||||
const compareResult = isEqual(data, testMockAObj);
|
||||
|
||||
expect(compareResult).toEqual(true);
|
||||
});
|
||||
|
||||
it('transMockData2DataWithStatus', () => {
|
||||
const obj = safeJSONParse(testMockBStr);
|
||||
const parsedMockData = transMockData2DataWithStatus(ROOT_KEY, obj, {
|
||||
defaultStatus: MockDataStatus.REMOVED,
|
||||
});
|
||||
const compareResult = isEqual(parsedMockData, testMockB);
|
||||
|
||||
expect(compareResult).toEqual(true);
|
||||
});
|
||||
|
||||
it('mergeDataWithStatus', () => {
|
||||
const { merged: mergedMockData, incompatible } = mergeDataWithStatus(
|
||||
testMockA.children,
|
||||
testMockB.children,
|
||||
);
|
||||
const compareResult = isEqual(mergedMockData, testMergedMockData.children);
|
||||
|
||||
expect(compareResult).toEqual(true);
|
||||
expect(incompatible).toEqual(true);
|
||||
});
|
||||
|
||||
it('getMergedDataWithStatus', () => {
|
||||
const { result: mergedMockData, incompatible } = getMergedDataWithStatus(
|
||||
testMockA,
|
||||
testMockBStr,
|
||||
);
|
||||
|
||||
const compareResult = isEqual(mergedMockData, testMergedMockData);
|
||||
|
||||
expect(compareResult).toEqual(true);
|
||||
expect(incompatible).toEqual(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user