168 lines
6.9 KiB
JavaScript
168 lines
6.9 KiB
JavaScript
const queueManager = require('./backend/queueManager');
|
|
const botLogic = require('./backend/botLogic');
|
|
const configManager = require('./backend/configManager');
|
|
|
|
console.log("=== STARTING BACKEND UNIT TESTS ===");
|
|
|
|
// 1. Test QueueManager - Online Booking Limits
|
|
console.log("\nTesting QueueManager: Online Booking Limits");
|
|
const date = "2026-05-13";
|
|
const time = "10:00";
|
|
|
|
for (let i = 0; i < 4; i++) {
|
|
const res = queueManager.bookOnline(date, time);
|
|
console.log(`Booking ${i+1}:`, res.success ? `Success - ${res.token}` : `Failed - ${res.message}`);
|
|
}
|
|
|
|
// 2. Test QueueManager - Walkin Booking
|
|
console.log("\nTesting QueueManager: Walk-in Booking");
|
|
const walkRes = queueManager.bookWalkin(date, time);
|
|
console.log("Walkin result:", walkRes.token);
|
|
|
|
// 3. Test Bot Logic - WhatsApp Simulation
|
|
console.log("\nTesting BotLogic: WhatsApp Interactions");
|
|
async function testBot() {
|
|
const msg1 = await botLogic.handleMessage("9876543210", "Hi");
|
|
console.log("User: Hi -> Bot:", msg1.reply);
|
|
|
|
const msg2 = await botLogic.handleMessage("9876543210", "Book Token");
|
|
console.log("User: Book Token -> Bot:", msg2.reply);
|
|
console.log("Buttons:", msg2.buttons);
|
|
}
|
|
|
|
testBot();
|
|
|
|
// 4. Test ConfigManager - Multi-tenancy
|
|
console.log("\nTesting ConfigManager: Multi-tenancy");
|
|
const sharmaConfig = configManager.getTenantConfig('sharma-clinic');
|
|
console.log("Sharma Clinic Name:", sharmaConfig.name);
|
|
|
|
// 5. Test Multi-tenant Booking
|
|
console.log("\nTesting Multi-tenant Booking (Sharma Clinic)");
|
|
const sharmaRes = queueManager.bookOnline(date, time, 'sharma-clinic');
|
|
console.log("Sharma Booking Result:", sharmaRes.success ? `Success - ${sharmaRes.token} (Fee: ${sharmaRes.fee})` : "Failed");
|
|
|
|
// 6. Test Scheduling Logic
|
|
console.log("\nTesting Scheduling Logic: Closed Hours");
|
|
const closedTime = "14:00"; // 2 PM is closed (1-5 PM break)
|
|
const closedRes = queueManager.bookOnline(date, closedTime);
|
|
console.log(`Booking at 2 PM (Closed):`, closedRes.success ? "Failed (Should be closed)" : `Success - ${closedRes.message}`);
|
|
|
|
console.log("\nTesting Scheduling Logic: Holidays");
|
|
const holidayDate = "2024-12-25"; // Christmas is a holiday in default config
|
|
const holidayRes = queueManager.bookOnline(holidayDate, "10:00");
|
|
console.log(`Booking on Christmas (Holiday):`, holidayRes.success ? "Failed (Should be holiday)" : `Success - ${holidayRes.message}`);
|
|
|
|
console.log("\nTesting Scheduling Logic: Days Off (Sunday)");
|
|
const sundayDate = "2026-05-17"; // May 17, 2026 is Sunday
|
|
const sundayRes = queueManager.bookOnline(sundayDate, "10:00");
|
|
console.log(`Booking on Sunday (Day Off):`, sundayRes.success ? "Failed (Should be off)" : `Success - ${sundayRes.message}`);
|
|
|
|
// 7. Test Cancellation & Reschedule Notification
|
|
console.log("\nTesting Cancellation & Reschedule Notification");
|
|
const cancelDate = "2026-05-13";
|
|
const cancelTime = "09:00";
|
|
|
|
// Ensure there is a booking to cancel
|
|
queueManager.bookOnline(cancelDate, cancelTime);
|
|
const cancelRes = queueManager.cancelBooking(cancelDate, cancelTime);
|
|
console.log("Cancel result:", cancelRes.message);
|
|
|
|
// 8. Test Reschedule Acceptance
|
|
console.log("\nTesting Reschedule Acceptance");
|
|
const patientPhone = "9876543210";
|
|
botLogic.setRescheduleOffer(patientPhone, {
|
|
date: cancelDate,
|
|
oldTime: "19:00",
|
|
newTime: cancelTime
|
|
});
|
|
async function testReschedule() {
|
|
const res = await botLogic.handleMessage(patientPhone, "1"); // User says "Yes" (1)
|
|
console.log("User: 1 -> Bot:", res.reply);
|
|
}
|
|
testReschedule();
|
|
|
|
// 9. Test Future Booking Flow
|
|
console.log("\nTesting Future Booking Flow");
|
|
async function testFutureBooking() {
|
|
const pId = "1234567890";
|
|
const msg1 = await botLogic.handleMessage(pId, "Hi");
|
|
const msg2 = await botLogic.handleMessage(pId, "English");
|
|
const msg3 = await botLogic.handleMessage(pId, "Book for Future");
|
|
console.log("User: Book for Future -> Bot:", msg3.reply);
|
|
console.log("Date Options:", msg3.buttons);
|
|
|
|
const selectedDate = msg3.buttons[0];
|
|
const msg4 = await botLogic.handleMessage(pId, selectedDate);
|
|
console.log(`User: ${selectedDate} -> Bot:`, msg4.reply);
|
|
|
|
const msg5 = await botLogic.handleMessage(pId, "10:00 AM");
|
|
console.log("User: 10:00 AM -> Bot:", msg5.reply);
|
|
}
|
|
testFutureBooking();
|
|
|
|
// 10. Test Family Profiles Flow
|
|
console.log("\nTesting Family Profiles Flow");
|
|
async function testFamilyProfiles() {
|
|
const familyPhone = "9876543210"; // Has existing profiles in PatientManager mock
|
|
const msg1 = await botLogic.handleMessage(familyPhone, "Hi");
|
|
const msg2 = await botLogic.handleMessage(familyPhone, "English");
|
|
console.log("User: English -> Bot:", msg2.reply);
|
|
console.log("Profile Buttons:", msg2.buttons);
|
|
|
|
const msg3 = await botLogic.handleMessage(familyPhone, "Suman Verma");
|
|
console.log("User: Suman Verma -> Bot:", msg3.reply);
|
|
|
|
// Test Adding New Member
|
|
const newPhone = "9999988888"; // New number
|
|
const reg1 = await botLogic.handleMessage(newPhone, "Hi");
|
|
const reg2 = await botLogic.handleMessage(newPhone, "English");
|
|
console.log("New User: English -> Bot:", reg2.reply);
|
|
|
|
const reg3 = await botLogic.handleMessage(newPhone, "John Doe");
|
|
console.log("New User: John Doe -> Bot:", reg3.reply);
|
|
|
|
const reg4 = await botLogic.handleMessage(newPhone, "Book for Today");
|
|
console.log("New User: Book for Today -> Bot:", reg4.reply);
|
|
}
|
|
testFamilyProfiles();
|
|
|
|
// 11. Test Agentic Pharmacy Flow
|
|
console.log("\nTesting Agentic Pharmacy Flow");
|
|
const pharmacyAgent = require('./backend/pharmacyAgent');
|
|
const pharmacyManager = require('./backend/pharmacyManager');
|
|
|
|
async function testPharmacyAgent() {
|
|
// A. Test Patient Query
|
|
const pId = "1234567890";
|
|
const q1 = await botLogic.handleMessage(pId, "Do you have Paracetamol?");
|
|
console.log("User: Do you have Paracetamol? -> Bot:", q1.reply);
|
|
|
|
const q2 = await botLogic.handleMessage(pId, "Do you have Cough Syrup?");
|
|
console.log("User: Do you have Cough Syrup? -> Bot:", q2.reply);
|
|
|
|
// B. Test Autonomous Stock Scanning
|
|
console.log("\n--- Triggering Autonomous Inventory Scan ---");
|
|
// Manually set one item to very low stock
|
|
const inventory = pharmacyManager.getInventory();
|
|
inventory[0].stock = 2; // Paracetamol 500mg
|
|
|
|
await pharmacyAgent.analyzeInventory();
|
|
|
|
console.log("Waiting for autonomous restock simulation...");
|
|
setTimeout(() => {
|
|
console.log("Post-Restock Stock Level:", inventory[0].stock);
|
|
}, 4000);
|
|
|
|
// C. Test GST Billing
|
|
console.log("\nTesting GST Billing Calculation");
|
|
const bill = pharmacyManager.calculateBill('M04', 10); // Vitamin C (18% GST)
|
|
console.log(`Item: ${bill.itemName} (HSN: ${bill.hsn})`);
|
|
console.log(`Subtotal: ₹${bill.subtotal}, GST (${bill.gstRate}%): ₹${bill.gstAmount}, Total: ₹${bill.total}`);
|
|
|
|
// D. Test Expiry Analysis
|
|
console.log("\nTesting Autonomous Expiry Scan");
|
|
pharmacyAgent.analyzeExpiries(pharmacyManager.getInventory());
|
|
}
|
|
testPharmacyAgent();
|