test-get-data-element.jsβ’6.31 kB
/**
* Test script for GetDataElement handler
* Tests retrieval and parsing of data element information
*/
const { initializeTestEnvironment } = require('./test-helper');
// Initialize test environment
initializeTestEnvironment();
const { handleGetDataElement } = require('../dist/handlers/handleGetDataElement');
async function testGetDataElement() {
console.log('='.repeat(80));
console.log('GetDataElement Handler Test');
console.log('='.repeat(80));
try {
// First, test with custom data element (should be created by test-create-data-element.js)
const customDataElementName = 'ZZ_E_TEST_MCP_01';
console.log(`\nπ Step 1: Testing with custom data element: ${customDataElementName}`);
console.log('(Should be created first by running test-create-data-element.js)');
// Call GetDataElement handler for custom element
console.log('\nπ Calling GetDataElement handler...');
let startTime = Date.now();
let result = await handleGetDataElement({
data_element_name: customDataElementName
});
let duration = Date.now() - startTime;
console.log(`\nβ
Custom data element retrieved successfully in ${duration}ms`);
console.log('\nπ Result:');
let parsedResult;
try {
// result ΠΌΠ°Ρ MCP ΡΠΎΡΠΌΠ°Ρ: { isError, content: [{ type, text }] }
const responseText = result.content[0].text;
parsedResult = JSON.parse(responseText);
const dataElement = parsedResult.data_element;
console.log(JSON.stringify(dataElement, null, 2));
} catch (e) {
console.log(result.data);
parsedResult = null;
}
// Verify result structure
if (parsedResult && parsedResult.data_element) {
const dataElement = parsedResult.data_element;
console.log('\nβ
Verification Results:');
if (dataElement.metadata) {
console.log(`\nπ Metadata:`);
console.log(` Name: ${dataElement.metadata.name}`);
console.log(` Type: ${dataElement.metadata.type}`);
console.log(` Description: ${dataElement.metadata.description}`);
console.log(` Language: ${dataElement.metadata.language}`);
console.log(` Created: ${dataElement.metadata.createdAt} by ${dataElement.metadata.createdBy}`);
console.log(` Changed: ${dataElement.metadata.changedAt} by ${dataElement.metadata.changedBy}`);
console.log(` Version: ${dataElement.metadata.version}`);
}
if (dataElement.package) {
console.log(`\nπ¦ Package:`);
console.log(` Name: ${dataElement.package.name}`);
console.log(` Description: ${dataElement.package.description}`);
}
if (dataElement.dataElement) {
console.log(`\nπ§ Data Element Details:`);
console.log(` Type Kind: ${dataElement.dataElement.typeKind}`);
console.log(` Type Name: ${dataElement.dataElement.typeName}`);
console.log(` Data Type: ${dataElement.dataElement.dataType}`);
console.log(` Length: ${dataElement.dataElement.dataTypeLength}`);
console.log(` Decimals: ${dataElement.dataElement.dataTypeDecimals}`);
console.log(`\nπ·οΈ Field Labels:`);
console.log(` Short (${dataElement.dataElement.shortFieldMaxLength}): "${dataElement.dataElement.shortFieldLabel}"`);
console.log(` Medium (${dataElement.dataElement.mediumFieldMaxLength}): "${dataElement.dataElement.mediumFieldLabel}"`);
console.log(` Long (${dataElement.dataElement.longFieldMaxLength}): "${dataElement.dataElement.longFieldLabel}"`);
console.log(` Heading (${dataElement.dataElement.headingFieldMaxLength}): "${dataElement.dataElement.headingFieldLabel}"`);
if (dataElement.dataElement.searchHelp) {
console.log(`\nπ Search Help: ${dataElement.dataElement.searchHelp}`);
}
}
// Success checks
const checks = {
'Has metadata': dataElement.metadata !== null,
'Has data element info': dataElement.dataElement !== null,
'Has type definition': dataElement.dataElement?.typeKind !== undefined,
'Has field labels': dataElement.dataElement?.shortFieldLabel !== undefined
};
console.log('\nπ Validation Checks:');
for (const [check, passed] of Object.entries(checks)) {
console.log(` ${passed ? 'β
' : 'β'} ${check}`);
}
const allPassed = Object.values(checks).every(v => v);
if (allPassed) {
console.log('\nπ All checks passed! Data element information retrieved successfully.');
} else {
console.log('\nβ οΈ Some checks failed. Please review the results.');
}
}
// Step 2: Test with standard SAP data element
console.log('\n' + '='.repeat(80));
console.log('Step 2: Testing with standard SAP data element');
console.log('='.repeat(80));
const standardDataElementName = 'MAKTX';
console.log(`\nπ Testing with data element: ${standardDataElementName}`);
startTime = Date.now();
result = await handleGetDataElement({
data_element_name: standardDataElementName
});
duration = Date.now() - startTime;
console.log(`\nβ
Standard data element retrieved successfully in ${duration}ms`);
const standardResponseText = result.content[0].text;
const standardParsed = JSON.parse(standardResponseText);
const standardDE = standardParsed.data_element;
console.log('\nπ Standard Data Element Info:');
console.log(` Name: ${standardDE.metadata?.name}`);
console.log(` Description: ${standardDE.metadata?.description}`);
console.log(` Type Name (Domain): ${standardDE.dataElement?.typeName}`);
console.log(` Data Type: ${standardDE.dataElement?.dataType}`);
console.log(` Length: ${standardDE.dataElement?.dataTypeLength}`);
console.log(` Package: ${standardDE.package?.name}`);
} catch (error) {
console.error('\nβ Test failed:', error.message);
if (error.response) {
console.error('Response status:', error.response.status);
console.error('Response data:', error.response.data);
}
process.exit(1);
}
}
// Run test
testGetDataElement().catch(error => {
console.error('Fatal error:', error);
process.exit(1);
});