#!/usr/bin/env node
import { execSync } from "child_process";
console.log("π CRM MCP Server - Phase C: Advanced Testing");
console.log("=" .repeat(80));
console.log(`π
Started at: ${new Date().toISOString()}`);
console.log("π§ͺ Running advanced test suite for edge cases and performance validation...\n");
const testSuites = [
{
name: "Edge Cases",
description: "Validates input validation, boundary conditions, error handling, and security",
command: "npx tsx scenarios/edge-cases.test.ts",
category: "C1: Edge Case & Error Handling",
estimatedDuration: "2-3 minutes"
},
{
name: "Performance & Stress",
description: "Tests system performance under load, bulk operations, and resource usage",
command: "npx tsx scenarios/performance-stress.test.ts",
category: "C2: Performance & Scalability",
estimatedDuration: "3-5 minutes"
}
];
let totalPassed = 0;
let totalSuites = testSuites.length;
let allResults: Array<{suite: string, passed: boolean, duration: number, category: string}> = [];
const startTime = Date.now();
console.log("π Test Suite Overview:");
for (const suite of testSuites) {
console.log(` π§ ${suite.category}`);
console.log(` π ${suite.description}`);
console.log(` β±οΈ Estimated Duration: ${suite.estimatedDuration}\n`);
}
console.log("π Starting execution...\n");
for (const suite of testSuites) {
console.log(`π§ ${suite.category}`);
console.log(`π Suite: ${suite.name}`);
console.log(`π Description: ${suite.description}`);
console.log("-" .repeat(60));
const suiteStartTime = Date.now();
try {
// Set longer timeout for advanced tests
const result = execSync(suite.command, {
stdio: 'pipe',
cwd: process.cwd(),
timeout: 10 * 60 * 1000 // 10 minute timeout for advanced tests
});
const duration = Date.now() - suiteStartTime;
console.log(`β
PASSED ${suite.name} (${duration}ms - ${(duration/1000).toFixed(1)}s)`);
totalPassed++;
allResults.push({suite: suite.name, passed: true, duration, category: suite.category});
} catch (error: any) {
const duration = Date.now() - suiteStartTime;
console.log(`β FAILED ${suite.name} (${duration}ms - ${(duration/1000).toFixed(1)}s)`);
// Try to extract meaningful error information
let errorMessage = "Unknown error";
if (error.stdout) {
const stdout = error.stdout.toString();
const lines = stdout.split('\n');
const errorLine = lines.find((line: string) => line.includes('β') || line.includes('Error:') || line.includes('Failed'));
errorMessage = errorLine || `Exit code: ${error.status}`;
}
console.log(` π Error: ${errorMessage}`);
allResults.push({suite: suite.name, passed: false, duration, category: suite.category});
}
console.log(""); // Add spacing between suites
}
const totalDuration = Date.now() - startTime;
console.log("=" .repeat(80));
console.log("π PHASE C: ADVANCED TESTING - FINAL SUMMARY");
console.log("=" .repeat(80));
console.log(`\nπ Overall Results:`);
console.log(` π§ͺ Total Test Suites: ${totalSuites}`);
console.log(` β
Passed: ${totalPassed}`);
console.log(` β Failed: ${totalSuites - totalPassed}`);
console.log(` β±οΈ Total Duration: ${totalDuration}ms (${(totalDuration / 1000).toFixed(2)}s)`);
console.log(` π
Completed: ${new Date().toISOString()}`);
console.log(`\nπ Suite Results:`);
for (const result of allResults) {
const status = result.passed ? "β
" : "β";
const durationSec = (result.duration / 1000).toFixed(1);
console.log(` ${status} ${result.suite.padEnd(25)} ${durationSec.padStart(6)}s ${result.category}`);
}
const averageDuration = allResults.reduce((sum, r) => sum + r.duration, 0) / allResults.length;
console.log(`\nβ‘ Performance Summary:`);
console.log(` π Average Suite Duration: ${(averageDuration / 1000).toFixed(2)} seconds`);
// Advanced testing analysis
console.log(`\n㪠Advanced Testing Analysis:`);
const edgeCaseResult = allResults.find(r => r.suite === "Edge Cases");
const performanceResult = allResults.find(r => r.suite === "Performance & Stress");
if (edgeCaseResult) {
console.log(` π‘οΈ Edge Case Testing: ${edgeCaseResult.passed ? 'β
ROBUST' : 'β VULNERABLE'}`);
if (edgeCaseResult.passed) {
console.log(` β
System handles invalid inputs gracefully`);
console.log(` β
Boundary conditions are properly managed`);
console.log(` β
Error handling is consistent and secure`);
} else {
console.log(` β οΈ Review edge case failures for potential security vulnerabilities`);
}
}
if (performanceResult) {
console.log(` π Performance Testing: ${performanceResult.passed ? 'β
SCALABLE' : 'β CONCERNING'}`);
if (performanceResult.passed) {
console.log(` β
System performs well under load`);
console.log(` β
Bulk operations are efficient`);
console.log(` β
Response times are consistent`);
} else {
console.log(` β οΈ Performance issues detected - may impact production scalability`);
}
}
// Overall system health assessment
console.log(`\nπ₯ System Health Assessment:`);
if (totalPassed === totalSuites) {
console.log(` π― EXCELLENT: All advanced tests passed!`);
console.log(` π Production Readiness: β
READY`);
console.log(` π Security Posture: β
ROBUST`);
console.log(` π Performance Profile: β
SCALABLE`);
console.log(` π Quality Score: 100% (${totalPassed}/${totalSuites} passed)`);
} else if (totalPassed >= totalSuites * 0.5) {
console.log(` β οΈ ACCEPTABLE: Some advanced tests failed`);
console.log(` π Production Readiness: β οΈ WITH CAUTION`);
console.log(` π Quality Score: ${((totalPassed/totalSuites)*100).toFixed(1)}% (${totalPassed}/${totalSuites} passed)`);
console.log(` π§ Recommendation: Review and fix failed test areas before production deployment`);
} else {
console.log(` β CONCERNING: Multiple advanced tests failed`);
console.log(` π Production Readiness: β NOT RECOMMENDED`);
console.log(` π Quality Score: ${((totalPassed/totalSuites)*100).toFixed(1)}% (${totalPassed}/${totalSuites} passed)`);
console.log(` π¨ Recommendation: Significant improvements needed before production use`);
}
// Testing progression summary
console.log(`\nπ― CRM MCP Testing Progression Summary:`);
console.log(` β
Phase A: Client Setup & Connection - COMPLETED`);
console.log(` β
Phase B: Core Tool Testing (14/14 tools) - COMPLETED`);
console.log(` ${totalPassed === totalSuites ? 'β
' : 'β οΈ'} Phase C: Advanced Testing - ${totalPassed === totalSuites ? 'COMPLETED' : 'PARTIAL'}`);
if (totalPassed === totalSuites) {
console.log(`\nπ COMPREHENSIVE TESTING COMPLETE!`);
console.log(`π CRM MCP Server has passed all phases of testing:`);
console.log(` π All 14 CRM tools are fully functional`);
console.log(` π‘οΈ Security and edge cases are handled properly`);
console.log(` π Performance meets production standards`);
console.log(` β
System is ready for production deployment!`);
} else {
console.log(`\nβ οΈ TESTING PARTIALLY COMPLETE`);
console.log(`π§ Areas needing attention:`);
for (const result of allResults.filter(r => !r.passed)) {
console.log(` β ${result.category}: ${result.suite}`);
}
}
console.log("\n" + "=" .repeat(80));
process.exit(totalPassed === totalSuites ? 0 : 1);