ionian/packages/server/tests/error_handler.test.ts

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",
});
});
});