mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 01:56:46 +00:00
103 lines
2.7 KiB
TypeScript
103 lines
2.7 KiB
TypeScript
import cliProgress from 'cli-progress';
|
|
import pc from 'picocolors';
|
|
|
|
import type { TestCase } from '../types/evaluation.js';
|
|
import type { TestResult } from '../types/test-result.js';
|
|
import {
|
|
calculateTestMetrics,
|
|
calculateCategoryAverages,
|
|
countViolationsByType,
|
|
} from '../utils/evaluation-calculator.js';
|
|
import {
|
|
displayTestResults,
|
|
displaySummaryTable,
|
|
displayViolationsDetail,
|
|
} from '../utils/evaluation-reporter.js';
|
|
|
|
/**
|
|
* Creates a progress bar for test execution
|
|
* @param total - Total number of tests
|
|
* @returns Progress bar instance
|
|
*/
|
|
export function createProgressBar(total: number): cliProgress.SingleBar {
|
|
const progressBar = new cliProgress.SingleBar(
|
|
{
|
|
format: 'Progress |{bar}| {percentage}% | {value}/{total} Tests | {status}',
|
|
barCompleteChar: '█',
|
|
barIncompleteChar: '░',
|
|
hideCursor: true,
|
|
},
|
|
cliProgress.Presets.shades_classic,
|
|
);
|
|
progressBar.start(total, 0, { status: 'Starting...' });
|
|
return progressBar;
|
|
}
|
|
|
|
/**
|
|
* Updates progress bar with current status
|
|
* @param progressBar - Progress bar instance
|
|
* @param completed - Number of completed tests
|
|
* @param total - Total number of tests
|
|
* @param status - Optional status message
|
|
*/
|
|
export function updateProgress(
|
|
progressBar: cliProgress.SingleBar,
|
|
completed: number,
|
|
total: number,
|
|
status?: string,
|
|
): void {
|
|
progressBar.update(completed, {
|
|
status: status ?? `${completed}/${total} completed`,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Displays evaluation results in the console
|
|
* @param testCases - Array of test cases
|
|
* @param results - Array of test results
|
|
* @param totalTime - Total execution time in milliseconds
|
|
*/
|
|
export function displayResults(
|
|
testCases: TestCase[],
|
|
results: TestResult[],
|
|
totalTime: number,
|
|
): void {
|
|
// Display test results
|
|
displayTestResults(testCases, results);
|
|
|
|
console.log();
|
|
console.log(pc.green(`✓ All tests completed in ${(totalTime / 1000).toFixed(1)}s`));
|
|
|
|
// Calculate metrics
|
|
const metrics = calculateTestMetrics(results);
|
|
const categoryAverages = calculateCategoryAverages(results);
|
|
const violationCounts = countViolationsByType(results);
|
|
|
|
const combinedMetrics = {
|
|
...metrics,
|
|
categoryAverages,
|
|
violationCounts,
|
|
};
|
|
|
|
// Display summary
|
|
displaySummaryTable(results, combinedMetrics);
|
|
|
|
// Display violations if any exist
|
|
if (violationCounts.critical > 0 || violationCounts.major > 0 || violationCounts.minor > 0) {
|
|
displayViolationsDetail(results);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Displays error message and exits
|
|
* @param message - Error message
|
|
* @param error - Optional error object
|
|
*/
|
|
export function displayError(message: string, error?: unknown): void {
|
|
console.error(pc.red(`✗ ${message}`));
|
|
if (error) {
|
|
console.error(error);
|
|
}
|
|
process.exit(1);
|
|
}
|