Files
clinera-site/test-ui-exact.js
T

214 lines
7.3 KiB
JavaScript

// Test exact UI workflow with authentication
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function testUIExactWorkflow() {
console.log('🔍 TESTING EXACT UI WORKFLOW');
console.log('='.repeat(50));
try {
// 1. Get data like UI would
console.log('1️⃣ Getting clinic data...');
const clinic = await prisma.clinic.findFirst();
console.log(` Clinic: ${clinic.name} (WAHA: ${clinic.wahaStatus})`);
// 2. Get treatments like UI would
console.log('2️⃣ Getting treatments...');
const treatments = await prisma.treatment.findMany({
where: { clinicId: clinic.id, isActive: true }
});
console.log(` Available treatments: ${treatments.length}`);
// 3. Get leads like UI would
console.log('3️⃣ Getting leads...');
const leads = await prisma.lead.findMany({
where: { clinicId: clinic.id }
});
console.log(` Available leads: ${leads.length}`);
if (treatments.length === 0 || leads.length === 0) {
console.log('❌ Missing data for test');
return;
}
// 4. Check reminder templates
console.log('4️⃣ Checking reminder templates...');
const templates = await prisma.reminderTemplate.findMany({
where: { clinicId: clinic.id, isActive: true }
});
console.log(` Active templates: ${templates.length}`);
if (templates.length === 0) {
console.log('❌ NO ACTIVE TEMPLATES! This is the problem.');
console.log('🔧 Running fix...');
const { execSync } = require('child_process');
execSync('node fix-templates.js');
console.log('✅ Templates fixed, retesting...');
return;
}
templates.forEach(t => {
console.log(` - ${t.trigger} (offset: ${t.offsetMinutes} min)`);
});
// 5. Login exactly like UI
console.log('5️⃣ Logging in like UI...');
const loginResponse = await fetch('http://localhost:3000/api/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'admin@clinera.com',
password: 'admin123'
})
});
if (!loginResponse.ok) {
console.log('❌ Login failed');
return;
}
const cookies = loginResponse.headers.get('set-cookie');
console.log('✅ Authenticated');
// 6. Create appointment exactly like UI
console.log('6️⃣ Creating appointment via API...');
const appointmentData = {
leadId: leads[0].id,
treatmentId: treatments[0].id,
dateTime: new Date(Date.now() + 30 * 60 * 1000).toISOString(), // 30 min from now
notes: 'UI Test Appointment'
};
console.log(` Lead: ${leads[0].name} (${leads[0].phone})`);
console.log(` Treatment: ${treatments[0].name}`);
console.log(` DateTime: ${appointmentData.dateTime}`);
const beforeCounts = {
appointments: await prisma.appointment.count(),
reminders: await prisma.scheduledReminder.count(),
messages: await prisma.messageLog.count()
};
const appointmentResponse = await fetch('http://localhost:3000/api/appointments', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cookie': cookies
},
body: JSON.stringify(appointmentData)
});
if (!appointmentResponse.ok) {
const error = await appointmentResponse.text();
console.log('❌ Appointment creation failed:', appointmentResponse.status, error);
return;
}
const appointment = await appointmentResponse.json();
console.log(`✅ Appointment created: ${appointment.id}`);
// 7. Check what changed immediately
console.log('7️⃣ Checking immediate changes...');
await new Promise(resolve => setTimeout(resolve, 2000)); // Wait 2 seconds
const afterCounts = {
appointments: await prisma.appointment.count(),
reminders: await prisma.scheduledReminder.count(),
messages: await prisma.messageLog.count()
};
console.log(` Appointments: ${beforeCounts.appointments}${afterCounts.appointments}`);
console.log(` Reminders: ${beforeCounts.reminders}${afterCounts.reminders}`);
console.log(` Messages: ${beforeCounts.messages}${afterCounts.messages}`);
// 8. Get appointment details
const fullAppointment = await prisma.appointment.findUnique({
where: { id: appointment.id },
include: {
lead: true,
treatment: true,
clinic: true,
scheduledReminders: {
include: { template: true }
}
}
});
console.log('8️⃣ Appointment details:');
console.log(` Confirm Token: ${fullAppointment.confirmToken ? '✅' : '❌'}`);
console.log(` Reminders: ${fullAppointment.scheduledReminders.length}`);
if (fullAppointment.scheduledReminders.length === 0) {
console.log('❌ NO REMINDERS SCHEDULED!');
console.log('🔍 Investigating...');
// Test reminder scheduling manually
console.log('🧪 Testing scheduleReminders function manually...');
try {
// Import and test the function directly
const { scheduleReminders } = await import('./src/lib/reminders.js');
await scheduleReminders(appointment.id);
console.log('✅ Manual reminder scheduling completed');
// Check again
const updatedAppointment = await prisma.appointment.findUnique({
where: { id: appointment.id },
include: { scheduledReminders: { include: { template: true } } }
});
console.log(` Now has ${updatedAppointment.scheduledReminders.length} reminders`);
} catch (error) {
console.log(`❌ Manual scheduling failed: ${error.message}`);
}
} else {
console.log('✅ Reminders properly scheduled:');
fullAppointment.scheduledReminders.forEach(r => {
console.log(` - ${r.template.trigger} at ${r.scheduledFor} (${r.status})`);
});
}
// 9. Test cron
console.log('9️⃣ Testing cron...');
const cronResponse = await fetch('http://localhost:3000/api/cron/send-reminders?key=dev-cron-key', {
method: 'POST'
});
if (cronResponse.ok) {
const cronResult = await cronResponse.json();
console.log(`✅ Cron result: sent=${cronResult.sent}, failed=${cronResult.failed}, skipped=${cronResult.skipped}`);
} else {
console.log('❌ Cron failed');
}
// 10. Final status
const finalCounts = {
appointments: await prisma.appointment.count(),
reminders: await prisma.scheduledReminder.count(),
messages: await prisma.messageLog.count()
};
console.log('\n📊 FINAL RESULTS:');
console.log(` Appointments: ${beforeCounts.appointments}${finalCounts.appointments}`);
console.log(` Reminders: ${beforeCounts.reminders}${finalCounts.reminders}`);
console.log(` Messages: ${beforeCounts.messages}${finalCounts.messages}`);
if (finalCounts.messages > beforeCounts.messages) {
console.log('🎉 SUCCESS! Messages were sent!');
} else {
console.log('❌ FAILURE! No messages sent!');
}
} catch (error) {
console.error('❌ Test failed:', error);
} finally {
await prisma.$disconnect();
}
}
testUIExactWorkflow().catch(console.error);