Calcoli di badge, obiettivi e percentuali spostati da route e componenti a src/lib

squadra: mediaPresenzeRosa, obiettiviCompletati, mediaProgressoObiettivi,
quantiAlGrado; scout: percentualePiu; utils: percentuale (usata da profilo,
RosaPresenze, CollezioneBadge). Test unitari per ciascuna.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-11-15 19:36:00 +01:00
1 parent 06c91149e7
commit 99265f6a1e
13 files changed
+106 -30

No files matched your search

+21
View File
@@ -6,7 +6,10 @@ import type { VotoPagella } from "@/lib/pagelle";
import type { MappaPresenze } from "@/lib/presenze";
import {
contestoVuoto,
mediaPresenzeRosa,
mediaProgressoObiettivi,
microcopyObiettivo,
obiettiviCompletati,
obiettiviOrdinati,
obiettiviSquadra,
progressoObiettivo,
@@ -735,4 +738,22 @@ for (const ob of obiettiviSquadra(giocatori, contestoVuoto)) {
}
}
// --- riepiloghi usati dalla pagina Squadra -----------------------------------------
{
const ob = (valore: number): ObiettivoSquadra =>
({ ...obiettiviSquadra(giocatori, contestoVuoto)[0]!, valore, target: 10 }) as ObiettivoSquadra;
assert.equal(obiettiviCompletati([]), 0);
assert.equal(mediaProgressoObiettivi([]), 0);
assert.equal(obiettiviCompletati([ob(10), ob(15), ob(3)]), 2);
assert.equal(mediaProgressoObiettivi([ob(10), ob(0)]), 50);
assert.equal(mediaPresenzeRosa([]), 0);
const p = (presenze: number, totaliEventi: number) => ({
...giocatori[0]!,
presenze,
totaliEventi,
});
assert.equal(mediaPresenzeRosa([p(5, 10), p(10, 10)]), 75);
assert.equal(mediaPresenzeRosa([p(0, 0)]), 0, "nessun evento: niente divisione per zero");
}
console.log("obiettivi: ok");