/** * Unit tests for error classes */ import { APIError, AuthenticationError, InvalidRequestError, RateLimitError, ServerError, ForbiddenError, ServiceUnavailableError, APIConnectionError, SecurityError, } from '../../src/errors'; describe('Error classes', () => { test('APIError has correct properties', () => { const err = new APIError('test', 400, { detail: 'bad' }); expect(err.message).toBe('test'); expect(err.statusCode).toBe(400); expect(err.errorDetails).toEqual({ detail: 'bad' }); expect(err.name).toBe('APIError'); expect(err).toBeInstanceOf(Error); }); test('AuthenticationError extends APIError', () => { const err = new AuthenticationError('unauthorized', 401); expect(err.name).toBe('AuthenticationError'); expect(err.statusCode).toBe(401); expect(err).toBeInstanceOf(APIError); }); test('InvalidRequestError extends APIError', () => { const err = new InvalidRequestError('bad request', 400); expect(err.name).toBe('InvalidRequestError'); expect(err.statusCode).toBe(400); expect(err).toBeInstanceOf(APIError); }); test('RateLimitError extends APIError', () => { const err = new RateLimitError('rate limit', 429); expect(err.name).toBe('RateLimitError'); expect(err.statusCode).toBe(429); expect(err).toBeInstanceOf(APIError); }); test('ServerError extends APIError', () => { const err = new ServerError('server error', 500); expect(err.name).toBe('ServerError'); expect(err.statusCode).toBe(500); expect(err).toBeInstanceOf(APIError); }); test('ForbiddenError extends APIError', () => { const err = new ForbiddenError('forbidden', 403); expect(err.name).toBe('ForbiddenError'); expect(err.statusCode).toBe(403); expect(err).toBeInstanceOf(APIError); }); test('ServiceUnavailableError extends APIError', () => { const err = new ServiceUnavailableError('unavailable', 503); expect(err.name).toBe('ServiceUnavailableError'); expect(err.statusCode).toBe(503); expect(err).toBeInstanceOf(APIError); }); test('APIConnectionError is standalone', () => { const err = new APIConnectionError('connection failed'); expect(err.name).toBe('APIConnectionError'); expect(err.message).toBe('connection failed'); expect(err).toBeInstanceOf(Error); expect(err).not.toBeInstanceOf(APIError); }); test('SecurityError is standalone', () => { const err = new SecurityError('security violation'); expect(err.name).toBe('SecurityError'); expect(err.message).toBe('security violation'); expect(err).toBeInstanceOf(Error); expect(err).not.toBeInstanceOf(APIError); }); });