T.ME/BIBIL_0DAY
CasperSecurity


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.quebec/private_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.quebec/private_html/scripts/verify-live-chat.js
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'); 

CasperSecurity Mini