#!/usr/bin/env node
import { execSync } from "child_process";
console.log("π CRM MCP Server - Phase B: Core Tool Testing");
console.log("=" .repeat(80));
console.log(`π
Started at: ${new Date().toISOString()}`);
console.log("π§ͺ Running comprehensive test suite for all 14 CRM tools...\n");
const testSuites = [
{
name: "Contact Management",
description: "Tests 7 contact CRUD operations, search, and organization filtering tools",
command: "npx tsx scenarios/contact-management.test.ts",
category: "B1: Core Contact Management"
},
{
name: "Contact History",
description: "Tests 3 interaction tracking, history retrieval, and recent activities tools",
command: "npx tsx scenarios/contact-history.test.ts",
category: "B2: Contact History Management"
},
{
name: "Export Functionality",
description: "Tests 3 CSV export features for contacts, history, and full CRM export",
command: "npx tsx scenarios/export-functionality.test.ts",
category: "B3: Data Export Features"
}
];
let totalPassed = 0;
let totalSuites = testSuites.length;
let allResults: Array<{suite: string, passed: boolean, duration: number}> = [];
const startTime = Date.now();
for (const suite of testSuites) {
console.log(`\nπ§ ${suite.category}`);
console.log(`π Suite: ${suite.name}`);
console.log(`π Description: ${suite.description}`);
console.log("-" .repeat(60));
const suiteStartTime = Date.now();
try {
execSync(suite.command, {
stdio: 'pipe',
cwd: process.cwd()
});
const duration = Date.now() - suiteStartTime;
console.log(`β
PASSED ${suite.name} (${duration}ms)`);
totalPassed++;
allResults.push({suite: suite.name, passed: true, duration});
} catch (error) {
const duration = Date.now() - suiteStartTime;
console.log(`β FAILED ${suite.name} (${duration}ms)`);
console.log(` Error: ${error instanceof Error ? error.message : String(error)}`);
allResults.push({suite: suite.name, passed: false, duration});
}
}
const totalDuration = Date.now() - startTime;
console.log("\n" + "=" .repeat(80));
console.log("π PHASE B: CORE TOOL 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 ? "β
" : "β";
console.log(` ${status} ${result.suite.padEnd(25)} ${result.duration.toString().padStart(6)}ms`);
}
const averageDuration = allResults.reduce((sum, r) => sum + r.duration, 0) / allResults.length;
console.log(`\nβ‘ Performance Summary:`);
console.log(` π Average Suite Duration: ${averageDuration.toFixed(2)}ms`);
// Tool summary
const toolCounts = {
"Contact Management": 7,
"Contact History": 3,
"Export Functionality": 3
};
let totalToolsTested = 0;
for (const result of allResults) {
if (result.passed) {
totalToolsTested += toolCounts[result.suite as keyof typeof toolCounts] || 0;
}
}
console.log(`\nπ οΈ Tools Validated:`);
console.log(` π Total CRM Tools: 13`);
console.log(` β
Successfully Tested: ${totalToolsTested}/13`);
console.log(` π Coverage: ${((totalToolsTested / 13) * 100).toFixed(1)}%`);
if (totalPassed === totalSuites) {
console.log(`\nπ― PHASE B STATUS: β
COMPLETE SUCCESS!`);
console.log("π All 14 CRM MCP tools are fully operational!");
console.log("β
Contact management (add, list, search, update, archive) - WORKING");
console.log("β
Organization filtering and contact details - WORKING");
console.log("β
Contact history tracking (add, retrieve, recent activities) - WORKING");
console.log("β
CSV export functionality (contacts, history, full CRM) - WORKING");
console.log("\nπ CRM MCP Server is ready for Phase C: Advanced Testing!");
} else {
console.log(`\nβ οΈ PHASE B STATUS: PARTIAL SUCCESS`);
console.log(`${totalPassed}/${totalSuites} test suites passed`);
console.log("β Review failed test suites before proceeding to next phase");
}
console.log("\n" + "=" .repeat(80));
process.exit(totalPassed === totalSuites ? 0 : 1);