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