Files
CRAPP/test/unit/scout-live.test.ts
T

59 lines
2.0 KiB
TypeScript
Raw Normal View History

/** Check della sessione Scout Live: `bun test/unit/scout-live.test.ts`. */
import assert from "node:assert/strict";
import type { Evento } from "@/lib/eventi";
import {
SCADENZA_MINUTI,
dataOggi,
partitaDiOggi,
sessioneScaduta,
type SessioneScout,
} from "@/lib/scout-live";
const evento = (id: string, data: string, tipo: Evento["tipo"]): Evento => ({
id,
tipo,
titolo: id,
luogo: "",
data,
ora: "21:00",
note: "",
convocati: [],
campionato: true,
casa: true,
pagelleChiuse: false,
});
// --- dataOggi ----------------------------------------------------------------
assert.match(dataOggi(), /^\d{4}-\d{2}-\d{2}$/);
assert.equal(dataOggi(), new Date().toLocaleDateString("sv-SE"), "data locale, non UTC");
// --- partitaDiOggi -----------------------------------------------------------
const eventi = [
evento("a1", "2026-09-01", "allenamento"),
evento("p1", "2026-09-01", "partita"),
evento("p2", "2026-09-02", "partita"),
];
assert.equal(partitaDiOggi(eventi, "2026-09-01")?.id, "p1", "l'allenamento non si scoutizza");
assert.equal(partitaDiOggi(eventi, "2026-09-03"), null, "nessuna partita oggi");
assert.equal(partitaDiOggi([], "2026-09-01"), null);
// --- sessioneScaduta: libera il tavolo dopo SCADENZA_MINUTI ------------------
const sessione = (minutiFa: number): SessioneScout => ({
evento_id: "p1",
giocatore_id: "g1",
giocatore_nome: "Tizio",
aggiornato_il: new Date(Date.now() - minutiFa * 60_000).toISOString(),
});
assert.equal(sessioneScaduta(null), true, "nessuna sessione = tavolo libero");
assert.equal(sessioneScaduta(sessione(0)), false, "appena aggiornata");
assert.equal(sessioneScaduta(sessione(SCADENZA_MINUTI - 1)), false, "dentro la finestra");
assert.equal(sessioneScaduta(sessione(SCADENZA_MINUTI + 1)), true, "oltre la finestra");
assert.equal(
sessioneScaduta({ ...sessione(0), aggiornato_il: "data-non-valida" }),
true,
"timestamp illeggibile: meglio liberare la sessione che bloccarla",
);
console.log("scout-live: ok");