UNPKG

fastlane

Version:

Fastlane is a fast and flexible API framework for Node.js. It automatically creates Express routes from your project's file structure, making it easy to build APIs quickly and efficiently.

90 lines 3.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const errors_1 = require("../errors"); const zod_1 = require("zod"); describe('Error classes', () => { test('StatusError should have correct default status code', () => { const error = new errors_1.StatusError('Test error'); expect(error.message).toBe('Test error'); expect(error.statusCode).toBe(400); }); test('StatusError should accept custom status code', () => { const error = new errors_1.StatusError('Test error', { statusCode: 418 }); expect(error.statusCode).toBe(418); }); test('Unauthorized should have status code 401', () => { const error = new errors_1.Unauthorized(); expect(error.message).toBe('Unauthorized'); expect(error.statusCode).toBe(401); }); test('Unauthorized should accept custom message', () => { const error = new errors_1.Unauthorized('Custom unauthorized message'); expect(error.message).toBe('Custom unauthorized message'); expect(error.statusCode).toBe(401); }); test('NotProcessed should have status code 403', () => { const error = new errors_1.NotProcessed(); expect(error.message).toBe('NotProcessed'); expect(error.statusCode).toBe(403); }); }); describe('isKnownError', () => { test('should identify known errors', () => { expect((0, errors_1.isKnownError)(new errors_1.StatusError('Test'))).toBe(true); expect((0, errors_1.isKnownError)(new errors_1.Unauthorized())).toBe(true); expect((0, errors_1.isKnownError)(new errors_1.NotProcessed())).toBe(true); }); test('should reject non-error objects', () => { expect((0, errors_1.isKnownError)(null)).toBe(false); expect((0, errors_1.isKnownError)(undefined)).toBe(false); expect((0, errors_1.isKnownError)({})).toBe(false); expect((0, errors_1.isKnownError)(new Error('Standard error'))).toBe(false); expect((0, errors_1.isKnownError)({ message: 'test' })).toBe(false); expect((0, errors_1.isKnownError)({ statusCode: 400 })).toBe(false); }); }); describe('appErrorHandler', () => { let mockRequest; let mockResponse; let mockNext; beforeEach(() => { mockRequest = {}; mockResponse = { status: jest.fn().mockReturnThis(), json: jest.fn().mockReturnThis(), send: jest.fn().mockReturnThis() }; mockNext = jest.fn(); // Mock console.log to avoid cluttering test output jest.spyOn(console, 'log').mockImplementation(() => { }); }); afterEach(() => { jest.restoreAllMocks(); }); test('should handle ZodError', () => { const schema = zod_1.z.object({ name: zod_1.z.string() }); let zodError; try { schema.parse({ name: 123 }); } catch (err) { zodError = err; (0, errors_1.appErrorHandler)(zodError, mockRequest, mockResponse, mockNext); } expect(mockResponse.status).toHaveBeenCalledWith(400); expect(mockResponse.send).toHaveBeenCalled(); }); test('should handle known errors', () => { const error = new errors_1.Unauthorized('Invalid token'); (0, errors_1.appErrorHandler)(error, mockRequest, mockResponse, mockNext); expect(mockResponse.status).toHaveBeenCalledWith(401); expect(mockResponse.json).toHaveBeenCalledWith({ message: 'Invalid token' }); }); test('should handle unknown errors', () => { const error = new Error('Something went wrong'); (0, errors_1.appErrorHandler)(error, mockRequest, mockResponse, mockNext); expect(mockResponse.status).toHaveBeenCalledWith(500); expect(mockResponse.json).toHaveBeenCalledWith({ message: 'Unknown error' }); }); }); //# sourceMappingURL=errors.test.js.map