@gp_jcisneros/errors
Version:
Error handling utilities for GreenPay microservices
113 lines (92 loc) • 3.93 kB
JavaScript
const { HttpError } = require('../src/HttpError');
describe('HttpError', () => {
test('should create a bad request error', () => {
const error = HttpError.badRequest('Invalid data');
expect(error.message).toBe('Invalid data');
expect(error.statusCode).toBe(400);
expect(error.name).toBe('HttpError');
expect(error.type).toBe('HTTP_ERROR');
expect(error.errorCode).toBe('HTTP_400');
expect(error.description).toBe('Invalid data');
expect(error.integration).toBe('http-service');
});
test('should create an unauthorized error', () => {
const error = HttpError.unauthorized('Invalid token');
expect(error.message).toBe('Invalid token');
expect(error.statusCode).toBe(401);
expect(error.errorCode).toBe('HTTP_401');
expect(error.description).toBe('Invalid token');
expect(error.integration).toBe('http-service');
});
test('should create a forbidden error', () => {
const error = HttpError.forbidden('Access denied');
expect(error.message).toBe('Access denied');
expect(error.statusCode).toBe(403);
expect(error.errorCode).toBe('HTTP_403');
expect(error.description).toBe('Access denied');
expect(error.integration).toBe('http-service');
});
test('should create a not found error', () => {
const error = HttpError.notFound('Resource not found');
expect(error.message).toBe('Resource not found');
expect(error.statusCode).toBe(404);
expect(error.errorCode).toBe('HTTP_404');
expect(error.description).toBe('Resource not found');
expect(error.integration).toBe('http-service');
});
test('should create a conflict error', () => {
const error = HttpError.conflict('Data conflict');
expect(error.message).toBe('Data conflict');
expect(error.statusCode).toBe(409);
expect(error.errorCode).toBe('HTTP_409');
expect(error.description).toBe('Data conflict');
expect(error.integration).toBe('http-service');
});
test('should create an unprocessable entity error', () => {
const error = HttpError.unprocessableEntity('Invalid entity');
expect(error.message).toBe('Invalid entity');
expect(error.statusCode).toBe(422);
expect(error.errorCode).toBe('HTTP_422');
expect(error.description).toBe('Invalid entity');
expect(error.integration).toBe('http-service');
});
test('should create an internal server error', () => {
const error = HttpError.internalServerError('Server error');
expect(error.message).toBe('Server error');
expect(error.statusCode).toBe(500);
expect(error.errorCode).toBe('HTTP_500');
expect(error.description).toBe('Server error');
expect(error.integration).toBe('http-service');
});
test('should have required fields', () => {
const error = HttpError.badRequest('Invalid data');
expect(error.hasRequiredFields()).toBe(true);
expect(error.getRequiredFields()).toEqual({
errorCode: 'HTTP_400',
description: 'Invalid data',
integration: 'http-service'
});
});
test('should convert to JSON', () => {
const error = HttpError.notFound('Resource not found');
const json = error.toJSON();
expect(json.name).toBe('HttpError');
expect(json.message).toBe('Resource not found');
expect(json.statusCode).toBe(404);
expect(json.errorCode).toBe('HTTP_404');
expect(json.description).toBe('Resource not found');
expect(json.integration).toBe('http-service');
expect(json.timestamp).toBeDefined();
expect(json.stack).toBeDefined();
});
test('should create error with custom status code', () => {
const error = new HttpError('Custom error', 418);
expect(error.statusCode).toBe(418);
expect(error.errorCode).toBe('HTTP_418');
});
test('should use default status code', () => {
const error = new HttpError('Default error');
expect(error.statusCode).toBe(500);
expect(error.errorCode).toBe('HTTP_500');
});
});