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>
31 lines
1.3 KiB
TypeScript
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");
|