mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-11 17:27:54 +02:00
`tests/security.test.ts` gagne cinq blocs qui verrouillent ce qui compte et qu'aucun type ne protège : - les cinq actions qui émettent un mot de passe appellent `sendNow` et jamais `queueMail`, et la trace journalisée porte un corps vide ; - l'écran Boîte mail ne déchiffre aucun secret, saisit en champ masqué et annonce qu'un champ vide conserve la valeur enregistrée ; - les trois fonctions qui écrivent un secret en base le chiffrent ; - ni copie ni copie cachée dans la chaîne d'envoi, et `to_address` reste une adresse unique et obligatoire ; - aucune lecture publique ne touche aux informations, et rien de ce qui les rend n'emprunte `dangerouslySetInnerHTML` ; - chaque boucle de fond garde son interrupteur et reste hors du bundle edge. `tests/backend-nav.test.ts` attrape l'oubli qu'on ne voit qu'à l'écran : ajouter une page demande de toucher aux titres, aux sections et au jeu d'icônes, et rater l'un des trois donne un en-tête vide ou une icône absente. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014QsLjRAnuLwivqxCbM4WeP
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import { MAX_ATTEMPTS, backoffDelayMs, shouldGiveUp } from "../src/lib/mail-outbox";
|
|
|
|
test("l'attente entre deux tentatives croît et reste plafonnée", () => {
|
|
const delays = [1, 2, 3, 4, 5].map(backoffDelayMs);
|
|
for (let i = 1; i < delays.length; i += 1) {
|
|
assert.ok(delays[i] > delays[i - 1], `la tentative ${i + 1} devrait attendre plus longtemps`);
|
|
}
|
|
assert.equal(backoffDelayMs(1), 2 * 60_000);
|
|
assert.equal(backoffDelayMs(4), 16 * 60_000);
|
|
// Au-delà du plafond, l'attente ne double plus indéfiniment.
|
|
assert.equal(backoffDelayMs(50), backoffDelayMs(MAX_ATTEMPTS));
|
|
});
|
|
|
|
test("une valeur aberrante ne produit pas une attente absurde", () => {
|
|
assert.equal(backoffDelayMs(0), backoffDelayMs(1));
|
|
assert.equal(backoffDelayMs(-3), backoffDelayMs(1));
|
|
assert.ok(Number.isFinite(backoffDelayMs(1000)));
|
|
});
|
|
|
|
test("on abandonne après cinq tentatives, pas avant", () => {
|
|
assert.equal(shouldGiveUp(1), false);
|
|
assert.equal(shouldGiveUp(MAX_ATTEMPTS - 1), false);
|
|
assert.equal(shouldGiveUp(MAX_ATTEMPTS), true);
|
|
assert.equal(shouldGiveUp(MAX_ATTEMPTS + 1), true);
|
|
});
|