Completa la copertura test del badge Sherpa dei palloni e ne documenta il comportamento

Nessun bug nella logica di calcolo: soglie 3/6/10 corrette, gradoRaggiunto()/
statoBadge() si comportano come per gli altri badge da contatore. Trovato però un
comportamento reale ma non ovvio (già accennato in palloni.md, mai dimostrato con
dati veri): il conteggio del badge include anche le proposte automatiche di
completaTurni() non ancora confermate da nessuno, non solo i turni salvati in
turni_palloni.

Aggiunti test unit sulle soglie (badges.test.ts) e un nuovo end-to-end
(palloni-badge.test.ts) che scrive eventi/turni parzialmente confermati sul
database locale e verifica l'intera pipeline fetchTurni() -> completaTurni() ->
conteggioTurni() -> statoBadge(), incluso il caso "evento futuro non conta".
docs/modules/badge.md aggiornato con la pipeline, la copertura test e il limite
noto.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 14:26:41 +02:00
co-authored by Claude Sonnet 5
parent 1fdc6720a0
commit e6a222f196
3 changed files with 228 additions and 8 deletions
+15
View File
@@ -90,6 +90,21 @@ assert.equal(
"sopra la soglia minima, valgono le normali soglie di grado",
);
// --- palloni: soglie 3 / 6 / 10 -----------------------------------------------
const palloniDef = badgeDefs.find((b) => b.id === "palloni")!;
assert.equal(gradoRaggiunto(palloniDef, 2), null, "sotto la prima soglia nessun grado");
assert.equal(gradoRaggiunto(palloniDef, 3), "bronzo", "la soglia è inclusiva");
assert.equal(gradoRaggiunto(palloniDef, 5), "bronzo");
assert.equal(gradoRaggiunto(palloniDef, 6), "argento");
assert.equal(gradoRaggiunto(palloniDef, 9), "argento");
assert.equal(gradoRaggiunto(palloniDef, 10), "oro");
assert.equal(gradoRaggiunto(palloniDef, 99), "oro", "oltre l'oro resta oro");
assert.equal(
statoBadge(palloniDef, g({ palloni: 5 })).progresso,
83,
"5 turni su 6 per l'argento: 83%",
);
// --- badgeGiocatore ----------------------------------------------------------
assert.equal(badgeGiocatore(g()).length, badgeDefs.length, "i badge normali sono sempre tutti");
assert.ok(