Tolta la campanella in alto a destra: il numero delle non lette è ora un pallino rosso sull'angolo dell'avatar. Il tap sull'avatar porta sempre al profilo, quello sul pallino apre l'elenco delle notifiche (lettura ed eliminazione). Con tutte le notifiche lette il pallino resta neutro col totale, così restano eliminabili. Logica del pallino in pallinoNotifiche(), coperta da test; documentazione allineata. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
/** Check delle notifiche in-app (M17): `bun test/unit/notifiche-utente.test.ts`. */
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
contatoreBadge,
|
|
daRiga,
|
|
pallinoNotifiche,
|
|
type RigaNotifica,
|
|
} from "@/lib/notifiche-utente";
|
|
|
|
// --- daRiga: conversione database -> modello applicativo ---------------------
|
|
const riga: RigaNotifica = {
|
|
id: "n1",
|
|
tipo: "evento_promemoria_24h",
|
|
titolo: "Promemoria: Allenamento",
|
|
corpo: "10/09/2026 alle 20:30",
|
|
evento_id: "e1",
|
|
letta: false,
|
|
creato_il: "2026-09-10T09:00:00Z",
|
|
};
|
|
|
|
assert.deepEqual(daRiga(riga), {
|
|
id: "n1",
|
|
tipo: "evento_promemoria_24h",
|
|
titolo: "Promemoria: Allenamento",
|
|
corpo: "10/09/2026 alle 20:30",
|
|
eventoId: "e1",
|
|
letta: false,
|
|
creataIl: "2026-09-10T09:00:00Z",
|
|
});
|
|
|
|
assert.equal(
|
|
daRiga({ ...riga, evento_id: null }).eventoId,
|
|
null,
|
|
"un messaggio admin non ha evento",
|
|
);
|
|
|
|
// --- contatoreBadge: il numero esatto fino a 9, poi "9+" ---------------------
|
|
assert.equal(contatoreBadge(0), "0");
|
|
assert.equal(contatoreBadge(1), "1");
|
|
assert.equal(contatoreBadge(9), "9");
|
|
assert.equal(contatoreBadge(10), "9+");
|
|
assert.equal(contatoreBadge(42), "9+");
|
|
|
|
// --- pallinoNotifiche: rosso con le non lette, neutro col totale, assente se vuoto ---
|
|
assert.equal(pallinoNotifiche(0, 0), null);
|
|
assert.deepEqual(pallinoNotifiche(5, 2), { testo: "2", daLeggere: true });
|
|
assert.deepEqual(pallinoNotifiche(30, 12), { testo: "9+", daLeggere: true });
|
|
// Tutte lette: il pallino resta per poterle ancora aprire ed eliminare.
|
|
assert.deepEqual(pallinoNotifiche(3, 0), { testo: "3", daLeggere: false });
|
|
|
|
console.log("notifiche-utente: ok");
|