From 0dadabfea64d59b706e450660eb9046b3a5019b1 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Tue, 8 Sep 2026 11:29:13 +0200 Subject: [PATCH] Completa la copertura test dell'obiettivo "200 pagelle compilate" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- test/integration/obiettivi.test.ts | 23 +++++++++++++++++------ test/unit/obiettivi.test.ts | 7 +++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/test/integration/obiettivi.test.ts b/test/integration/obiettivi.test.ts index 77dcdb9..5ea95de 100644 --- a/test/integration/obiettivi.test.ts +++ b/test/integration/obiettivi.test.ts @@ -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" }); diff --git a/test/unit/obiettivi.test.ts b/test/unit/obiettivi.test.ts index d1db347..d2e95e3 100644 --- a/test/unit/obiettivi.test.ts +++ b/test/unit/obiettivi.test.ts @@ -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 => ({