nomyo-js/tests/unit/errors.test.ts

85 lines
2.8 KiB
TypeScript
Raw Normal View History

/**
* 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);
});
});