![]() 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/backups/lavocat.quebec/backup-20250730-021618/scripts/ |
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();