42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { z } from "zod";
|
|
import { ClientRequestError, mapErrorToResponse } from "../src/route/error_handler.ts";
|
|
|
|
describe("error_handler", () => {
|
|
it("formats ClientRequestError with provided status", () => {
|
|
const { status, body } = mapErrorToResponse(new ClientRequestError(400, "invalid payload"));
|
|
expect(status).toBe(400);
|
|
expect(body).toEqual({
|
|
code: 400,
|
|
message: "BadRequest",
|
|
detail: "invalid payload",
|
|
});
|
|
});
|
|
|
|
it("coerces ZodError into a 400 response", () => {
|
|
const schema = z.object({ foo: z.string() });
|
|
const parseResult = schema.safeParse({});
|
|
|
|
if (parseResult.success) {
|
|
throw new Error("Expected validation error");
|
|
}
|
|
|
|
const { status, body } = mapErrorToResponse(parseResult.error);
|
|
|
|
expect(status).toBe(400);
|
|
expect(body.code).toBe(400);
|
|
expect(body.message).toBe("BadRequest");
|
|
expect(body.detail).toContain("expected string");
|
|
});
|
|
|
|
it("defaults to 500 for unexpected errors", () => {
|
|
const { status, body } = mapErrorToResponse(new Error("boom"));
|
|
|
|
expect(status).toBe(500);
|
|
expect(body).toEqual({
|
|
code: 500,
|
|
message: "Internal Server Error",
|
|
detail: "boom",
|
|
});
|
|
});
|
|
});
|