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
JavaScript
;
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