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 * 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 * mese", "tutti rispondono alle convocazioni") e quelli la cui logica dipende da dati scritti
* su altre tabelle ("250 presenze complessive" via `contaPresenzeGiocatore()`, "media pagelle * 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 * 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 * 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 matchId = `${PREFISSO}-o12-m1`;
const [g1, g2, g3] = giocatori; const [g1, g2, g3] = giocatori;
// 7 + 7 + 9 = 23 -> media 7.666... arrotondata a 7.7. Vincoli reali della tabella: // 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"); assert.equal(pagelleReali.length, 3, "i tre voti sono stati scritti e riletti dal database");
const o12 = obiettiviSquadra(giocatori, { eventi: [], presenze: {}, pagelle: pagelleReali }).find( const obiettivi = obiettiviSquadra(giocatori, {
(o) => o.id === "o12", eventi: [],
)!; presenze: {},
assert.equal(o12.valore, 7.7, "media dei voti reali, arrotondata a una cifra decimale"); 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 { } finally {
await rest(`risposte_presenze?evento_id=like.${PREFISSO}*`, { method: "DELETE" }); 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, "o1").valore, 0, "nessun evento nel mese: 0%, non NaN");
assert.equal(trova(vuoti, "o2").valore, 0); assert.equal(trova(vuoti, "o2").valore, 0);
assert.equal(trova(vuoti, "o12").valore, 0, "nessuna pagella: media 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( assert.ok(
vuoti.every((o) => Number.isFinite(o.valore)), vuoti.every((o) => Number.isFinite(o.valore)),
"nessun valore NaN o infinito", "nessun valore NaN o infinito",
@@ -294,6 +295,12 @@ assert.equal(
7, 7,
"la media aggrega i voti di più partite, non guarda solo una match_id", "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 ------------------------------------------------------ // --- progressoObiettivo ------------------------------------------------------
const o = (valore: number, target: number): ObiettivoSquadra => ({ const o = (valore: number, target: number): ObiettivoSquadra => ({