docs: aggiorna README, tests/README e CLAUDE.md con la nuova copertura test

Riflette i test aggiunti nei commit precedenti: rilevamento
piattaforma di server-utils, avvio effettivo di startServer, rami di
errore del WebSocket handler, cleanup/riconnessione di wsMixin,
side-effect di generaReferto e layout esteso del controller.
Aggiorna anche i conteggi di esempio (15 file/362 test Vitest, 81
E2E) e documenta come verificare la copertura (>99% statement).
This commit is contained in:
2026-07-03 12:04:15 +02:00
parent 0b7cbd00f6
commit 82c2286ca6
3 changed files with 36 additions and 9 deletions
+2
View File
@@ -78,6 +78,8 @@ In sviluppo, `vite-plugin-websocket.js` incorpora il server WebSocket dentro il
I test E2E girano in serie (`workers: 1`) per evitare race condition sullo stato WebSocket. Eseguire `npm run serve` prima di `npm run test:e2e`. I test E2E girano in serie (`workers: 1`) per evitare race condition sullo stato WebSocket. Eseguire `npm run serve` prima di `npm run test:e2e`.
La copertura statement/linee della suite Vitest è oltre il 99%. Per testare `startServer()` (`server.js`) o i rami platform-dependent di `getNetworkIPs()` (`server-utils.js`) senza effetti collaterali reali (scrittura su `.segnapunti/state.json`, dipendenza dalla piattaforma), si mocka il modulo con `vi.mock`/`vi.doMock` (vedi `tests/integration/startServer.test.js` e `tests/unit/server-utils-platform.test.js`) invece di eseguire il codice reale.
## Deploy ## Deploy
Il progetto si distribuisce tramite Docker. L'immagine è pubblicata sul registry Gitea self-hosted (`santantonio.sytes.net`): Il progetto si distribuisce tramite Docker. L'immagine è pubblicata sul registry Gitea self-hosted (`santantonio.sytes.net`):
+6 -2
View File
@@ -242,8 +242,12 @@ Lo stato viene salvato in `.segnapunti/state.json` anche in modalità dev.
| `npm run test:e2e` | Playwright — Chromium, Firefox, Mobile Chrome | | `npm run test:e2e` | Playwright — Chromium, Firefox, Mobile Chrome |
Le suite Vitest coprono la logica di gioco (`gameState`, inclusa `formInizio`), Le suite Vitest coprono la logica di gioco (`gameState`, inclusa `formInizio`),
il protocollo e il routing del server, la persistenza, il client WebSocket il protocollo e il routing del server (incluso l'avvio effettivo di
(`wsMixin`), i componenti Vue e la generazione del referto. `startServer`), la persistenza, il rilevamento di rete/piattaforma
(`server-utils`, inclusi i rami WSL/PowerShell), il client WebSocket
(`wsMixin`, connessione/riconnessione/cleanup), i componenti Vue e la
generazione del referto (inclusi i suoi side-effect di stampa). La copertura
statement complessiva è oltre il 99%.
> I test E2E richiedono il server in esecuzione (`npm run serve`) e i browser Playwright installati: > I test E2E richiedono il server in esecuzione (`npm run serve`) e i browser Playwright installati:
> ```bash > ```bash
+28 -7
View File
@@ -94,7 +94,9 @@ Esempi reali nel progetto:
- time out (`startTimeout`/`stopTimeout`: squadra, video, timestamp) - time out (`startTimeout`/`stopTimeout`: squadra, video, timestamp)
- generazione del referto (`buildRefertoHtml`) - generazione del referto (`buildRefertoHtml`)
- persistenza stato su disco (`persist.js`, con `fs` mockato) - persistenza stato su disco (`persist.js`, con `fs` mockato)
- utility di rete (`server-utils.js`) - utility di rete (`server-utils.js`), incluso il rilevamento piattaforma
(WSL/PowerShell vs. `os.networkInterfaces()`, con `fs`/`child_process`/`os`
mockati per non dipendere dalla macchina che esegue i test)
- elenco video spot (`spot-utils.js`, su cartella temporanea reale) - elenco video spot (`spot-utils.js`, su cartella temporanea reale)
Quando falliscono: Quando falliscono:
@@ -119,6 +121,8 @@ Esempi reali nel progetto:
- autorizzazioni (solo controller puo inviare certe azioni) - autorizzazioni (solo controller puo inviare certe azioni)
- timer server-side del time out (auto-`stopTimeout` dopo 30s, `startedAt` impostato dal server) - timer server-side del time out (auto-`stopTimeout` dopo 30s, `startedAt` impostato dal server)
- routing del server Express (`createApp`: rotte display/controller/asset, `/spot/list` e file statici `/spot/`) - routing del server Express (`createApp`: rotte display/controller/asset, `/spot/list` e file statici `/spot/`)
- rami di errore del WebSocket handler (`ws.send`/`ws.terminate` che lanciano, `applyAction` che fallisce a metà azione: lo stato precedente va ripristinato senza propagare l'eccezione)
- avvio effettivo di `startServer` (`server.js`): ascolto HTTP, upgrade su `/ws`, rifiuto su altri percorsi, persistenza dopo un'azione — con `persist.js` mockato per non toccare mai `.segnapunti/state.json` reale
Quando falliscono: Quando falliscono:
- spesso c'e problema nel protocollo messaggi o nei controlli di ruolo - spesso c'e problema nel protocollo messaggi o nei controlli di ruolo
@@ -138,8 +142,9 @@ Esempi reali nel progetto:
- dialog reset/config/cambi - dialog reset/config/cambi
- modal time out del controller (scelta squadra/video, banner, countdown) - modal time out del controller (scelta squadra/video, banner, countdown)
- overlay time out del display (video, placeholder, countdown, dissolvenza) - overlay time out del display (video, placeholder, countdown, dissolvenza)
- bottone REFERTO nel dialog PARTITA FINITA - bottone REFERTO nel dialog PARTITA FINITA e generazione del referto stampabile (`generaReferto`: `window.open`, scrittura HTML, stampa)
- client WebSocket (`wsMixin`: connessione, riconnessione, `sendWs`, errori) - client WebSocket (`wsMixin`: connessione, riconnessione con backoff, cleanup allo smontaggio, `sendWs`, errori)
- layout esteso/landscape del controller (pannelli squadra, popup automatico SET VINTO con soglia decisiva)
Quando falliscono: Quando falliscono:
- spesso hai rotto template, computed, metodi o binding - spesso hai rotto template, computed, metodi o binding
@@ -190,8 +195,8 @@ Note importanti:
Caso OK (verde): Caso OK (verde):
```text ```text
Test Files 10 passed (10) Test Files 15 passed (15)
Tests 212 passed (212) Tests 362 passed (362)
``` ```
Significa: Significa:
@@ -208,7 +213,7 @@ Caso KO (rosso):
Caso OK: Caso OK:
```text ```text
75 passed 81 passed
``` ```
Caso KO: Caso KO:
@@ -279,7 +284,23 @@ npm run test:e2e -- --update-snapshots
npm run test:e2e npm run test:e2e
``` ```
## 10) Come aggiungere un nuovo test (consigli pratici) ## 10) Copertura del codice
Non c'è uno script `npm` dedicato, ma si può controllare la copertura in
qualsiasi momento con:
```bash
npx vitest run tests/unit tests/integration tests/component --coverage
```
Il report a schermo mostra percentuale e righe scoperte per file. La suite
attuale copre oltre il 99% di statement/linee; le poche righe rimaste
scoperte sono documentate nei commit dei rispettivi test come codice morto,
difensivo, oppure legato a HMR (`import.meta.hot`) o all'avvio diretto
(`node server.js`) — casi non testabili in modo significativo senza side
effect reali sull'ambiente.
## 11) Come aggiungere un nuovo test (consigli pratici)
- metti i test nel posto giusto: - metti i test nel posto giusto:
- `tests/unit` per logica pura - `tests/unit` per logica pura