42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
import { describe, expect, it, jest } from "@jest/globals";
|
|
import type { NextFunction, Request, Response } from "express";
|
|
import { MulterError } from "multer";
|
|
import { handleErrors } from "../../../src/api/middleware/handleErrors.ts";
|
|
import { AppError } from "../../../src/utils/AppError.ts";
|
|
import { createMockLogger } from "../../helpers/createMockLogger.ts";
|
|
|
|
const logger = createMockLogger();
|
|
|
|
const makeRes = (): Response => {
|
|
const res = {} as Response;
|
|
res.status = jest.fn().mockReturnValue(res) as unknown as Response["status"];
|
|
res.json = jest.fn().mockReturnValue(res) as unknown as Response["json"];
|
|
return res;
|
|
};
|
|
|
|
describe("handleErrors", () => {
|
|
it("maps a multer file-size violation to 413 Payload Too Large", () => {
|
|
const res = makeRes();
|
|
handleErrors(logger)(new MulterError("LIMIT_FILE_SIZE", "profileImage"), {} as Request, res, (() => {}) as NextFunction);
|
|
expect(res.status).toHaveBeenCalledWith(413);
|
|
});
|
|
|
|
it("maps other multer errors to 400", () => {
|
|
const res = makeRes();
|
|
handleErrors(logger)(new MulterError("LIMIT_UNEXPECTED_FILE", "profileImage"), {} as Request, res, (() => {}) as NextFunction);
|
|
expect(res.status).toHaveBeenCalledWith(400);
|
|
});
|
|
|
|
it("preserves AppError status codes", () => {
|
|
const res = makeRes();
|
|
handleErrors(logger)(new AppError({ status: 415, message: "bad image" }), {} as Request, res, (() => {}) as NextFunction);
|
|
expect(res.status).toHaveBeenCalledWith(415);
|
|
});
|
|
|
|
it("falls back to 500 for unknown errors", () => {
|
|
const res = makeRes();
|
|
handleErrors(logger)(new Error("boom"), {} as Request, res, (() => {}) as NextFunction);
|
|
expect(res.status).toHaveBeenCalledWith(500);
|
|
});
|
|
});
|