Newer
Older
client_dwatch / lib / logger / __tests__ / db-write.test.ts
/**
 * `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");
  });
});