sondaggioAperto() restava aperto per sempre una volta passate le 8:00 del giorno della partita, anche nei giorni successivi. Ora chiude esattamente all'ora di inizio (partita alle 21:00 → aperto fino alle 20:59, poi chiuso anche nei giorni seguenti), richiedendo anche l'ora dell'evento oltre alla data. Aggiunta sondaggioTerminato() per distinguere nel messaggio "non ancora aperto" da "già chiuso": altrimenti dopo la partita l'utente avrebbe continuato a leggere "apre alle 8:00". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
122 lines
3.8 KiB
TypeScript
122 lines
3.8 KiB
TypeScript
/** Check del sondaggio cacche: `bun test/unit/cacche.test.ts`. */
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
mediaPartita,
|
|
mediaStagione,
|
|
recordStagione,
|
|
sondaggioAperto,
|
|
sondaggioTerminato,
|
|
statisticheCacche,
|
|
type RigaCacche,
|
|
} from "@/lib/cacche";
|
|
|
|
const r = (evento_id: string, giocatore_id: string, quantita: number): RigaCacche => ({
|
|
evento_id,
|
|
giocatore_id,
|
|
quantita,
|
|
});
|
|
|
|
const righe: RigaCacche[] = [
|
|
r("e1", "g1", 3),
|
|
r("e2", "g1", 4),
|
|
r("e1", "g2", 1),
|
|
r("e2", "g2", 2),
|
|
];
|
|
|
|
// --- statisticheCacche -------------------------------------------------------
|
|
const stat = statisticheCacche(righe);
|
|
assert.deepEqual(stat["g1"], { totale: 7, giornate: 2, media: 3.5, record: 4, giornateTop: 2 });
|
|
assert.deepEqual(stat["g2"], { totale: 3, giornate: 2, media: 1.5, record: 2, giornateTop: 0 });
|
|
assert.deepEqual(statisticheCacche([]), {});
|
|
|
|
// giornateTop è la soglia del badge segreto: 3 conta, 2 no.
|
|
assert.equal(statisticheCacche([r("e1", "g9", 3)])["g9"]?.giornateTop, 1);
|
|
assert.equal(statisticheCacche([r("e1", "g9", 2)])["g9"]?.giornateTop, 0);
|
|
|
|
// Uno zero dichiarato è una giornata censita, non un dato mancante.
|
|
const conZero = statisticheCacche([r("e1", "g7", 0)])["g7"]!;
|
|
assert.deepEqual([conZero.giornate, conZero.media, conZero.record], [1, 0, 0]);
|
|
|
|
// --- medie -------------------------------------------------------------------
|
|
assert.equal(mediaPartita(righe, "e1"), 2, "(3+1)/2");
|
|
assert.equal(mediaPartita(righe, "e2"), 3, "(4+2)/2");
|
|
assert.equal(mediaPartita(righe, "inesistente"), 0, "nessun dato: zero, non NaN");
|
|
assert.equal(mediaStagione(righe), 2.5);
|
|
assert.equal(mediaStagione([]), 0);
|
|
assert.equal(mediaStagione([r("e1", "g1", 1), r("e1", "g2", 2), r("e1", "g3", 2)]), 1.7);
|
|
|
|
// --- recordStagione ----------------------------------------------------------
|
|
assert.deepEqual(recordStagione(righe), r("e2", "g1", 4));
|
|
assert.equal(recordStagione([]), null);
|
|
assert.deepEqual(
|
|
recordStagione([r("e1", "g1", 4), r("e2", "g2", 4)]),
|
|
r("e1", "g1", 4),
|
|
"a parità vince chi l'ha fatto per primo",
|
|
);
|
|
|
|
// --- sondaggioAperto ---------------------------------------------------------
|
|
// Partita del 5 settembre 2026 alle 21:00.
|
|
const alle = (h: number, m = 0) => new Date(2026, 8, 5, h, m);
|
|
const ORA_PARTITA = "21:00";
|
|
|
|
assert.equal(
|
|
sondaggioAperto("2026-09-05", ORA_PARTITA, alle(7, 59)),
|
|
false,
|
|
"prima delle 8 è chiuso",
|
|
);
|
|
assert.equal(sondaggioAperto("2026-09-05", ORA_PARTITA, alle(8)), true, "alle 8 in punto apre");
|
|
assert.equal(
|
|
sondaggioAperto("2026-09-05", ORA_PARTITA, alle(20, 59)),
|
|
true,
|
|
"un minuto prima del fischio d'inizio è ancora aperto",
|
|
);
|
|
assert.equal(
|
|
sondaggioAperto("2026-09-05", ORA_PARTITA, alle(21, 0)),
|
|
false,
|
|
"al fischio d'inizio si chiude",
|
|
);
|
|
assert.equal(
|
|
sondaggioAperto("2026-09-05", ORA_PARTITA, alle(23)),
|
|
false,
|
|
"dopo l'inizio resta chiuso per il resto della giornata",
|
|
);
|
|
assert.equal(
|
|
sondaggioAperto("2026-09-06", ORA_PARTITA, alle(23)),
|
|
false,
|
|
"partita di domani: chiuso",
|
|
);
|
|
assert.equal(
|
|
sondaggioAperto("2026-09-04", ORA_PARTITA, alle(0, 1)),
|
|
false,
|
|
"partita passata: chiuso anche nei giorni successivi",
|
|
);
|
|
|
|
// --- sondaggioTerminato: distingue "non ancora aperto" da "già chiuso" -------
|
|
assert.equal(
|
|
sondaggioTerminato("2026-09-05", ORA_PARTITA, alle(7, 59)),
|
|
false,
|
|
"prima dell'apertura: non ancora aperto, non terminato",
|
|
);
|
|
assert.equal(
|
|
sondaggioTerminato("2026-09-05", ORA_PARTITA, alle(20, 59)),
|
|
false,
|
|
"in corso: non ancora terminato",
|
|
);
|
|
assert.equal(
|
|
sondaggioTerminato("2026-09-05", ORA_PARTITA, alle(21, 0)),
|
|
true,
|
|
"al fischio d'inizio: terminato",
|
|
);
|
|
assert.equal(
|
|
sondaggioTerminato("2026-09-06", ORA_PARTITA, alle(23)),
|
|
false,
|
|
"partita di domani: non ancora, non terminato",
|
|
);
|
|
assert.equal(
|
|
sondaggioTerminato("2026-09-04", ORA_PARTITA, alle(0, 1)),
|
|
true,
|
|
"partita passata: terminato",
|
|
);
|
|
|
|
console.log("cacche: ok");
|