@gp_jcisneros/errors
Version:
Error handling utilities for GreenPay microservices and validation middleware
148 lines (124 loc) • 5.52 kB
JavaScript
const { DatabaseError } = require('../src/DatabaseError');
describe('DatabaseError', () => {
test('should create a connection error', () => {
const error = DatabaseError.connection('Connection failed');
expect(error.message).toBe('Connection failed');
expect(error.statusCode).toBe(500);
expect(error.name).toBe('DatabaseError');
expect(error.type).toBe('DATABASE_ERROR');
expect(error.operation).toBe('CONNECT');
expect(error.errorCode).toBe('DB_CONNECT');
expect(error.description).toBe('Connection failed');
expect(error.integration).toBe('database-service');
});
test('should create a query error', () => {
const error = DatabaseError.query('Query failed', 'users');
expect(error.message).toBe('Query failed');
expect(error.operation).toBe('QUERY');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_QUERY');
expect(error.description).toBe('Query failed');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should create an insert error', () => {
const error = DatabaseError.insert('Insert failed', 'users');
expect(error.message).toBe('Insert failed');
expect(error.operation).toBe('INSERT');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_INSERT');
expect(error.description).toBe('Insert failed');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should create an update error', () => {
const error = DatabaseError.update('Update failed', 'users');
expect(error.message).toBe('Update failed');
expect(error.operation).toBe('UPDATE');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_UPDATE');
expect(error.description).toBe('Update failed');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should create a delete error', () => {
const error = DatabaseError.delete('Delete failed', 'users');
expect(error.message).toBe('Delete failed');
expect(error.operation).toBe('DELETE');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_DELETE');
expect(error.description).toBe('Delete failed');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should create a not found error', () => {
const error = DatabaseError.notFound('users');
expect(error.message).toBe('Record not found in users');
expect(error.operation).toBe('GET');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_GET');
expect(error.description).toBe('Record not found in users');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should create a duplicate key error', () => {
const error = DatabaseError.duplicateKey('users', 'email');
expect(error.message).toBe('Duplicate email in users');
expect(error.operation).toBe('INSERT');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_INSERT');
expect(error.description).toBe('Duplicate email in users');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should create a constraint violation error', () => {
const error = DatabaseError.constraintViolation('Constraint failed', 'users');
expect(error.message).toBe('Constraint failed');
expect(error.operation).toBe('CONSTRAINT');
expect(error.table).toBe('users');
expect(error.errorCode).toBe('DB_CONSTRAINT');
expect(error.description).toBe('Constraint failed');
expect(error.integration).toBe('database-service');
expect(error.statusCode).toBe(500);
});
test('should get database details', () => {
const error = DatabaseError.connection('Connection failed');
const details = error.getDatabaseDetails();
expect(details.operation).toBe('CONNECT');
expect(details.message).toBe('Connection failed');
expect(details.type).toBe('DATABASE_ERROR');
expect(details.errorCode).toBe('DB_CONNECT');
expect(details.description).toBe('Connection failed');
expect(details.integration).toBe('database-service');
});
test('should have required fields', () => {
const error = DatabaseError.connection('Connection failed');
expect(error.hasRequiredFields()).toBe(true);
expect(error.getRequiredFields()).toEqual({
errorCode: 'DB_CONNECT',
description: 'Connection failed',
integration: 'database-service'
});
});
test('should convert to JSON', () => {
const error = DatabaseError.query('Query failed', 'users');
const json = error.toJSON();
expect(json.name).toBe('DatabaseError');
expect(json.message).toBe('Query failed');
expect(json.statusCode).toBe(500);
expect(json.errorCode).toBe('DB_QUERY');
expect(json.description).toBe('Query failed');
expect(json.integration).toBe('database-service');
expect(json.timestamp).toBeDefined();
expect(json.stack).toBeDefined();
});
test('should handle null operation', () => {
const error = new DatabaseError('Test error', null, 'users');
expect(error.operation).toBe(null);
expect(error.errorCode).toBe('DB_UNKNOWN');
});
test('should handle null table', () => {
const error = new DatabaseError('Test error', 'QUERY', null);
expect(error.table).toBe(null);
});
});