const mongoose = require('mongoose'); // Test per verificare l'isolamento per tenant nelle liste lpalto e lpmedio async function testTenantIsolation() { console.log('๐Ÿงช Iniziando test di isolamento per tenant...'); try { // Connessione al database await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/duxiter'); console.log('โœ… Connesso al database MongoDB'); // Verifica collezioni esistenti console.log('\n๐Ÿ“‹ Verifica collezioni esistenti...'); const collections = await mongoose.connection.db.listCollections().toArray(); const collectionNames = collections.map(c => c.name); console.log('Collezioni trovate:', collectionNames); const hasLpaltos = collectionNames.includes('lpaltos'); const hasLpmedios = collectionNames.includes('lpmedios'); const hasTenants = collectionNames.includes('tenants'); console.log(`- lpaltos: ${hasLpaltos ? 'โœ…' : 'โŒ'}`); console.log(`- lpmedios: ${hasLpmedios ? 'โœ…' : 'โŒ'}`); console.log(`- tenants: ${hasTenants ? 'โœ…' : 'โŒ'}`); if (!hasTenants) { console.log('โŒ Collezione tenants non trovata. Impossibile procedere con il test.'); return; } // Verifica tenant esistenti console.log('\n๐Ÿ‘ฅ Verifica tenant esistenti...'); const tenants = await mongoose.connection.db.collection('tenants').find({}).toArray(); console.log(`Trovati ${tenants.length} tenant nel sistema`); if (tenants.length === 0) { console.log('โŒ Nessun tenant trovato. Impossibile procedere con il test.'); return; } // Mostra primi 3 tenant for (const tenant of tenants.slice(0, 3)) { console.log(`- ${tenant.name} (${tenant._id})`); } // Test delle collezioni lpaltos e lpmedios se esistono if (hasLpaltos) { console.log('\n๐Ÿ“Š Test collezione lpaltos...'); const lpaltoCount = await mongoose.connection.db.collection('lpaltos').countDocuments({}); console.log(`Totale documenti lpaltos: ${lpaltoCount}`); if (lpaltoCount > 0) { // Verifica struttura const lpaltoSample = await mongoose.connection.db.collection('lpaltos').findOne({}); console.log('Struttura documento lpalto:', Object.keys(lpaltoSample)); if (lpaltoSample.tenant) { console.log('โœ… Campo tenant presente'); // Conta per tenant for (const tenant of tenants.slice(0, 3)) { const count = await mongoose.connection.db.collection('lpaltos').countDocuments({ tenant: tenant._id }); console.log(` - Tenant ${tenant.name}: ${count} documenti`); } } else { console.log('โŒ Campo tenant mancante'); } } } if (hasLpmedios) { console.log('\n๐Ÿ“Š Test collezione lpmedios...'); const lpmedioCount = await mongoose.connection.db.collection('lpmedios').countDocuments({}); console.log(`Totale documenti lpmedios: ${lpmedioCount}`); if (lpmedioCount > 0) { // Verifica struttura const lpmedioSample = await mongoose.connection.db.collection('lpmedios').findOne({}); console.log('Struttura documento lpmedio:', Object.keys(lpmedioSample)); if (lpmedioSample.tenant) { console.log('โœ… Campo tenant presente'); // Conta per tenant for (const tenant of tenants.slice(0, 3)) { const count = await mongoose.connection.db.collection('lpmedios').countDocuments({ tenant: tenant._id }); console.log(` - Tenant ${tenant.name}: ${count} documenti`); } } else { console.log('โŒ Campo tenant mancante'); } } } // Test degli indici se le collezioni esistono if (hasLpaltos) { console.log('\n๐Ÿ” Test indici lpaltos...'); try { const indexes = await mongoose.connection.db.collection('lpaltos').indexes(); console.log('Indici lpaltos:'); indexes.forEach(index => { console.log(` - ${index.name}: ${JSON.stringify(index.key)}`); }); } catch (error) { console.log('โŒ Errore nel recupero indici lpaltos:', error.message); } } if (hasLpmedios) { console.log('\n๐Ÿ” Test indici lpmedios...'); try { const indexes = await mongoose.connection.db.collection('lpmedios').indexes(); console.log('Indici lpmedios:'); indexes.forEach(index => { console.log(` - ${index.name}: ${JSON.stringify(index.key)}`); }); } catch (error) { console.log('โŒ Errore nel recupero indici lpmedios:', error.message); } } // Test di creazione dati di esempio per verificare l'isolamento if (tenants.length >= 2) { console.log('\n๐Ÿงช Test di isolamento con dati di esempio...'); const tenant1 = tenants[0]; const tenant2 = tenants[1]; // Crea documenti di test const testRut = '12345678-9'; // Inserisci in lpaltos per tenant1 await mongoose.connection.db.collection('lpaltos').insertOne({ rut: testRut, tenant: tenant1._id, createdAt: new Date(), testDocument: true }); // Inserisci in lpmedios per tenant2 await mongoose.connection.db.collection('lpmedios').insertOne({ rut: testRut, tenant: tenant2._id, createdAt: new Date(), testDocument: true }); console.log(`โœ… Creati documenti di test con RUT ${testRut}`); console.log(` - lpaltos per tenant ${tenant1.name}`); console.log(` - lpmedios per tenant ${tenant2.name}`); // Verifica isolamento const lpaltoForTenant1 = await mongoose.connection.db.collection('lpaltos').findOne({ rut: testRut, tenant: tenant1._id }); const lpaltoForTenant2 = await mongoose.connection.db.collection('lpaltos').findOne({ rut: testRut, tenant: tenant2._id }); if (lpaltoForTenant1 && !lpaltoForTenant2) { console.log('โœ… Isolamento lpaltos funziona correttamente'); } else { console.log('โŒ Problema con isolamento lpaltos'); } // Cleanup documenti di test await mongoose.connection.db.collection('lpaltos').deleteMany({ testDocument: true }); await mongoose.connection.db.collection('lpmedios').deleteMany({ testDocument: true }); console.log('๐Ÿงน Documenti di test rimossi'); } console.log('\n๐ŸŽ‰ Test di isolamento per tenant completato!'); } catch (error) { console.error('โŒ Errore durante il test:', error.message); console.error(error.stack); } finally { await mongoose.disconnect(); console.log('๐Ÿ”Œ Disconnesso dal database'); } } // Esegui il test testTenantIsolation().catch(console.error);