335 lines
8.4 KiB
Markdown
Executable File
335 lines
8.4 KiB
Markdown
Executable File
# 🧪 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
|
|
<!-- Verifica presenza elementi essenziali -->
|
|
<div class="tabs-container" id="verificare-presente">
|
|
<nav class="tab-navigation">
|
|
<a href="#" class="tab-link active">Tab Attivo</a>
|
|
</nav>
|
|
<div class="tab-content" id="content-area">
|
|
<!-- Content deve essere caricato -->
|
|
</div>
|
|
</div>
|
|
|
|
<!-- CSS Classes verificare presenti -->
|
|
.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**
|