# 🧪 PIANO TEST - NetGesCon Laravel **📅 Creato**: 9 Luglio 2025 - **AGGIORNATO con scoperta test esistenti** **🎯 Scopo**: Piano completo testing sistema **👥 Team**: Michele + AI Assistant **📊 Target Coverage**: >70% ## 🚨 **SCOPERTA CRITICA - Test già presenti nel sistema!** **✅ TEST GIÀ IMPLEMENTATI**: 37 test cases nel framework Pest/PHPUnit **🐛 PROBLEMA BLOCCANTE**: Conflitti database migrations in test environment **📊 STATO**: 35 failed, 2 passed - tutti falliscono per conflitti SQLite **⚠️ ERRORE**: `table "amministratori" already exists` ### 🔍 **Test Esistenti Scoperti** - **Feature Tests**: Auth completo, Profile, RipartizioneSpesa, VoceSpesa, PianoRateizzazione - **Unit Tests**: RataTest, RipartizioneSpesaServiceTest, PianoRateizzazioneTest - **Test Environment**: Configurazione SQLite in-memory corretta in phpunit.xml - **Framework**: Pest + PHPUnit con RefreshDatabase trait ### 🛠️ **PIANO CORREZIONE IMMEDIATA** 1. ✅ **Analizzare migrations conflicts** 2. 🔧 **Fixare test database setup** 3. 🧪 **Ripristinare test suite funzionante** 4. 📊 **Verificare coverage esistente** 5. 🚀 **Estendere test mancanti** --- ## 🎯 **OBIETTIVI TESTING** ### 🚀 **Obiettivi Primari** - **Affidabilità**: Zero bug critici in produzione - **Sicurezza**: Protezione multi-ruolo garantita - **Performance**: Tempi risposta <2 secondi - **Usabilità**: Interfaccia intuitiva per tutti i ruoli ### 📊 **Metriche Target** - **Unit Test Coverage**: >80% - **Feature Test Coverage**: >70% - **Manual Test Coverage**: 100% funzionalità critiche - **Bug Detection Rate**: >90% pre-produzione --- ## 🏗️ **STRATEGIA TESTING** ### 📋 **Piramide Test** ``` 🔺 E2E Tests 🔺🔺🔺 Integration Tests 🔺🔺🔺🔺🔺 Feature Tests 🔺🔺🔺🔺🔺🔺🔺 Unit Tests ``` ### 🎪 **Ambienti Test** 1. **Local Development** - Test sviluppatore 2. **CI/CD Pipeline** - Test automatici GitHub 3. **Staging** - Test pre-produzione 4. **Production** - Monitor e test post-deploy --- ## 🧪 **TIPI DI TEST** ### 1️⃣ **UNIT TESTS** *(Foundation)* #### 🧮 **Modelli e Business Logic** ```php // File: tests/Unit/Models/ - StabileTest.php # Test model Stabile - UnitaTest.php # Test model Unità - SoggettoTest.php # Test model Soggetto - GestioneTest.php # Test model Gestione - ContrattoTest.php # Test model Contratto // Test: Relazioni, validazioni, accessors/mutators public function test_stabile_has_many_unita() public function test_calcolo_millesimi_distribuzione() public function test_validazione_codice_fiscale() ``` #### 💰 **Services Contabili** `[CRITICO]` ```php // File: tests/Unit/Services/ - ContabilitaServiceTest.php # Calcoli contabili - MillesimiServiceTest.php # Ripartizioni millesimi - FatturazioneServiceTest.php # Gestione fatture // Test: Precisione calcoli, arrotondamenti, quadrature public function test_ripartizione_senza_resto() public function test_arrotondamento_millesimi_corretto() public function test_bilancio_sempre_quadrato() ``` #### 🔐 **Autenticazione e Autorizzazioni** ```php // File: tests/Unit/Auth/ - RolePermissionTest.php # Test ruoli e permessi - UserAccessTest.php # Test accesso utenti - SwitchUserTest.php # Test cambio utente // Test: Permessi granulari, sicurezza multi-ruolo public function test_admin_can_access_all_stabili() public function test_condomino_sees_only_own_data() ``` ### 2️⃣ **FEATURE TESTS** *(Integration)* #### 🎨 **Interfaccia CRUD** ```php // File: tests/Feature/Admin/ - StabileControllerTest.php # CRUD Stabili - UnitaControllerTest.php # CRUD Unità - SoggettoControllerTest.php # CRUD Soggetti - GestioneControllerTest.php # CRUD Gestioni // Test: HTTP responses, form validation, database persistence public function test_admin_can_create_stabile() public function test_stabile_validation_rules() public function test_unauthorized_access_blocked() ``` #### 🔗 **Menu e Navigazione** ```php // File: tests/Feature/Navigation/ - MenuNavigationTest.php # Test tutti i link menu - ResponsiveLayoutTest.php # Test layout responsive - BreadcrumbTest.php # Test breadcrumb navigation // Test: Link funzionanti, pagine accessibili, UI responsive public function test_all_menu_links_reachable() public function test_mobile_navigation_works() ``` #### 📊 **API Endpoints** *(Quando implementate)* ```php // File: tests/Feature/Api/ - AuthApiTest.php # API autenticazione - StabileApiTest.php # API gestione stabili - ContabilitaApiTest.php # API dati contabili // Test: JSON responses, authentication, rate limiting public function test_api_requires_authentication() public function test_api_returns_correct_json_structure() ``` ### 3️⃣ **INTEGRATION TESTS** *(End-to-End)* #### 🔄 **Workflow Completi** ```php // File: tests/Integration/ - CondominioWorkflowTest.php # Flusso gestione condominio - FatturazioneWorkflowTest.php # Flusso fatturazione completo - ComunicazioneWorkflowTest.php # Flusso comunicazioni // Test: Flussi business completi, integrazione componenti public function test_complete_condominio_setup() public function test_fatturazione_end_to_end() ``` ### 4️⃣ **E2E TESTS** *(Browser)* #### 🌐 **Test Browser** *(Laravel Dusk)* ```php // File: tests/Browser/ - AdminDashboardTest.php # Test dashboard completa - CrudWorkflowTest.php # Test CRUD browser - MobileResponsiveTest.php # Test mobile real browser // Test: User interactions, JavaScript, real browser behavior public function test_admin_login_and_navigate() public function test_mobile_menu_interaction() ``` --- ## 📋 **TEST CASES SPECIFICI** ### 💰 **Testing Contabilità** `[MASSIMA PRIORITÀ]` #### 🧮 **Calcoli Precisione** ```php // Test arrotondamenti millesimi public function test_millesimi_no_resto_perduto() { // 1000€ / 3 proprietari // Expected: 333.34€ + 333.33€ + 333.33€ = 1000.00€ // NOT: 333.33€ * 3 = 999.99€ ❌ } public function test_distribuzione_resto_progressiva() { // Resto distribuito ai primi N soggetti // Sempre bilancio quadrato al centesimo } public function test_calcoli_rate_condominiali() { // Calcolo rate basato su millesimi // Verifica totale = budget previsto } ``` #### 📊 **Quadrature Bilanci** ```php public function test_bilancio_sempre_quadrato() { // Entrate - Uscite = Residuo // Precisione decimale garantita } public function test_ripartizione_spese_corretta() { // Spese comuni + spese private = totale // Distribuzione per millesimi corretta } ``` ### 🔐 **Testing Sicurezza Multi-Ruolo** #### 👤 **Separazione Ruoli** ```php public function test_admin_full_access() { // Amministratore: accesso a tutti gli stabili } public function test_condomino_limited_access() { // Condomino: solo proprio stabile e unità } public function test_fornitore_invoice_only() { // Fornitore: solo fatture proprie } public function test_switch_user_functionality() { // Test cambio utente per debug multi-ruolo } ``` ### 🔗 **Testing Menu e UI** #### 🗺️ **Navigazione Completa** ```php public function test_all_menu_items_accessible() { // Verifica ogni link in lang/it/menu.php // Status 200 per pagine autorizzate // Redirect login per pagine non autorizzate } public function test_responsive_design() { // Breakpoints: 320px, 768px, 1024px, 1440px // Menu hamburger su mobile // Tables scrollable su mobile } ``` --- ## 🚀 **ESECUZIONE TEST** ### 💻 **Comandi Base** ```bash # Test completi php artisan test # Test specifici per categoria php artisan test --testsuite=Unit php artisan test --testsuite=Feature php artisan test --group=contabilita php artisan test --group=security # Test con coverage php artisan test --coverage php artisan test --coverage-html coverage-report # Test specifici file php artisan test tests/Unit/Services/ContabilitaServiceTest.php php artisan test --filter test_calcolo_millesimi ``` ### 🔄 **CI/CD Pipeline** ```yaml # .github/workflows/tests.yml name: Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' - name: Install dependencies run: composer install - name: Run tests run: php artisan test --coverage - name: Upload coverage uses: codecov/codecov-action@v3 ``` --- ## 📊 **COVERAGE E METRICHE** ### 🎯 **Target Coverage** ``` Overall Coverage: >70% Models: >90% Controllers: >80% Services: >95% (contabilità) Middleware: >85% Form Requests: >90% ``` ### 📈 **Tracking Progress** ```bash # Generazione report coverage php artisan test --coverage-html public/coverage # Accesso report: http://localhost:8000/coverage # Monitoring: Uptime, performance, error rate ``` --- ## 🧪 **TEST MANUALI** ### ✅ **Checklist Test Manuale** #### 🎨 **UI/UX Testing** - [ ] **Login/Logout** - Funzionalità base - [ ] **Menu Navigation** - Tutti i link funzionanti - [ ] **Form Validation** - Messaggi errore chiari - [ ] **CRUD Operations** - Create/Read/Update/Delete - [ ] **Responsive Design** - Mobile/tablet/desktop - [ ] **Performance** - Tempi caricamento <2s #### 🔐 **Security Testing** - [ ] **Role Permissions** - Accesso corretto per ruolo - [ ] **Data Isolation** - Utenti vedono solo propri dati - [ ] **CSRF Protection** - Token presenti su form - [ ] **XSS Prevention** - Input/output sanitized - [ ] **SQL Injection** - Prepared statements used #### 💰 **Business Logic Testing** - [ ] **Calcoli Contabili** - Precisione e quadrature - [ ] **Ripartizioni** - Millesimi distribuiti correttamente - [ ] **Fatturazione** - Importi e tasse corrette - [ ] **Comunicazioni** - Email/SMS funzionanti ### 📱 **Test Dispositivi** ``` Desktop: Chrome, Firefox, Safari, Edge Mobile: iOS Safari, Android Chrome Tablet: iPad, Android tablet ``` --- ## 📊 **TEST DATA E FIXTURES** ### 🗃️ **Database Test** ```php // File: database/factories/ - StabileFactory.php # Factory dati stabili - UnitaFactory.php # Factory dati unità - SoggettoFactory.php # Factory dati soggetti // File: database/seeders/test/ - TestContabilitaSeeder.php # Dati test contabilità - TestScenarioSeeder.php # Scenari test complessi ``` ### 📊 **Scenari Test** ```php // Scenario 1: Piccolo condominio - 1 stabile, 8 unità, 12 soggetti - Budget annuale: 20.000€ - Test: Calcoli base // Scenario 2: Condominio complesso - 3 stabili, 45 unità, 60 soggetti - Budget annuale: 150.000€ - Test: Performance, calcoli complessi // Scenario 3: Edge cases - Unità con millesimi 0 - Soggetti con quote multiple - Test: Gestione eccezioni ``` --- ## 🚨 **GESTIONE ERRORI E BUG** ### 🐛 **Bug Tracking** ``` Priorità 1 (CRITICO): Calcoli sbagliati, data loss, security Priorità 2 (ALTO): UI broken, performance issues Priorità 3 (MEDIO): Minor UI glitches, usability Priorità 4 (BASSO): Enhancement, nice-to-have ``` ### 📊 **Issue Template** ```markdown ## Bug Report **Priorità**: [1-4] **Ambiente**: [dev/staging/prod] **Browser**: [Chrome/Firefox/Safari/Mobile] **Utente**: [admin/condomino/fornitore] **Descrizione**: Cosa è successo vs cosa ci si aspettava **Passi per riprodurre**: 1. Step 1 2. Step 2 3. Step 3 **Screenshot/Log**: [Allegare se possibile] ``` --- ## 📅 **CRONOGRAMA TESTING** ### 📋 **Settimana 1** *(Corrente)* - [x] Setup base PHPUnit - [x] Primi test models - [ ] Test contabilità base - [ ] Test menu navigation ### 📋 **Settimana 2** - [ ] Test controllers CRUD - [ ] Test authorization - [ ] Test responsive design - [ ] Setup CI/CD pipeline ### 📋 **Settimana 3** - [ ] Integration tests - [ ] Performance testing - [ ] Security testing - [ ] Browser testing (Dusk) ### 📋 **Settimana 4** - [ ] User acceptance testing - [ ] Load testing - [ ] Documentation test coverage - [ ] Production deploy testing --- ## 📞 **TOOLS E RISORSE** ### 🔧 **Testing Tools** - **PHPUnit**: Unit e Feature tests - **Laravel Dusk**: Browser testing - **Pest**: Alternativa a PHPUnit (opzionale) - **Faker**: Generazione dati fake - **Mockery**: Mocking objects ### 📊 **Coverage Tools** - **Xdebug**: Code coverage PHP - **Codecov**: Coverage tracking online - **PHPStorm Coverage**: IDE integration ### 🌐 **Frontend Testing** - **Laravel Mix**: Asset compilation - **Jest**: JavaScript unit tests - **Cypress**: E2E frontend testing --- ## 🎯 **PROSSIMI PASSI** ### 🚀 **Immediato** *(Oggi)* 1. ✅ **Setup** PHPUnit configurazione base 2. 🧮 **Creare** test contabilità critici 3. 🔗 **Test** navigation menu principale 4. 📊 **Documentare** risultati primi test ### 📅 **Questa Settimana** 1. 🎨 **Test** CRUD controllers base 2. 🔐 **Test** sistema autorizzazioni 3. 📱 **Test** responsive layout 4. 🤖 **Setup** automazione CI/CD --- *🔄 Aggiornare piano test settimanalmente* *📊 Review coverage ogni milestone* *🎯 Focus qualità prima di quantità*