UNPKG

arela

Version:

AI-powered CTO with multi-agent orchestration, code summarization, visual testing (web + mobile) for blazing fast development.

163 lines โ€ข 4.8 kB
import pc from "picocolors"; /** * Report test results to console */ export function reportResults(results) { console.log(""); console.log(pc.bold(pc.cyan(`๐Ÿงช Running user flow: ${results.flow}`))); console.log(""); // Report each step for (const step of results.steps) { const icon = getStatusIcon(step.status); const statusColor = getStatusColor(step.status); const message = step.message || step.action; console.log(` ${icon} ${statusColor(message)}`); if (step.screenshot) { console.log(pc.dim(` ๐Ÿ“ธ ${step.screenshot}`)); } } console.log(""); // Summary statistics const passed = results.steps.filter((s) => s.status === "pass").length; const failed = results.steps.filter((s) => s.status === "fail").length; const warnings = results.steps.filter((s) => s.status === "warning").length; console.log(pc.bold("๐Ÿ“Š Results:")); console.log(` - ${pc.green(`${passed} steps passed`)}`); if (failed > 0) { console.log(` - ${pc.red(`${failed} issues found`)}`); } if (warnings > 0) { console.log(` - ${pc.yellow(`${warnings} warnings`)}`); } console.log(pc.dim(` - Duration: ${formatDuration(results.duration)}`)); console.log(""); // Report issues with recommendations if (results.issues.length > 0) { console.log(pc.bold("๐Ÿ’ก Recommendations:")); console.log(""); for (let i = 0; i < results.issues.length; i++) { const issue = results.issues[i]; const severityIcon = getSeverityIcon(issue.severity); const severityColor = getSeverityColor(issue.severity); console.log(` ${i + 1}. ${severityIcon} ${severityColor(issue.message)}`); if (issue.suggestion) { console.log(pc.dim(` ๐Ÿ’ญ ${issue.suggestion}`)); } if (issue.file) { const location = issue.line ? `${issue.file}:${issue.line}` : issue.file; console.log(pc.dim(` ๐Ÿ“„ ${location}`)); } console.log(""); } } // Report screenshots if (results.screenshots.length > 0) { console.log(pc.dim(`๐Ÿ“ธ Screenshots saved to .arela/screenshots/ (${results.screenshots.length} files)`)); console.log(""); } } /** * Get icon for step status */ function getStatusIcon(status) { switch (status) { case "pass": return "โœ…"; case "fail": return "โŒ"; case "warning": return "โš ๏ธ "; } } /** * Get color function for step status */ function getStatusColor(status) { switch (status) { case "pass": return pc.green; case "fail": return pc.red; case "warning": return pc.yellow; } } /** * Get icon for issue severity */ function getSeverityIcon(severity) { switch (severity) { case "critical": return "๐Ÿ”ด"; case "warning": return "๐ŸŸก"; case "info": return "๐Ÿ”ต"; } } /** * Get color function for issue severity */ function getSeverityColor(severity) { switch (severity) { case "critical": return pc.red; case "warning": return pc.yellow; case "info": return pc.cyan; } } /** * Format duration in human-readable format */ function formatDuration(ms) { if (ms < 1000) { return `${ms}ms`; } const seconds = Math.floor(ms / 1000); const remainingMs = ms % 1000; if (seconds < 60) { return `${seconds}.${Math.floor(remainingMs / 100)}s`; } const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; return `${minutes}m ${remainingSeconds}s`; } /** * Report test start */ export function reportStart(url, flow) { console.log(""); console.log(pc.bold(pc.cyan("๐ŸŒ Starting web app testing..."))); console.log(pc.dim(`๐Ÿ“ฑ Launching browser at ${url}`)); console.log(pc.dim(`๐ŸŽฏ Flow: ${flow}`)); console.log(""); } /** * Report test error */ export function reportError(error) { console.log(""); console.log(pc.bold(pc.red("โŒ Test execution failed"))); console.log(""); console.log(pc.red(error.message)); console.log(""); if (error.stack) { console.log(pc.dim(error.stack)); console.log(""); } } /** * Report test completion */ export function reportComplete(success) { if (success) { console.log(pc.bold(pc.green("โœ… Test completed successfully!"))); } else { console.log(pc.bold(pc.yellow("โš ๏ธ Test completed with issues"))); } console.log(""); } //# sourceMappingURL=reporter.js.map