Checkpoint: Audit et fiabilisation SONUM : suppression des composants de démonstration non référencés, nettoyage des dépendances inutilisées, contrôles d’écriture cohérents pour les comptes readonly, validation et normalisation des entrées, transactions sur les opérations multi-étapes, optimisations de requêtes et découpage dynamique des pages lourdes. TypeScript, 37 tests Vitest et build de production validés.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi, beforeEach } from "vitest";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { appRouter } from "./routers";
|
||||
import { COOKIE_NAME } from "../shared/const";
|
||||
import type { TrpcContext } from "./_core/context";
|
||||
@@ -247,3 +247,43 @@ describe("auth.loginLocal - validation", () => {
|
||||
).rejects.toMatchObject({ code: "UNAUTHORIZED" });
|
||||
});
|
||||
});
|
||||
|
||||
// ─── Tests : politiques d'écriture et validation des messages ─────────────────
|
||||
|
||||
describe("politique lecture seule", () => {
|
||||
it("bloque une mutation d'administration même pour un gestionnaire", async () => {
|
||||
const readonlyGestionnaire = makeUser({ sonumRole: "gestionnaire", role: "readonly" });
|
||||
const caller = appRouter.createCaller(makeCtx(readonlyGestionnaire));
|
||||
|
||||
await expect(
|
||||
caller.admin.updateRole({ userId: 2, sonumRole: "referent" })
|
||||
).rejects.toMatchObject({ code: "FORBIDDEN" });
|
||||
});
|
||||
|
||||
it("bloque l'envoi de message pour un compte lecture seule avant tout accès aux données", async () => {
|
||||
const readonlyReferent = makeUser({ role: "readonly" });
|
||||
const caller = appRouter.createCaller(makeCtx(readonlyReferent));
|
||||
|
||||
await expect(
|
||||
caller.canaux.sendMessage({ canalId: 1, contenu: "Message de test" })
|
||||
).rejects.toMatchObject({ code: "FORBIDDEN" });
|
||||
});
|
||||
});
|
||||
|
||||
describe("validation des contenus libres", () => {
|
||||
it("rejette un message de canal constitué uniquement d'espaces", async () => {
|
||||
const caller = appRouter.createCaller(makeCtx(makeUser()));
|
||||
|
||||
await expect(
|
||||
caller.canaux.sendMessage({ canalId: 1, contenu: " " })
|
||||
).rejects.toMatchObject({ code: "BAD_REQUEST" });
|
||||
});
|
||||
|
||||
it("rejette une demande de mise en relation dont le message est vide après normalisation", async () => {
|
||||
const caller = appRouter.createCaller(makeCtx(makeUser()));
|
||||
|
||||
await expect(
|
||||
caller.miseEnRelation.soumettre({ sujet: "Recherche partenaire", message: " " })
|
||||
).rejects.toMatchObject({ code: "BAD_REQUEST" });
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user