Files
mcp-tool/run-tests-simple.js
nasir@endelospay.com 728ff90ce5 fix
2025-07-12 01:59:18 +05:00

297 lines
7.5 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* @fileoverview Simple test execution script for Laravel Healthcare MCP Server
* Provides basic command-line interface without external dependencies
*/
import { spawn } from "child_process";
import fs from "fs/promises";
import path from "path";
/**
* Simple argument parser
*/
function parseArgs() {
const args = process.argv.slice(2);
const command = args[0] || "help";
const options = {};
// Parse options
for (let i = 1; i < args.length; i++) {
const arg = args[i];
if (arg === "--coverage" || arg === "-c") {
options.coverage = true;
} else if (arg === "--verbose" || arg === "-v") {
options.verbose = true;
} else if (arg === "--watch" || arg === "-w") {
options.watch = true;
}
}
return { command, options };
}
/**
* Test suite configurations
*/
const testSuites = {
public: {
name: "Public Tools Tests",
pattern: "tests/public/**/*.test.js",
description: "Tests for public authentication and registration tools",
},
provider: {
name: "Provider Tools Tests",
pattern: "tests/provider/**/*.test.js",
description: "Tests for provider EMR, prescription, and appointment tools",
},
patient: {
name: "Patient Tools Tests",
pattern: "tests/patient/**/*.test.js",
description: "Tests for patient portal and data management tools",
},
business: {
name: "Business Operations Tests",
pattern: "tests/partner-affiliate-network/**/*.test.js",
description: "Tests for partner, affiliate, and network business tools",
},
healthcare: {
name: "Healthcare-Specific Tests",
pattern: "tests/healthcare-specific/**/*.test.js",
description: "Tests for HIPAA compliance and clinical workflows",
},
errors: {
name: "Error Handling Tests",
pattern: "tests/error-handling/**/*.test.js",
description: "Tests for authentication, API, and network error scenarios",
},
};
/**
* Execute Jest command
*/
async function executeJest(args) {
return new Promise((resolve, reject) => {
console.log(
`🧪 Running: node --experimental-vm-modules ./node_modules/jest/bin/jest.js ${args.join(
" "
)}\n`
);
const jest = spawn(
"node",
["--experimental-vm-modules", "./node_modules/jest/bin/jest.js", ...args],
{
stdio: "inherit",
shell: true,
}
);
jest.on("close", (code) => {
if (code === 0) {
console.log("\n✅ Tests completed successfully!");
resolve(code);
} else if (code === 1) {
console.log("\n⚠ Some tests failed, but Jest ran successfully.");
resolve(code);
} else {
console.log(`\n❌ Jest failed with exit code ${code}`);
reject(new Error(`Jest failed with code ${code}`));
}
});
jest.on("error", (error) => {
console.error("❌ Failed to start Jest:", error.message);
reject(error);
});
});
}
/**
* Run all tests
*/
async function runAllTests(options = {}) {
console.log("🏥 Laravel Healthcare MCP Server - All Tests");
console.log("=".repeat(50));
const jestArgs = [];
if (options.coverage) {
jestArgs.push("--coverage");
}
if (options.verbose) {
jestArgs.push("--verbose");
}
if (options.watch) {
jestArgs.push("--watch");
}
try {
const exitCode = await executeJest(jestArgs);
process.exit(exitCode);
} catch (error) {
console.error("❌ Test execution failed:", error.message);
process.exit(1);
}
}
/**
* Run specific test suite
*/
async function runTestSuite(suiteName, options = {}) {
const suite = testSuites[suiteName];
if (!suite) {
console.error(`❌ Unknown test suite: ${suiteName}`);
console.log("\nAvailable suites:");
Object.keys(testSuites).forEach((name) => {
console.log(` - ${name}: ${testSuites[name].description}`);
});
process.exit(1);
}
console.log(`🧪 ${suite.name}`);
console.log(`📝 ${suite.description}`);
console.log("=".repeat(50));
const jestArgs = ["--testPathPattern", suite.pattern];
if (options.coverage) {
jestArgs.push("--coverage");
}
if (options.verbose) {
jestArgs.push("--verbose");
}
if (options.watch) {
jestArgs.push("--watch");
}
try {
const exitCode = await executeJest(jestArgs);
process.exit(exitCode);
} catch (error) {
console.error("❌ Test execution failed:", error.message);
process.exit(1);
}
}
/**
* Run quick test suite
*/
async function runQuickTests() {
console.log("⚡ Laravel Healthcare MCP Server - Quick Tests");
console.log("📝 Running essential tests only (no coverage)");
console.log("=".repeat(50));
const essentialSuites = ["public", "provider", "patient"];
const patterns = essentialSuites.map((suite) => testSuites[suite].pattern);
const jestArgs = ["--testPathPattern", `"(${patterns.join("|")})"`];
try {
const exitCode = await executeJest(jestArgs);
process.exit(exitCode);
} catch (error) {
console.error("❌ Test execution failed:", error.message);
process.exit(1);
}
}
/**
* Generate coverage report
*/
async function runCoverage() {
console.log("📊 Laravel Healthcare MCP Server - Coverage Report");
console.log("=".repeat(50));
const jestArgs = ["--coverage", "--silent"];
try {
const exitCode = await executeJest(jestArgs);
console.log("\n📊 Coverage report generated in ./coverage/");
process.exit(exitCode);
} catch (error) {
console.error("❌ Coverage generation failed:", error.message);
process.exit(1);
}
}
/**
* Show help
*/
function showHelp() {
console.log("🏥 Laravel Healthcare MCP Server Test Suite");
console.log("=".repeat(50));
console.log("\nUsage: node run-tests-simple.js <command> [options]");
console.log("\nCommands:");
console.log(" all Run all test suites");
console.log(" quick Run essential tests only");
console.log(" coverage Generate coverage report");
console.log(" suite <name> Run specific test suite");
console.log(" help Show this help message");
console.log("\nTest Suites:");
Object.entries(testSuites).forEach(([name, suite]) => {
console.log(` ${name.padEnd(12)} ${suite.description}`);
});
console.log("\nOptions:");
console.log(" -c, --coverage Generate coverage report");
console.log(" -v, --verbose Verbose output");
console.log(" -w, --watch Watch mode");
console.log("\nExamples:");
console.log(" node run-tests-simple.js all --coverage");
console.log(" node run-tests-simple.js suite provider --verbose");
console.log(" node run-tests-simple.js quick");
console.log(" node run-tests-simple.js coverage");
}
/**
* Main function
*/
async function main() {
const { command, options } = parseArgs();
try {
switch (command) {
case "all":
await runAllTests(options);
break;
case "suite":
const suiteName = process.argv[3];
if (!suiteName) {
console.error("❌ Please specify a suite name");
showHelp();
process.exit(1);
}
await runTestSuite(suiteName, options);
break;
case "quick":
await runQuickTests();
break;
case "coverage":
await runCoverage();
break;
case "help":
default:
showHelp();
break;
}
} catch (error) {
console.error("❌ Unexpected error:", error.message);
process.exit(1);
}
}
// Run the main function
main().catch((error) => {
console.error("❌ Unexpected error:", error);
process.exit(1);
});