in apps/vs-code-designer/src/app/utils/unitTests.ts [689:748]
export async function parseUnitTestOutputs(unitTestDefinition: any): Promise<{
operationInfo: any;
outputParameters: Record<string, any>;
}> {
const allowedFields = ['type', 'title', 'format', 'description'];
const transformRawOutputs = (rawOutput: any): Record<string, any> => {
const transformedOutput: Record<string, any> = {};
for (const rawKey in rawOutput) {
if (Object.prototype.hasOwnProperty.call(rawOutput, rawKey)) {
const cleanedKey = rawKey.replace('outputs.$.', '').replace('.$.', '.').replace('$.', '').replace('.$', '');
const keyParts = cleanedKey.split('.');
keyParts.reduce((nestedObject, part, index) => {
if (index === keyParts.length - 1) {
if (
Object.prototype.hasOwnProperty.call(nestedObject, part) &&
typeof nestedObject[part] === 'object' &&
typeof rawOutput[rawKey] === 'object'
) {
nestedObject[part] = {
...nestedObject[part],
...Object.keys(rawOutput[rawKey]).reduce((filteredFields, fieldKey) => {
if (allowedFields.includes(fieldKey)) {
const newFieldKey = fieldKey === 'type' ? 'nestedTypeProperty' : fieldKey;
(filteredFields as Record<string, any>)[newFieldKey] = rawOutput[rawKey][fieldKey];
}
return filteredFields;
}, {}),
};
} else {
nestedObject[part] = Object.keys(rawOutput[rawKey]).reduce((filteredFields, fieldKey) => {
if (allowedFields.includes(fieldKey)) {
const newFieldKey = fieldKey === 'type' ? 'nestedTypeProperty' : fieldKey;
(filteredFields as Record<string, any>)[newFieldKey] = rawOutput[rawKey][fieldKey];
}
return filteredFields;
}, {});
}
} else {
nestedObject[part] = nestedObject[part] || {};
}
return nestedObject[part];
}, transformedOutput);
}
}
return transformedOutput;
};
const parsedOutputs: { operationInfo: any; outputParameters: any } = {
operationInfo: unitTestDefinition['operationInfo'],
outputParameters: {},
};
for (const parameterKey in unitTestDefinition['outputParameters']) {
parsedOutputs.outputParameters[parameterKey] = {
outputs: transformRawOutputs(unitTestDefinition['outputParameters'][parameterKey].outputs),
};
}
return parsedOutputs;
}