Files
flyer-crawler.projectium.com/src/middleware/fileUpload.middleware.test.ts
Torben Sorensen e457bbf046
All checks were successful
Deploy to Test Environment / deploy-to-test (push) Successful in 26m51s
more req work
2026-01-09 00:18:09 -08:00

74 lines
2.4 KiB
TypeScript

// src/middleware/fileUpload.middleware.test.ts
import { describe, it, expect, vi, beforeEach, type Mock } from 'vitest';
import { Request, Response, NextFunction } from 'express';
import { requireFileUpload } from './fileUpload.middleware';
import { ValidationError } from '../services/db/errors.db';
import { createMockRequest } from '../tests/utils/createMockRequest';
describe('requireFileUpload Middleware', () => {
let mockRequest: Partial<Request>;
let mockResponse: Partial<Response>;
let mockNext: NextFunction;
beforeEach(() => {
// Reset mocks before each test
mockRequest = createMockRequest();
mockResponse = {
status: vi.fn().mockReturnThis(),
json: vi.fn(),
};
mockNext = vi.fn();
});
it('should call next() without an error if the file exists and has the correct fieldname', () => {
// Arrange
const fieldName = 'flyerImage';
mockRequest.file = {
fieldname: fieldName,
// other multer properties are not needed for this test
} as Express.Multer.File;
const middleware = requireFileUpload(fieldName);
// Act
middleware(mockRequest as Request, mockResponse as Response, mockNext);
// Assert
expect(mockNext).toHaveBeenCalledTimes(1);
expect(mockNext).toHaveBeenCalledWith(); // Called with no arguments
});
it('should call next() with a ValidationError if req.file is missing', () => {
// Arrange
const fieldName = 'flyerImage';
// req.file is not set on mockRequest
const middleware = requireFileUpload(fieldName);
// Act
middleware(mockRequest as Request, mockResponse as Response, mockNext);
// Assert
expect(mockNext).toHaveBeenCalledTimes(1);
const error = (mockNext as Mock).mock.calls[0][0];
expect(error).toBeInstanceOf(ValidationError);
expect(error.validationErrors[0].message).toBe(
`A file for the '${fieldName}' field is required.`,
);
expect(error.validationErrors[0].path).toEqual(['file', fieldName]);
});
it('should call next() with a ValidationError if req.file has the wrong fieldname', () => {
// Arrange
const expectedFieldName = 'correctField';
mockRequest.file = { fieldname: 'wrongField' } as Express.Multer.File;
const middleware = requireFileUpload(expectedFieldName);
// Act
middleware(mockRequest as Request, mockResponse as Response, mockNext);
// Assert
expect(mockNext).toHaveBeenCalledWith(expect.any(ValidationError));
});
});