import { BotError, ErrorCategory } from '../../src/errors/BotError'; describe('BotError', () => { it('should create a BotError with all properties', () => { const error = new BotError({ code: 'E1001', category: ErrorCategory.USER_INPUT, messageKey: 'errors.E1001', }); expect(error).toBeInstanceOf(Error); expect(error).toBeInstanceOf(BotError); expect(error.name).toBe('BotError'); expect(error.code).toBe('E1001'); expect(error.category).toBe(ErrorCategory.USER_INPUT); expect(error.messageKey).toBe('errors.E1001'); expect(error.message).toBe('[E1001] errors.E1001'); }); it('should create a BotError without optional cause', () => { const error = new BotError({ code: 'E3999', category: ErrorCategory.BOT_INTERNAL, messageKey: 'errors.E3999', }); expect(error.cause).toBeUndefined(); }); it('should preserve the original cause error', () => { const originalError = new Error('DB connection failed'); const error = new BotError({ code: 'E3001', category: ErrorCategory.BOT_INTERNAL, messageKey: 'errors.E3001', cause: originalError, }); expect(error.cause).toBe(originalError); expect(error.cause?.message).toBe('DB connection failed'); }); it('should have correct category values', () => { expect(ErrorCategory.USER_INPUT).toBe('USER_INPUT'); expect(ErrorCategory.PERMISSION).toBe('PERMISSION'); expect(ErrorCategory.BOT_INTERNAL).toBe('BOT_INTERNAL'); expect(ErrorCategory.DISCORD_API).toBe('DISCORD_API'); }); });