Checkpoint: Création de connecteur web : l’URL est normalisée, la table est présente sur les trois environnements et le flux HTTPS de production a été validé avec le même profil utilisateur (création puis suppression sans résidu). Toute erreur de persistance est désormais remplacée côté navigateur par un message générique ; les logs ne conservent que le code technique MySQL/Drizzle, jamais la requête ni ses paramètres. Recette et production déployées, santé, MySQL, routes HTTP 200 et volumes PDF vérifiés. Suite validée : 75 tests, TypeScript et build.
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { WEB_IMPORT_SOURCE_SAVE_ERROR, getSafeWebImportSourceError } from "./webImportSourcesError";
|
||||
import {
|
||||
WEB_IMPORT_SOURCE_SAVE_ERROR,
|
||||
getSafeWebImportSourceError,
|
||||
getWebImportSourceTechnicalCode,
|
||||
} from "./webImportSourcesError";
|
||||
|
||||
describe("getSafeWebImportSourceError", () => {
|
||||
it("never returns the SQL statement or connector parameters to the client", () => {
|
||||
@@ -14,4 +18,12 @@ describe("getSafeWebImportSourceError", () => {
|
||||
expect(safeError.message).not.toContain("insert into");
|
||||
expect(safeError.message).not.toContain("secret-value");
|
||||
});
|
||||
|
||||
it("retient uniquement le code du pilote, même lorsque celui-ci est imbriqué", () => {
|
||||
const databaseError = Object.assign(new Error("params: user@example.fr, secret-value"), {
|
||||
cause: { code: "ER_NO_SUCH_TABLE", message: "contains secret-value" },
|
||||
});
|
||||
|
||||
expect(getWebImportSourceTechnicalCode(databaseError)).toBe("ER_NO_SUCH_TABLE");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user