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.ca/public_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/scripts/test-barreau-verification.js
#!/usr/bin/env node

/**
 * Test Script for Barreau Verification System
 * 
 * This script helps test the Barreau verification API with various scenarios
 * to ensure the system is working correctly.
 * 
 * Usage:
 *   node scripts/test-barreau-verification.js
 *   node scripts/test-barreau-verification.js --test-all
 *   node scripts/test-barreau-verification.js --test-case="Justin Wee"
 */

const axios = require('axios');
const readline = require('readline');

const API_BASE_URL = 'http://localhost:3000/api/lawyer/barreau-verify';

// Test cases with different scenarios
const testCases = [
  {
    name: 'Justin Wee',
    phone: '514-555-0101',
    practiceArea: 'Civil',
    description: 'Real lawyer from screenshots (should match)',
    expected: 'success'
  },
  {
    name: 'Wee, Justin',
    phone: '5145550101',
    practiceArea: 'Civil',
    description: 'Same lawyer with "Last, First" format',
    expected: 'success'
  },
  {
    name: 'John Doe',
    phone: '555-123-4567',
    practiceArea: 'Criminal',
    description: 'Fictional lawyer (should not match)',
    expected: 'no-match'
  },
  {
    name: 'Marie-Claude Tremblay',
    phone: '418-555-1234',
    practiceArea: 'Family',
    description: 'Common Quebec name (may or may not match)',
    expected: 'unknown'
  },
  {
    name: 'Jean-François Bouchard',
    phone: '450-555-9876',
    practiceArea: 'Commercial',
    description: 'Another common Quebec name',
    expected: 'unknown'
  },
  {
    name: 'A',
    phone: '123',
    practiceArea: '',
    description: 'Invalid input (should fail validation)',
    expected: 'validation-error'
  }
];

// Colors for console output
const colors = {
  reset: '\x1b[0m',
  bright: '\x1b[1m',
  red: '\x1b[31m',
  green: '\x1b[32m',
  yellow: '\x1b[33m',
  blue: '\x1b[34m',
  magenta: '\x1b[35m',
  cyan: '\x1b[36m'
};

function log(message, color = 'reset') {
  console.log(`${colors[color]}${message}${colors.reset}`);
}

function logHeader(message) {
  log('\n' + '='.repeat(60), 'cyan');
  log(message, 'bright');
  log('='.repeat(60), 'cyan');
}

function logTestResult(testCase, result, success) {
  const status = success ? 'PASS' : 'FAIL';
  const color = success ? 'green' : 'red';
  
  log(`\n${status}: ${testCase.description}`, color);
  log(`Name: ${testCase.name}`, 'yellow');
  log(`Phone: ${testCase.phone}`, 'yellow');
  log(`Practice Area: ${testCase.practiceArea}`, 'yellow');
  
  if (result.error) {
    log(`Error: ${result.error}`, 'red');
  }
  
  if (result.message) {
    log(`Message: ${result.message}`, 'blue');
  }
  
  if (result.matchedProfiles && result.matchedProfiles.length > 0) {
    log(`\nMatched Profiles:`, 'green');
    result.matchedProfiles.forEach((profile, index) => {
      log(`  ${index + 1}. ${profile.name}`, 'green');
      if (profile.employer) log(`     Employer: ${profile.employer}`, 'cyan');
      if (profile.phone) log(`     Phone: ${profile.phone}`, 'cyan');
      if (profile.practiceAreas && profile.practiceAreas.length > 0) {
        log(`     Practice Areas: ${profile.practiceAreas.join(', ')}`, 'cyan');
      }
      if (profile.matchScore) log(`     Match Score: ${profile.matchScore}`, 'magenta');
    });
  }
  
  if (result.allProfiles && result.allProfiles.length > 0 && (!result.matchedProfiles || result.matchedProfiles.length === 0)) {
    log(`\nAll Found Profiles (${result.allProfiles.length}):`, 'yellow');
    result.allProfiles.slice(0, 3).forEach((profile, index) => {
      log(`  ${index + 1}. ${profile.name}`, 'yellow');
      if (profile.employer) log(`     Employer: ${profile.employer}`, 'cyan');
      if (profile.phone) log(`     Phone: ${profile.phone}`, 'cyan');
    });
    if (result.allProfiles.length > 3) {
      log(`  ... and ${result.allProfiles.length - 3} more profiles`, 'yellow');
    }
  }
  
  if (result.suggestions && result.suggestions.length > 0) {
    log(`\nSuggestions:`, 'blue');
    result.suggestions.forEach(suggestion => {
      log(`  • ${suggestion}`, 'blue');
    });
  }
}

