#!/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 [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 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); });