UNPKG

@platformos/pos-cli

Version:
120 lines (98 loc) 4.13 kB
import chalk from 'chalk'; import logger from '../logger.js'; const formatDuration = (ms) => { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(2)}s`; const minutes = Math.floor(ms / 60000); const seconds = ((ms % 60000) / 1000).toFixed(2); return `${minutes}m ${seconds}s`; }; const formatTestLog = (logRow, isTestLog) => { const message = logRow.message || ''; const logType = logRow.error_type || ''; const fullMessage = typeof message === 'string' ? message : JSON.stringify(message); const cleanMessage = fullMessage.replace(/\r?\n$/, ''); const hasTestPath = /app\/lib\/test\/|modules\/.*\/test\/|\.liquid/.test(cleanMessage); if (isTestLog && hasTestPath) { return chalk.cyan.bold(`▶ ${cleanMessage}\n`); } else if (isTestLog) { return chalk.white(` ${cleanMessage}\n`); } else { return chalk.white(` ${logType}: ${cleanMessage}\n`); } }; const transformTestResponse = (response) => { const total = response.total_tests || response.total || 0; const totalErrors = response.total_errors || 0; const assertions = response.total_assertions || response.assertions || 0; const duration = response.duration_ms || response.duration || 0; let passed = 0; let failed = 0; if (response.success === true) { passed = total; failed = totalErrors; } else { failed = totalErrors || (total > 0 ? 1 : 0); passed = Math.max(0, total - failed); } const tests = []; if (response.tests && Array.isArray(response.tests)) { response.tests.forEach(test => { const testItem = { name: test.name || 'Unknown test', status: test.success ? 'passed' : 'failed', passed: test.success, assertions: test.assertions }; if (test.errors) { if (Array.isArray(test.errors) && test.errors.length > 0) { testItem.errors = test.errors; } else if (typeof test.errors === 'object' && Object.keys(test.errors).length > 0) { testItem.error = JSON.stringify(test.errors); } } tests.push(testItem); }); } return { total, passed, failed, assertions, tests, duration }; }; const printTestResults = (results, duration) => { const { passed = 0, failed = 0, total = 0, tests = [] } = results; if (tests && tests.length > 0) { logger.Info('─'.repeat(60), { hideTimestamp: true }); tests.forEach(test => { const status = test.status || (test.passed ? 'passed' : 'failed'); const icon = status === 'passed' ? '✓' : '✗'; const name = test.name || test.test_name || 'Unknown test'; if (status === 'passed') { logger.Success(` ${icon} ${name}`, { hideTimestamp: true }); } else { logger.Error(` ${icon} ${name}`, { hideTimestamp: true, exit: false, notify: false }); if (test.error || test.message) { logger.Error(` Error: ${test.error || test.message}`, { hideTimestamp: true, exit: false, notify: false }); } if (test.errors && Array.isArray(test.errors)) { test.errors.forEach(err => { logger.Error(` - ${err.message || err}`, { hideTimestamp: true, exit: false, notify: false }); }); } } }); logger.Info('─'.repeat(60), { hideTimestamp: true }); } const totalTests = total || (passed + failed); const summary = []; if (passed > 0) summary.push(`${passed} passed`); if (failed > 0) summary.push(`${failed} failed`); const summaryText = summary.length > 0 ? summary.join(', ') : 'No tests executed'; const durationText = duration ? ` in ${formatDuration(duration)}` : ''; if (failed > 0) { logger.Error(`\n${summaryText} (${totalTests} total)${durationText}`, { hideTimestamp: true, exit: false, notify: false }); } else if (passed > 0) { logger.Success(`\n${summaryText} (${totalTests} total)${durationText}`, { hideTimestamp: true }); } else { logger.Warn(`\n${summaryText}${durationText}`, { hideTimestamp: true }); } return failed === 0; }; export { formatDuration, formatTestLog, transformTestResponse, printTestResults };