Completa la copertura test dell'obiettivo "200 pagelle compilate"

C'era una sola asserzione (2 pagelle -> 2), nessun caso vuoto esplicito e
nessun integration test. Aggiunti il caso vuoto, il conteggio aggregato su
più match_id, e l'assert su o13 nell'integration test già scritto per la
media pagelle (stessi voti reali scritti su pagelle_voti, zero setup extra).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 11:29:13 +02:00
co-authored by Claude Sonnet 5
parent 261578357a
commit 0dadabfea6
2 changed files with 24 additions and 6 deletions
+17 -6
View File
@@ -3,7 +3,7 @@
* Copre gli obiettivi con scadenza/mese dinamici ("presenze del mese", "evento di squadra al
* mese", "tutti rispondono alle convocazioni") e quelli la cui logica dipende da dati scritti
* su altre tabelle ("250 presenze complessive" via `contaPresenzeGiocatore()`, "media pagelle
* da 7.5" via `pagelle_voti`).
* da 7.5" e "200 pagelle compilate" via `pagelle_voti`).
*
* I test unitari (`test/unit/obiettivi.test.ts`) verificano `obiettiviSquadra()` come funzione
* pura, con un `ContestoObiettivi` costruito a mano. Qui invece si scrivono righe vere su
@@ -439,7 +439,7 @@ if (!locale) {
},
);
await prova("o12 media pagelle vere lette da pagelle_voti", async () => {
await prova("o12/o13 media e conteggio pagelle vere lette da pagelle_voti", async () => {
const matchId = `${PREFISSO}-o12-m1`;
const [g1, g2, g3] = giocatori;
// 7 + 7 + 9 = 23 -> media 7.666... arrotondata a 7.7. Vincoli reali della tabella:
@@ -463,10 +463,21 @@ if (!locale) {
}>;
assert.equal(pagelleReali.length, 3, "i tre voti sono stati scritti e riletti dal database");
const o12 = obiettiviSquadra(giocatori, { eventi: [], presenze: {}, pagelle: pagelleReali }).find(
(o) => o.id === "o12",
)!;
assert.equal(o12.valore, 7.7, "media dei voti reali, arrotondata a una cifra decimale");
const obiettivi = obiettiviSquadra(giocatori, {
eventi: [],
presenze: {},
pagelle: pagelleReali,
});
assert.equal(
obiettivi.find((o) => o.id === "o12")!.valore,
7.7,
"media dei voti reali, arrotondata a una cifra decimale",
);
assert.equal(
obiettivi.find((o) => o.id === "o13")!.valore,
3,
"conteggio dei voti reali scritti sul database",
);
});
} finally {
await rest(`risposte_presenze?evento_id=like.${PREFISSO}*`, { method: "DELETE" });
+7
View File
@@ -39,6 +39,7 @@ const vuoti = obiettiviSquadra(giocatori, contestoVuoto, OGGI_AGOSTO);
assert.equal(trova(vuoti, "o1").valore, 0, "nessun evento nel mese: 0%, non NaN");
assert.equal(trova(vuoti, "o2").valore, 0);
assert.equal(trova(vuoti, "o12").valore, 0, "nessuna pagella: media 0");
assert.equal(trova(vuoti, "o13").valore, 0, "nessuna pagella: conteggio 0");
assert.ok(
vuoti.every((o) => Number.isFinite(o.valore)),
"nessun valore NaN o infinito",
@@ -294,6 +295,12 @@ assert.equal(
7,
"la media aggrega i voti di più partite, non guarda solo una match_id",
);
assert.equal(
trova(obiettiviSquadra(giocatori, { ...contestoVuoto, pagelle: pagellePiuPartite }), "o13")
.valore,
2,
"il conteggio somma i voti di più match_id, non solo dell'ultima",
);
// --- progressoObiettivo ------------------------------------------------------
const o = (valore: number, target: number): ObiettivoSquadra => ({