![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.ca/private_html/scripts/ |
const fs = require('fs');
const path = require('path');
console.log('๐งช Live Chat System Verification');
console.log('='.repeat(50));
// Test results
let results = {
passed: 0,
failed: 0,
total: 0,
details: []
};
const test = (name, condition) => {
results.total++;
if (condition) {
results.passed++;
console.log(`โ
${name}`);
results.details.push({ name, status: 'PASS' });
} else {
results.failed++;
console.log(`โ ${name}`);
results.details.push({ name, status: 'FAIL' });
}
};
// Test 1: Check if all required files exist
console.log('\n๐ File Structure Tests:');
test('LiveCaseChat component exists',
fs.existsSync(path.join(__dirname, '../src/components/LiveCaseChat.tsx')));
test('WebSocket context exists',
fs.existsSync(path.join(__dirname, '../src/context/EnhancedWebSocketContext.tsx')));
test('WebSocket API endpoint exists',
fs.existsSync(path.join(__dirname, '../src/pages/api/_ws.ts')));
test('Chat messages API exists',
fs.existsSync(path.join(__dirname, '../src/pages/api/public/cases/[id]/chat-messages.ts')));
test('Database schema updated',
fs.existsSync(path.join(__dirname, '../prisma/schema.prisma')));
// Test 2: Check file contents for key features
console.log('\n๐ Content Verification Tests:');
const liveChatContent = fs.readFileSync(path.join(__dirname, '../src/components/LiveCaseChat.tsx'), 'utf8');
test('LiveCaseChat has WebSocket integration',
liveChatContent.includes('useWebSocket'));
test('LiveCaseChat has message sending',
liveChatContent.includes('sendMessage'));
test('LiveCaseChat has typing indicators',
liveChatContent.includes('typing'));
test('LiveCaseChat has quick actions',
liveChatContent.includes('interested'));
const wsContextContent = fs.readFileSync(path.join(__dirname, '../src/context/EnhancedWebSocketContext.tsx'), 'utf8');
test('WebSocket context has case chat methods',
wsContextContent.includes('joinCaseChat'));
test('WebSocket context has typing support',
wsContextContent.includes('sendCaseTyping'));
const wsApiContent = fs.readFileSync(path.join(__dirname, '../src/pages/api/_ws.ts'), 'utf8');
test('WebSocket API handles case messages',
wsApiContent.includes('CASE_MESSAGE'));
test('WebSocket API handles case typing',
wsApiContent.includes('CASE_TYPING'));
const schemaContent = fs.readFileSync(path.join(__dirname, '../prisma/schema.prisma'), 'utf8');
test('Database has CaseChatMessage model',
schemaContent.includes('model CaseChatMessage'));
test('CaseChatMessage has required fields',
schemaContent.includes('caseId') && schemaContent.includes('content'));
// Test 3: Check integration points
console.log('\n๐ Integration Tests:');
const caseDetailContent = fs.readFileSync(path.join(__dirname, '../src/components/CaseDetail.tsx'), 'utf8');
test('CaseDetail imports LiveCaseChat',
caseDetailContent.includes('import LiveCaseChat'));
test('CaseDetail renders LiveCaseChat for public mode',
caseDetailContent.includes('LiveCaseChat'));
// Test 4: Check API endpoint structure
console.log('\n๐ก API Structure Tests:');
const chatMessagesApiContent = fs.readFileSync(path.join(__dirname, '../src/pages/api/public/cases/[id]/chat-messages.ts'), 'utf8');
test('Chat messages API has proper exports',
chatMessagesApiContent.includes('export default'));
test('Chat messages API handles authentication',
chatMessagesApiContent.includes('getSession'));
test('Chat messages API has pagination',
chatMessagesApiContent.includes('page') && chatMessagesApiContent.includes('limit'));
// Test 5: Check for common patterns and best practices
console.log('\n๐๏ธ Code Quality Tests:');
test('LiveCaseChat has proper TypeScript interfaces',
liveChatContent.includes('interface'));
test('WebSocket context has proper error handling',
wsContextContent.includes('catch') || wsContextContent.includes('error'));
test('API endpoints have proper HTTP methods',
chatMessagesApiContent.includes('req.method'));
test('Components have proper React patterns',
liveChatContent.includes('useState') && liveChatContent.includes('useEffect'));
// Test 6: Check for security features
console.log('\n๐ Security Tests:');
test('API endpoints check authentication',
chatMessagesApiContent.includes('session?.user?.id'));
test('WebSocket API has authentication middleware',
wsApiContent.includes('getSession'));
test('Case access is verified',
chatMessagesApiContent.includes('isPublic'));
// Print results
console.log('\n' + '='.repeat(50));
console.log('๐ Verification Results:');
console.log(`โ
Passed: ${results.passed}`);
console.log(`โ Failed: ${results.failed}`);
console.log(`๐ Total: ${results.total}`);
const successRate = ((results.passed / results.total) * 100).toFixed(1);
console.log(`๐ฏ Success Rate: ${successRate}%`);
if (results.failed > 0) {
console.log('\nโ Failed Tests:');
results.details
.filter(r => r.status === 'FAIL')
.forEach(r => console.log(` - ${r.name}`));
}
if (results.passed === results.total) {
console.log('\n๐ All tests passed! Live chat system is properly implemented!');
console.log('\n๐ Next steps:');
console.log(' 1. Start the development server: npm run dev');
console.log(' 2. Visit a public case page');
console.log(' 3. Look for the floating chat button');
console.log(' 4. Test the live chat functionality');
} else {
console.log('\nโ ๏ธ Some tests failed. Please check the implementation.');
}
console.log('\n๐ Manual Testing Checklist:');
console.log(' - Open browser developer tools');
console.log(' - Navigate to a public case page');
console.log(' - Look for WebSocket connections in Network tab');
console.log(' - Click the chat button and test messaging');
console.log(' - Test with multiple browser windows for real-time features');
console.log('\n๐ Documentation:');
console.log(' - Check docs/live-chat-verification-checklist.md for detailed testing');
console.log(' - Use browser console to run browser-test-live-chat.js');