async function testVerification(testCase) {
  try {
    logHeader(`Testing: ${testCase.description}`);
    
    const startTime = Date.now();
    const response = await axios.post(API_BASE_URL, {
      name: testCase.name,
      phone: testCase.phone,
      practiceArea: testCase.practiceArea
    }, {
      timeout: 30000,
      headers: {
        'Content-Type': 'application/json'
      }
    });
    
    const endTime = Date.now();
    const duration = endTime - startTime;
    
    log(`Response Time: ${duration}ms`, 'magenta');
    
    const result = response.data;
    
    // Determine if test passed based on expected outcome
    let success = false;
    switch (testCase.expected) {
      case 'success':
        success = result.found && result.matchedProfiles && result.matchedProfiles.length > 0;
        break;
      case 'no-match':
        success = !result.found && result.allProfiles && result.allProfiles.length === 0;
        break;
      case 'unknown':
        success = true; // Any result is acceptable for unknown cases
        break;
      case 'validation-error':
        success = response.status === 400;
        break;
      default:
        success = true;
    }
    
    logTestResult(testCase, result, success);
    return { success, result, duration };
    
  } catch (error) {
    const isValidationError = error.response && error.response.status === 400;
    const success = testCase.expected === 'validation-error' && isValidationError;
    
    log(`\nFAIL: ${testCase.description}`, 'red');
    log(`Name: ${testCase.name}`, 'yellow');
    log(`Phone: ${testCase.phone}`, 'yellow');
    log(`Practice Area: ${testCase.practiceArea}`, 'yellow');
    
    if (error.response) {
      log(`Status: ${error.response.status}`, 'red');
      if (error.response.data) {
        log(`Error: ${error.response.data.error || 'Unknown error'}`, 'red');
        if (error.response.data.message) {
          log(`Message: ${error.response.data.message}`, 'blue');
        }
      }
    } else {
      log(`Error: ${error.message}`, 'red');
    }
    
    return { success, error: error.message, duration: 0 };
  }
}

async function runAllTests() {
  logHeader('Barreau Verification System - Comprehensive Test Suite');
  
  const results = [];
  let passed = 0;
  let failed = 0;
  let totalDuration = 0;
  
  for (const testCase of testCases) {
    const result = await testVerification(testCase);
    results.push({ testCase, ...result });
    
    if (result.success) {
      passed++;
    } else {
      failed++;
    }
    
    totalDuration += result.duration;
    
    // Add delay between tests to be respectful to the server
    await new Promise(resolve => setTimeout(resolve, 2000));
  }
  
  // Summary
  logHeader('Test Summary');
  log(`Total Tests: ${testCases.length}`, 'bright');
  log(`Passed: ${passed}`, 'green');
  log(`Failed: ${failed}`, 'red');
  log(`Total Duration: ${totalDuration}ms`, 'magenta');
  log(`Average Duration: ${Math.round(totalDuration / testCases.length)}ms`, 'magenta');
  
  // Detailed results
  logHeader('Detailed Results');
  results.forEach((result, index) => {
    const status = result.success ? 'PASS' : 'FAIL';
    const color = result.success ? 'green' : 'red';
    log(`${index + 1}. ${status}: ${result.testCase.description}`, color);
  });
  
  return { passed, failed, total: testCases.length };
}

async function runSingleTest(testName) {
  const testCase = testCases.find(tc => 
    tc.name.toLowerCase().includes(testName.toLowerCase()) ||
    tc.description.toLowerCase().includes(testName.toLowerCase())
  );
  
  if (!testCase) {
    log(`No test case found matching: ${testName}`, 'red');
    log('Available test cases:', 'yellow');
    testCases.forEach((tc, index) => {
      log(`${index + 1}. ${tc.name} - ${tc.description}`, 'cyan');
    });
    return;
  }
  
  await testVerification(testCase);
}

async function interactiveMode() {
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  
  logHeader('Interactive Barreau Verification Testing');
  log('Enter lawyer information to test:', 'bright');
  
  const name = await new Promise(resolve => {
    rl.question('Name: ', resolve);
  });
  
  const phone = await new Promise(resolve => {
    rl.question('Phone: ', resolve);
  });
  
  const practiceArea = await new Promise(resolve => {
    rl.question('Practice Area: ', resolve);
  });
  
  rl.close();
  
  const customTestCase = {
    name,
    phone,
    practiceArea,
    description: 'Custom test case',
    expected: 'unknown'
  };
  
  await testVerification(customTestCase);
}

// Main execution
async function main() {
  const args = process.argv.slice(2);
  
  try {
    if (args.includes('--test-all')) {
      await runAllTests();
    } else if (args.includes('--interactive')) {
      await interactiveMode();
    } else if (args.includes('--test-case')) {
      const testCaseIndex = args.indexOf('--test-case');
      const testCaseValue = args[testCaseIndex + 1];
      if (testCaseValue) {
        await runSingleTest(testCaseValue);
      } else {
        log('Please provide a test case value', 'red');
      }
    } else {
      logHeader('Barreau Verification Test Script');
      log('Usage:', 'bright');
      log('  node scripts/test-barreau-verification.js --test-all', 'cyan');
      log('  node scripts/test-barreau-verification.js --interactive', 'cyan');
      log('  node scripts/test-barreau-verification.js --test-case="Justin Wee"', 'cyan');
      log('\nAvailable test cases:', 'bright');
      testCases.forEach((tc, index) => {
        log(`${index + 1}. ${tc.name} - ${tc.description}`, 'cyan');
      });
    }
  } catch (error) {
    log(`\nScript error: ${error.message}`, 'red');
    process.exit(1);
  }
}

// Run the script
if (require.main === module) {
  main();
}

module.exports = {
  testCases,
  testVerification,
  runAllTests
}; 

CasperSecurity Mini