/**
* `dbErrorCode()`(指示書AT §3-7)— 監査ログ `db.write` の `db_error_code` には
* ★Prisma のエラーコードとドライバのエラー番号だけ★を載せる(メッセージには DB のユーザー名が入る)。
*/
import { describe, expect, it } from "vitest";
import { dbErrorCode } from "@/lib/logger/db-write";
describe("dbErrorCode", () => {
it("Prisma に包まれたドライバのエラー(列の権限エラー 1143)→ \"P2039:1143\"", () => {
const err = Object.assign(new Error("Database error. Message: denied to user 'u'@'h'"), {
code: "P2039",
meta: { driverAdapterError: { cause: { originalCode: "1143", originalMessage: "denied to user 'u'@'h'" } } },
});
expect(dbErrorCode(err)).toBe("P2039:1143");
});
it("Prisma のコードだけ / ドライバの番号だけ", () => {
expect(dbErrorCode(Object.assign(new Error("x"), { code: "P2025" }))).toBe("P2025");
expect(dbErrorCode(Object.assign(new Error("x"), { errno: 1045 }))).toBe("1045");
});
it("形式に合わない値は拾わない(メッセージが紛れ込まない)", () => {
expect(dbErrorCode(Object.assign(new Error("x"), { code: "ER_ACCESS_DENIED user 'u'" }))).toBe("unknown");
expect(dbErrorCode(new Error("denied to user 'u'@'h'"))).toBe("unknown");
expect(dbErrorCode("string error")).toBe("unknown");
expect(dbErrorCode(null)).toBe("unknown");
});
});