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:
1 parent
06c91149e7
commit
99265f6a1e
13 files changed
+106
-30
No files matched your search
@@ -13,6 +13,7 @@ import {
|
||||
mancanoPer,
|
||||
microcopyBadge,
|
||||
prossimoTraguardo,
|
||||
quantiAlGrado,
|
||||
segretiNascosti,
|
||||
statoBadge,
|
||||
tuttiBadge,
|
||||
@@ -247,4 +248,17 @@ assert.equal(
|
||||
"gli id dei badge sono unici",
|
||||
);
|
||||
|
||||
// --- quantiAlGrado: chi ha raggiunto almeno quel grado -----------------------------
|
||||
{
|
||||
const def = badgeDefs[0]!;
|
||||
const rosa = [g(), g(), g()];
|
||||
assert.equal(quantiAlGrado(def, [], "bronzo"), 0);
|
||||
const n = (grado: (typeof gradiOrdine)[number]) => quantiAlGrado(def, rosa, grado);
|
||||
assert.ok(
|
||||
n("bronzo") >= n("argento") && n("argento") >= n("oro"),
|
||||
"i gradi alti non superano i bassi",
|
||||
);
|
||||
assert.equal(n("bronzo"), rosa.filter((x) => gradoRaggiunto(def, def.valore(x)) !== null).length);
|
||||
}
|
||||
|
||||
console.log("badges: ok");
|
||||
@@ -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");
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
contaPiuSenzaRicezione,
|
||||
haPunteggio,
|
||||
parzialiFinali,
|
||||
percentualePiu,
|
||||
sintesiValutazioni,
|
||||
contaValutazioni,
|
||||
fondamentali,
|
||||
@@ -269,4 +270,8 @@ assert.deepEqual(
|
||||
assert.deepEqual(set2.squadra.muro, { piu: 1, meno: 0 });
|
||||
assert.deepEqual(set2.squadra.battuta, { piu: 0, meno: 0 });
|
||||
assert.equal(sintesiValutazioni([]).perGiocatore.length, 0);
|
||||
assert.equal(percentualePiu(0, 0), null);
|
||||
assert.equal(percentualePiu(3, 1), 75);
|
||||
assert.equal(percentualePiu(0, 4), 0);
|
||||
|
||||
console.log("scout-store sintesi: ok");
|
||||
@@ -1,6 +1,6 @@
|
||||
/** Check dell'helper di classi CSS: `bun test/unit/utils.test.ts`. */
|
||||
/** Check dell'helper di utils (classi CSS e percentuale): `bun test/unit/utils.test.ts`. */
|
||||
import assert from "node:assert/strict";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { cn, percentuale } from "@/lib/utils";
|
||||
|
||||
// --- cn: unisce classi statiche e condizionali --------------------------------
|
||||
assert.equal(cn("a", "b"), "a b");
|
||||
@@ -16,4 +16,10 @@ assert.equal(
|
||||
"classi non in conflitto convivono",
|
||||
);
|
||||
|
||||
// --- percentuale -----------------------------------------------------------------
|
||||
assert.equal(percentuale(1, 0), 0, "totale 0: nessuna divisione per zero");
|
||||
assert.equal(percentuale(1, 3), 33);
|
||||
assert.equal(percentuale(2, 3), 67);
|
||||
assert.equal(percentuale(5, 5), 100);
|
||||
|
||||
console.log("utils: ok");
|
||||
Reference in new issue
Block a user