fix:
- AES GCM protocol mismatch - better, granular error handling - UUID now uses crypto.randomUUID() - added native mlock addon to improve security - ZeroBuffer uses explicit_bzero now - fixed imports feat: - added unit tests
This commit is contained in:
parent
0b09b9a9c3
commit
c7601b2270
17 changed files with 12600 additions and 164 deletions
84
tests/unit/errors.test.ts
Normal file
84
tests/unit/errors.test.ts
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/**
|
||||
* 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);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue