UNPKG

upload-test-manual

Version:

CLI tool untuk mengolah file CSV dan upload ke ReportPortal

107 lines (93 loc) 3.34 kB
const buildDescription = (testData, customFields = {}) => { const fields = { idField: 'Test Case ID', stepsField: 'Steps', expectedResultField: 'Expected Result', actualResultField: 'Actual Result', commentField: 'Comment', ...customFields }; return [ `TEST CASE ID: ${testData[fields.idField] || 'NOT PROVIDED'}`, `Steps:\n${testData[fields.stepsField]}`, `Expected: ${testData[fields.expectedResultField] || 'Not specified'}`, `Actual: ${testData[fields.actualResultField] || 'Not recorded'}`, `Comments: ${testData[fields.commentField] || 'None'}` ].join('\n\n'); }; const buildAttributes = (testData, customFields = {}) => { const fields = { priorityField: 'Priority', ownerField: 'Owner', environmentField: 'Environment', defectField: 'Defect', automationField: 'Automation Status', ...customFields }; const attributes = [ { key: 'priority', value: testData[fields.priorityField] || 'MEDIUM' }, { key: 'owner', value: testData[fields.ownerField] || 'Unknown' }, { key: 'environment', value: testData[fields.environmentField] || 'staging' }, { key: 'key', value: (testData[fields.automationField] || 'manual').toLowerCase() === 'automated' ? 'automated' : 'manual' } ]; if (testData[fields.defectField]) { attributes.push({ key: 'defect', value: testData[fields.defectField] }); } // Include Test Case ID in attributes as fallback if (testData['Test Case ID']) { attributes.push({ key: 'test_case_id', value: testData['Test Case ID'] }); } return attributes.filter(attr => attr.value && attr.value !== 'N/A'); }; const formatSteps = (steps) => { if (!steps) return 'No steps provided'; if (typeof steps === 'string') { const delimiters = ['\n', ';', '|']; for (const delimiter of delimiters) { if (steps.includes(delimiter)) { return steps.split(delimiter) .map((step, i) => `${i + 1}. ${step.trim()}`) .join('\n'); } } return `1. ${steps.trim()}`; } return 'Unrecognized steps format'; }; const validateCSVStructure = (data, options = {}) => { const config = { requiredFields: ['Test Case ID', 'Title', 'Status', 'Steps'], statusValues: ['Passed', 'Failed', 'Skipped', 'Pending'], strictMode: false, ...options }; // Validate required fields const missingFields = config.requiredFields.filter(field => !data[field]); if (missingFields.length > 0) { throw new Error(`Missing required fields: ${missingFields.join(', ')}`); } // Validate status values if (data['Status'] && !config.statusValues.includes(data['Status'])) { throw new Error(`Invalid status: ${data['Status']}. Must be one of: ${config.statusValues.join(', ')}`); } // Strict mode validation if (config.strictMode) { const extraFields = Object.keys(data).filter( key => ![...config.requiredFields, ...(options.optionalFields || [])].includes(key) ); if (extraFields.length > 0) { throw new Error(`Unexpected fields: ${extraFields.join(', ')}`); } } }; module.exports = { buildDescription, buildAttributes, validateCSVStructure, formatSteps };