UNPKG

@gp_jcisneros/errors

Version:

Error handling utilities for GreenPay microservices and validation middleware

148 lines (124 loc) 5.52 kB
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); }); });