85 lines
2.8 KiB
TypeScript
85 lines
2.8 KiB
TypeScript
|
|
/**
|
||
|
|
* 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);
|
||
|
|
});
|
||
|
|
});
|