const fs = require('fs'); const path = require('path'); const BASE_URL = 'http://curaflow.applaude.net'; // Helper function to make requests async function makeRequest(endpoint, method = 'GET', body = null, token = null) { const headers = { 'Accept': 'application/json' }; if (body) { headers['Content-Type'] = 'application/json'; } if (token) { headers['Authorization'] = `Bearer ${token}`; } const options = { method, headers }; if (body) { options.body = JSON.stringify(body); } try { const response = await fetch(`${BASE_URL}${endpoint}`, options); let data = null; const contentType = response.headers.get('content-type'); if (contentType && contentType.includes('application/json')) { data = await response.json(); } else { data = await response.text(); } return { status: response.status, data }; } catch (err) { return { status: 500, data: err.message }; } } async function runTests() { console.log("=========================================="); console.log("🏥 CURAFLOW COMPREHENSIVE E2E TEST SUITE"); console.log("==========================================\n"); let allPassed = true; let tokens = {}; function assert(condition, message) { if (!condition) { console.log(`❌ FAIL: ${message}`); allPassed = false; } else { console.log(`✅ PASS: ${message}`); } } // --- 1. TEST AUTHENTICATION --- console.log("--- 1. Testing Authentication ---"); const roles = ['doctor', 'lab', 'pharmacy', 'admin', 'reception']; for (const role of roles) { const res = await makeRequest('/api/auth/login', 'POST', { username: role, password: 'password123' }); assert(res.status === 200 && res.data.success, `Login as ${role}`); if (res.data.success) { tokens[role] = res.data.token; } } console.log(""); // --- 2. TEST OPD QUEUE --- console.log("--- 2. Testing OPD Queue & Booking ---"); const testPatient = { name: "E2E Test Patient", age: 45, phone: "whatsapp:+919999999999" }; const bookRes = await makeRequest('/api/opd/book', 'POST', { name: testPatient.name, contact: testPatient.phone, date: "2026-10-10", time: "10:30" }); assert(bookRes.status === 200 && bookRes.data.success, "Book OPD Appointment"); const queueRes = await makeRequest('/api/opd/queue'); assert(queueRes.status === 200 && Array.isArray(queueRes.data.queue), "Fetch OPD Queue"); const isInQueue = queueRes.data.queue.some(p => p.patientName === testPatient.name); assert(isInQueue, "Patient appears in OPD Queue"); console.log(""); // --- 3. TEST DOCTOR PRESCRIPTION --- console.log("--- 3. Testing Doctor Prescription & Labs ---"); const patientId = `PT-${Math.floor(Math.random() * 10000)}`; const rxRes = await makeRequest('/api/rx/generate', 'POST', { patientId: patientId, doctorId: "DR-TEST", medicines: [ { name: "Paracetamol", dosage: "500mg", frequency: "1-0-1", duration: "5 Days", qty: 10 } ], diagnosis: "Viral Fever", labTests: [ { testName: "Complete Blood Count", instructions: "Fasting" } ] }); assert(rxRes.status === 200 && rxRes.data.success, "Generate Prescription & Lab Order"); console.log(""); // --- 4. TEST PHARMACY --- console.log("--- 4. Testing Pharmacy ---"); const pharmRes = await makeRequest('/api/pharmacy/prescriptions'); assert(pharmRes.status === 200 && Array.isArray(pharmRes.data.prescriptions), "Fetch Pending Prescriptions"); // Attempt fulfillment if we got an Rx ID earlier if (rxRes.data.success && rxRes.data.data && rxRes.data.data.id) { const fulfillRes = await makeRequest('/api/pharmacy/fulfill', 'POST', { rxId: rxRes.data.data.id }); assert(fulfillRes.status === 200 && fulfillRes.data.success, "Fulfill Prescription & Generate Bill"); } console.log(""); // --- 5. TEST LAB ANOMALY DETECTION (TEMPORAL INTEGRATION) --- console.log("--- 5. Testing Lab Anomaly Detection (AI Engine) ---"); console.log("Note: This invokes the Temporal Worker and LLM which may take 60+ seconds."); const labProcessRes = await makeRequest('/api/lab/process', 'POST', { patientId: patientId, testName: "Complete Blood Count", results: { "Hemoglobin": "8.2 g/dL", // Low! Should trigger anomaly "Platelets": "150,000 /mcL" } }); assert(labProcessRes.status === 200 && labProcessRes.data.success, "Submit Lab Results (Start Temporal Workflow)"); // Polling for the AI Alert (Wait a few seconds for the worker to process it if we were on GPT-4, // but local 3B model takes ~60-90s, so we'll just check if the endpoint is responsive) const alertRes = await makeRequest(`/api/ai/lab/alerts/${patientId}`); assert(alertRes.status === 200 && alertRes.data.success, "Poll Lab Alerts Endpoint"); console.log(""); console.log("=========================================="); if (allPassed) { console.log("🎉 ALL TESTS PASSED SUCCESSFULLY! THE APP IS FULLY FUNCTIONAL."); } else { console.log("⚠️ SOME TESTS FAILED. PLEASE REVIEW THE LOGS ABOVE."); } console.log("==========================================\n"); } runTests();