# πŸ§ͺ NETGESCON TESTING AUTOMATIZZATO ## Sistema verifica strutture e funzionalitΓ  ### πŸ“… Versione: 1.0 - 28 Luglio 2025 ### 🎯 Comando: TESTX: per attivare controlli --- ## πŸ§ͺ TEST SUITE COMPLETA ### πŸ”‘ **CREDENZIALI SISTEMA**: ```bash # Database MySQL DB_HOST=127.0.0.1 DB_DATABASE=netgescon DB_USERNAME=netgescon_user DB_PASSWORD=NetGescon2024! # URLs Testing PROD_URL=http://192.168.0.200:8000 ADMIN_URL=http://192.168.0.200:8000/admin/admin TEST_STABILE_URL=http://192.168.0.200:8000/admin/stabili/1/show ``` ### 1. **TEST DATABASE STRUTTURE** #### πŸ“Š **Verifica Dati Base (Stabile ID: 1)**: ```sql -- Test esistenza dati critici SELECT COUNT(*) as tabelle_count FROM tabelle_millesimali WHERE stabile_id = 1; -- Risultato atteso: >= 24 SELECT COUNT(*) as voci_count FROM voci_spesa WHERE stabile_id = 1; -- Risultato atteso: >= 30 SELECT COUNT(*) as unita_count FROM unita_immobiliari WHERE stabile_id = 1; -- Risultato atteso: >= 50 -- Test integritΓ  relazioni SELECT s.denominazione, COUNT(DISTINCT tm.id) as tabelle_mill, COUNT(DISTINCT vs.id) as voci_spesa, COUNT(DISTINCT ui.id) as unita FROM stabili s LEFT JOIN tabelle_millesimali tm ON s.id = tm.stabile_id LEFT JOIN voci_spesa vs ON s.id = vs.stabile_id LEFT JOIN unita_immobiliari ui ON s.id = ui.stabile_id WHERE s.id = 1 GROUP BY s.id; ``` #### πŸ”— **Test Relazioni Modelli Laravel**: ```php // Test in artisan tinker $stabile = \App\Models\Stabile::find(1); // Test eager loading $stabile->load(['tabelleMillesimali', 'vociSpesa', 'unitaImmobiliari']); // Verifica dati caricati $stabile->tabelleMillesimali->count(); // >= 24 $stabile->vociSpesa->count(); // >= 30 $stabile->unitaImmobiliari->count(); // >= 50 // Test ordinamento $stabile->tabelleMillesimali->first()->ordinamento; // Non null $stabile->vociSpesa->first()->ordinamento; // Non null ``` ### 2. **TEST INTERFACCIA MENU STANDARD** #### 🎯 **Struttura Tabs Obbligatoria**: ```html
.tab-link.active { background: attivo; } .tab-content { display: block; } ``` #### πŸ“± **Test Responsive Layout**: ```css /* Mobile 320px-768px */ @media (max-width: 768px) { .sidebar { transform: translateX(-100%); } .content-main { margin-left: 0; } .tab-navigation { flex-direction: column; } } /* Desktop 1024px+ */ @media (min-width: 1024px) { .sidebar { position: fixed; width: 280px; } .content-main { margin-left: 280px; } .header { position: fixed; height: 70px; } .footer { position: fixed; height: 70px; } } ``` ### 3. **TEST PERFORMANCE E CARICAMENTO** #### ⚑ **Metriche Performance Target**: ```javascript // Test JavaScript caricamento window.addEventListener('load', function() { const loadTime = performance.now(); console.log('Page Load Time:', loadTime); // Target: < 500ms const tabsCount = document.querySelectorAll('.tab-link').length; console.log('Tabs Count:', tabsCount); // Target: >= 5 tabs per pagina stabile const dataRows = document.querySelectorAll('tbody tr').length; console.log('Data Rows:', dataRows); // Target: > 0 (dati visibili) }); ``` #### πŸ”„ **Test AJAX Functionality**: ```javascript // Verifica navigazione tabs AJAX function testTabNavigation() { const tabs = document.querySelectorAll('.tab-link'); tabs.forEach(tab => { tab.addEventListener('click', function(e) { e.preventDefault(); const targetTab = this.getAttribute('href'); console.log('Tab clicked:', targetTab); // Deve cambiare contenuto senza reload pagina }); }); } ``` ### 4. **TEST SICUREZZA E PERMESSI** #### πŸ” **Verifica Autenticazione**: ```php // Test middleware auth Route::middleware(['auth', 'role:admin'])->group(function () { Route::get('/admin/stabili/{stabile}', [StabileController::class, 'show']); }); // Test controller protezione public function show(Stabile $stabile) { $this->authorize('view', $stabile); // Verifica permesso // ... rest of method } ``` #### πŸ‘€ **Test Controllo Accessi**: ```php // Verifica user logged Auth::check(); // true Auth::user()->hasRole('admin'); // true per admin Auth::user()->can('view', $stabile); // true se permesso // Test session attiva Session::get('user_id'); // Not null Session::get('role'); // admin/user/etc ``` --- ## 🚨 CHECKLIST TEST COMPLETA ### βœ… **PRE-DEVELOPMENT**: - [ ] Database connection attiva - [ ] Tabelle esistenti con dati - [ ] Relazioni modelli funzionanti - [ ] Layout base caricato ### βœ… **DEVELOPMENT**: - [ ] Controller con eager loading - [ ] Blade con layout standard - [ ] CSS classes netgescon - [ ] JavaScript modulare incluso ### βœ… **POST-DEVELOPMENT**: - [ ] URL accessibile - [ ] Dati visibili in tabs - [ ] Responsive mobile/desktop - [ ] Performance < 500ms - [ ] JavaScript senza errori - [ ] CSS rendering corretto ### βœ… **FINAL VALIDATION**: - [ ] Test su browser diversi - [ ] Test utenti con ruoli diversi - [ ] Test con dati vuoti/pieni - [ ] Test mobile/tablet/desktop --- ## πŸ”§ SCRIPT TEST AUTOMATICI ### πŸ“Š **Test Database**: ```bash #!/bin/bash # test-database.sh cd /var/www/netgescon echo "=== TEST DATABASE NETGESCON ===" php artisan tinker --execute=" \$stabile = \App\Models\Stabile::with(['tabelleMillesimali', 'vociSpesa'])->find(1); echo 'Stabile: ' . \$stabile->denominazione . PHP_EOL; echo 'Tabelle Millesimali: ' . \$stabile->tabelleMillesimali->count() . PHP_EOL; echo 'Voci Spesa: ' . \$stabile->vociSpesa->count() . PHP_EOL; " ``` ### 🎯 **Test Interfaccia**: ```bash #!/bin/bash # test-interface.sh cd /var/www/netgescon echo "=== TEST INTERFACCIA NETGESCON ===" curl -s -o /dev/null -w "%{http_code}" http://192.168.0.200:8000/admin/stabili/1/show echo "Status Code: HTTP Response" # Test CSS build if [ -f "public/build/assets/app.css" ]; then echo "βœ… CSS Build: OK" else echo "❌ CSS Build: MISSING" fi # Test JS build if [ -f "public/build/assets/app.js" ]; then echo "βœ… JS Build: OK" else echo "❌ JS Build: MISSING" fi ``` ### ⚑ **Test Performance**: ```javascript // test-performance.js (function() { 'use strict'; window.addEventListener('load', function() { setTimeout(function() { const perf = performance.getEntriesByType('navigation')[0]; const loadTime = perf.loadEventEnd - perf.loadEventStart; console.log('=== NETGESCON PERFORMANCE TEST ==='); console.log('Load Time:', loadTime + 'ms'); console.log('DOM Ready:', perf.domContentLoadedEventEnd - perf.domContentLoadedEventStart + 'ms'); // Test elementi presenti const tabs = document.querySelectorAll('.tab-link').length; const dataRows = document.querySelectorAll('tbody tr').length; console.log('Tabs Count:', tabs); console.log('Data Rows:', dataRows); // Risultato if (loadTime < 500 && tabs > 0 && dataRows > 0) { console.log('βœ… PERFORMANCE TEST: PASSED'); } else { console.log('❌ PERFORMANCE TEST: FAILED'); } }, 100); }); })(); ``` --- ## 🎯 COMANDI RAPIDI TEST ### πŸ§ͺ **TESTX: Database** ```bash cd /var/www/netgescon php artisan tinker --execute="echo 'Stabili: ' . \App\Models\Stabile::count();" ``` ### πŸ§ͺ **TESTX: Interface** ```bash curl -I http://192.168.0.200:8000/admin/stabili/1/show ``` ### πŸ§ͺ **TESTX: Assets** ```bash cd /var/www/netgescon && ls -la public/build/assets/ ``` ### πŸ§ͺ **TESTX: Performance** ```bash cd /var/www/netgescon && php artisan route:list | grep stabile ``` --- ## πŸ“Š REPORTING RISULTATI ### βœ… **TEMPLATE REPORT**: ``` === NETGESCON TEST REPORT === Data: 28/07/2025 Comando: TESTX: [tipo test] DATABASE: - Connessione: βœ…/❌ - Dati Stabile ID 1: βœ…/❌ - Relazioni: βœ…/❌ INTERFACCIA: - URL Accessibile: βœ…/❌ - Layout Corretto: βœ…/❌ - Tabs Funzionanti: βœ…/❌ PERFORMANCE: - Load Time: XXXms (Target: <500ms) - Assets Build: βœ…/❌ - JavaScript: βœ…/❌ RISULTATO FINALE: PASS/FAIL ``` --- **πŸ§ͺ SISTEMA TEST ATTIVO** **Usa comando TESTX: per attivare verifiche automatiche**