Files
CRAPP/test/unit/auth-route.test.ts
T
davideandClaude Opus 5 752b300474 Copre presenze, calendario e guardia admin con nuovi test.
Confrontando le funzioni esportate di src/lib/ con i riferimenti in test/,
le uniche funzioni pure ancora scoperte erano i conteggi presenze, tre
funzioni del calendario, i titoli MVP e i rifiuti della guardia notifiche.

- unit: contaPresenzeGiocatore e totaliEventiGiocatore, compleanniEventi,
  convocatiEvento, eventoVuoto, mvpVintiPerGiocatore, e il nuovo
  auth-route.test.ts sui 401 di richiediAdmin (DD-024);
- integration/permessi: badge_social_voti, che mancava tra le tabelle di M11,
  e le deroghe "Gli admin gestiscono tutti/e ...", mai verificate finora.

Due modifiche al codice servivano per poter scrivere i test:

- presenze.ts: i conteggi leggevano la data da dataOggi() e non erano
  verificabili; ora accettano oggi come parametro opzionale, come già
  facevano serieConsecutiva e serieConferme. Toglie anche la dipendenza
  dall'orologio che avrebbe cambiato i risultati dei test delle serie dal
  10 settembre in poi;
- auth-route.server.ts: "Bearer .." passava il pre-check con tre segmenti
  vuoti e arrivava fino alla chiamata di rete; ora i segmenti devono essere
  non vuoti.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 19:03:18 +02:00

31 lines
1.3 KiB
TypeScript

/**
* Check della guardia delle route che mandano notifiche: `bun test/unit/auth-route.test.ts`.
*
* `richiediAdmin` (DD-024) è l'unica barriera davanti a route che usano la service role e
* saltano la RLS: qui si verificano i rifiuti che non richiedono rete, cioè tutti quelli
* decisi prima di chiedere l'utente a Supabase. Il caso «token buono ma non admin» sta in
* `test/integration/permessi-route.test.ts`, che ha un database vero.
*/
import assert from "node:assert/strict";
import { richiediAdmin } from "@/lib/auth-route.server";
const con = (intestazioni: Record<string, string>) =>
richiediAdmin(new Request("http://localhost/api/public/qualcosa", { headers: intestazioni }));
const rifiuti: Array<[string, Record<string, string>]> = [
["nessuna intestazione", {}],
["schema sbagliato", { authorization: "Basic abc" }],
["Bearer senza token", { authorization: "Bearer " }],
["token non JWT", { authorization: "Bearer non-un-jwt" }],
["JWT a due segmenti", { authorization: "Bearer aaa.bbb" }],
["JWT con segmenti vuoti", { authorization: "Bearer .." }],
];
for (const [caso, intestazioni] of rifiuti) {
const res = await con(intestazioni);
assert.ok(res, `${caso}: la richiesta va fermata`);
assert.equal(res.status, 401, `${caso}: risponde 401`);
}
console.log("auth-route: ok");