66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { ERROR_CODES } from '@insforge/shared-schemas';
|
|
import { AppError } from '../../src/utils/errors';
|
|
import { StripeKeyValidationError } from '../../src/providers/payments/stripe.provider';
|
|
import { normalizeStripeError } from '../../src/providers/payments/stripe-errors';
|
|
|
|
describe('normalizeStripeError', () => {
|
|
it('maps local Stripe key validation errors to payment config errors', () => {
|
|
const normalized = normalizeStripeError(new StripeKeyValidationError('bad key'));
|
|
|
|
expect(normalized).toMatchObject({
|
|
statusCode: 400,
|
|
code: ERROR_CODES.PAYMENT_CONFIG_INVALID,
|
|
message: 'bad key',
|
|
});
|
|
});
|
|
|
|
it('preserves existing AppError instances', () => {
|
|
const appError = new AppError('configured', 400, ERROR_CODES.PAYMENT_CONFIG_INVALID);
|
|
|
|
expect(normalizeStripeError(appError)).toBe(appError);
|
|
});
|
|
|
|
it('maps Stripe rate limits to RATE_LIMITED', () => {
|
|
const normalized = normalizeStripeError({
|
|
type: 'StripeRateLimitError',
|
|
statusCode: 429,
|
|
message: 'Too many requests',
|
|
});
|
|
|
|
expect(normalized).toMatchObject({
|
|
statusCode: 429,
|
|
code: ERROR_CODES.RATE_LIMITED,
|
|
message: 'Too many requests',
|
|
});
|
|
});
|
|
|
|
it('maps Stripe auth errors to payment config errors', () => {
|
|
const normalized = normalizeStripeError({
|
|
type: 'StripeAuthenticationError',
|
|
statusCode: 401,
|
|
message: 'Invalid API Key provided',
|
|
});
|
|
|
|
expect(normalized).toMatchObject({
|
|
statusCode: 401,
|
|
code: ERROR_CODES.PAYMENT_CONFIG_INVALID,
|
|
message: 'Invalid API Key provided',
|
|
});
|
|
});
|
|
|
|
it('maps generic Stripe API errors to upstream failures', () => {
|
|
const normalized = normalizeStripeError({
|
|
type: 'StripeAPIError',
|
|
statusCode: 500,
|
|
message: 'Stripe is unavailable',
|
|
});
|
|
|
|
expect(normalized).toMatchObject({
|
|
statusCode: 500,
|
|
code: ERROR_CODES.UPSTREAM_FAILURE,
|
|
message: 'Stripe is unavailable',
|
|
});
|
|
});
|
|
});
|