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

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.quebec/public_html/scripts/test-dual-track-system.ts
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function testDualTrackSystem() {
  console.log('๐Ÿงช Testing Complete Dual-Track Society System...\n');

  try {
    // 1. Test Degree System
    console.log('1๏ธโƒฃ Testing Degree System:');
    
    const lawyerDegrees = await prisma.societyDegree.findMany({
      where: { track: 'LAWYER' },
      orderBy: { degreeNumber: 'asc' }
    });
    
    const clientDegrees = await prisma.societyDegree.findMany({
      where: { track: 'CLIENT' },
      orderBy: { degreeNumber: 'asc' }
    });
    
    console.log(`   โœ… Lawyer Track: ${lawyerDegrees.length} degrees (1-33 system)`);
    console.log(`   โœ… Client Track: ${clientDegrees.length} degrees (1-10 system)`);
    console.log(`   โœ… Total Degrees: ${lawyerDegrees.length + clientDegrees.length}`);

    // 2. Test Lodge System
    console.log('\n2๏ธโƒฃ Testing Lodge System:');
    
    const lodges = await prisma.lodge.findMany({
      orderBy: { track: 'asc' }
    });
    
    const lawyerLodges = lodges.filter(l => l.track === 'LAWYER');
    const clientLodges = lodges.filter(l => l.track === 'CLIENT');
    const mixedLodges = lodges.filter(l => l.track === 'MIXED');
    
    console.log(`   โœ… Lawyer Lodges: ${lawyerLodges.length} (Blue, Red, Black)`);
    console.log(`   โœ… Client Lodges: ${clientLodges.length} (Civic, Reformer, Oracle)`);
    console.log(`   โœ… Mixed Lodges: ${mixedLodges.length} (Cross-collaboration)`);

    // 3. Test User Assignment
    console.log('\n3๏ธโƒฃ Testing User Assignments:');
    
    const users = await prisma.user.findMany({
      include: {
        degrees: {
          include: { degree: true }
        },
        lodgeMemberships: {
          include: { lodge: true }
        }
      }
    });
    
    let lawyersWithBothTracks = 0;
    let clientsWithClientTrack = 0;
    let totalLodgeMemberships = 0;
    
    for (const user of users) {
      const hasLawyerDegree = user.degrees.some(d => d.degree.track === 'LAWYER');
      const hasClientDegree = user.degrees.some(d => d.degree.track === 'CLIENT');
      totalLodgeMemberships += user.lodgeMemberships.length;
      
      if (user.role === 'LAWYER' || user.role === 'ADMIN' || user.role === 'SUPERADMIN') {
        if (hasLawyerDegree && hasClientDegree) lawyersWithBothTracks++;
      } else {
        if (hasClientDegree) clientsWithClientTrack++;
      }
    }
    
    console.log(`   โœ… Total Users: ${users.length}`);
    console.log(`   โœ… Lawyers with dual-track access: ${lawyersWithBothTracks}`);
    console.log(`   โœ… Clients with client track: ${clientsWithClientTrack}`);
    console.log(`   โœ… Total lodge memberships: ${totalLodgeMemberships}`);

    // 4. Test Client Tracking Fields
    console.log('\n4๏ธโƒฃ Testing Client Tracking Fields:');
    
    const clientUsers = users.filter(u => u.role === 'USER');
    const sampleClient = clientUsers[0];
    
    if (sampleClient) {
      console.log(`   โœ… Reviews Written: ${sampleClient.reviewsWritten} (trackable)`);
      console.log(`   โœ… Forum Posts: ${sampleClient.forumPosts} (trackable)`);
      console.log(`   โœ… People Helped: ${sampleClient.helpedOthers} (trackable)`);
      console.log(`   โœ… Observation Hours: ${sampleClient.observationHours} (trackable)`);
      console.log(`   โœ… Reform Proposals: ${sampleClient.reformProposals} (trackable)`);
      console.log(`   โœ… Civic Engagement: ${sampleClient.civicEngagement} (trackable)`);
    }

    // 5. Test Degree Progression
    console.log('\n5๏ธโƒฃ Testing Degree Progression:');
    
    // Check progression chains for both tracks
    const firstLawyerDegree = lawyerDegrees.find(d => d.degreeNumber === 1);
    const secondLawyerDegree = lawyerDegrees.find(d => d.degreeNumber === 2);
    const firstClientDegree = clientDegrees.find(d => d.degreeNumber === 1);
    const secondClientDegree = clientDegrees.find(d => d.degreeNumber === 2);
    
    console.log(`   โœ… Lawyer progression: ${firstLawyerDegree?.name} โ†’ ${secondLawyerDegree?.name}`);
    console.log(`   โœ… Client progression: ${firstClientDegree?.name} โ†’ ${secondClientDegree?.name}`);

    // 6. Test XP Requirements
    console.log('\n6๏ธโƒฃ Testing XP Requirements:');
    
    const lawyerXpProgression = lawyerDegrees.slice(0, 5).map(d => ({
      degree: d.degreeNumber,
      xp: d.xpRequired
    }));
    
    const clientXpProgression = clientDegrees.slice(0, 5).map(d => ({
      degree: d.degreeNumber,
      xp: d.xpRequired
    }));
    
    console.log('   โœ… Lawyer XP progression:', lawyerXpProgression);
    console.log('   โœ… Client XP progression:', clientXpProgression);

    // 7. Test Lodge Level System
    console.log('\n7๏ธโƒฃ Testing Lodge Level System:');
    
    const lodgeLevels = {
      LAWYER: lawyerLodges ? Array.from(new Set(lawyerLodges.map(l => l.lodgeLevel))) : [],
      CLIENT: clientLodges ? Array.from(new Set(clientLodges.map(l => l.lodgeLevel))) : []
    };
    
    console.log(`   โœ… Lawyer Lodge Levels: ${lodgeLevels.LAWYER.join(', ')}`);
    console.log(`   โœ… Client Lodge Levels: ${lodgeLevels.CLIENT.join(', ')}`);

    // 8. Test Secret Degrees
    console.log('\n8๏ธโƒฃ Testing Secret Degree System:');
    
    const secretLawyerDegrees = lawyerDegrees.filter(d => d.isSecret).length;
    const secretClientDegrees = clientDegrees.filter(d => d.isSecret).length;
    
    console.log(`   โœ… Secret Lawyer Degrees: ${secretLawyerDegrees}`);
    console.log(`   โœ… Secret Client Degrees: ${secretClientDegrees}`);

    // 9. Test Cross-Track Features
    console.log('\n9๏ธโƒฃ Testing Cross-Track Features:');
    
    const mixedLodge = mixedLodges[0];
    if (mixedLodge) {
      const mixedLodgeMemberships = await prisma.lodgeMembership.findMany({
        where: { lodgeId: mixedLodge.id },
        include: { user: true }
      });
      
      const lawyerMembers = mixedLodgeMemberships.filter(m => 
        m.user.role === 'LAWYER' || m.user.role === 'ADMIN' || m.user.role === 'SUPERADMIN'
      ).length;
      
      const clientMembers = mixedLodgeMemberships.filter(m => 
        m.user.role === 'USER'
      ).length;
      
      console.log(`   โœ… Mixed Lodge "${mixedLodge.name}": ${lawyerMembers} lawyers, ${clientMembers} clients`);
    }

    // 10. Summary Report
    console.log('\n๐ŸŽ‰ DUAL-TRACK SOCIETY SYSTEM TEST RESULTS:');
    console.log('โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”');
    console.log(`โœ… Degrees Implemented: ${lawyerDegrees.length + clientDegrees.length} total`);
    console.log(`โœ… Lodges Created: ${lodges.length} total (${lawyerLodges.length} lawyer + ${clientLodges.length} client + ${mixedLodges.length} mixed)`);
    console.log(`โœ… Users Assigned: ${users.length} total`);
    console.log(`โœ… Dual-Track Access: ${lawyersWithBothTracks} legal professionals`);
    console.log(`โœ… Client Track Access: ${clientsWithClientTrack} community members`);
    console.log(`โœ… Lodge Memberships: ${totalLodgeMemberships} active`);
    console.log(`โœ… XP System: Functional with client tracking`);
    console.log(`โœ… Secret Degrees: ${secretLawyerDegrees + secretClientDegrees} implemented`);
    console.log(`โœ… Cross-Track Collaboration: Active`);
    console.log('\n๐Ÿš€ SYSTEM STATUS: FULLY OPERATIONAL');
    console.log('๐Ÿ›๏ธ The Digital Ark of Law Society is ready for both lawyers and clients!');

  } catch (error) {
    console.error('โŒ Test failed:', error);
    throw error;
  } finally {
    await prisma.$disconnect();
  }
}

testDualTrackSystem(); 

CasperSecurity Mini