Files
life-echo/app-expo/tests/core/api/parseApiError.test.ts

56 lines
1.3 KiB
TypeScript
Raw Normal View History

import { parseApiError } from '@/core/api/parseApiError';
describe('parseApiError', () => {
it('prefers unified message field', () => {
expect(
parseApiError(
{
error_code: 'NOT_FOUND',
message: '资源不存在',
request_id: 'r1',
},
'fallback',
),
).toEqual({
message: '资源不存在',
errorCode: 'NOT_FOUND',
requestId: 'r1',
});
});
it('falls back to legacy detail string', () => {
expect(parseApiError({ detail: '请求无效' }, 'HTTP 400')).toEqual({
message: '请求无效',
errorCode: undefined,
requestId: undefined,
});
});
it('parses legacy detail validation list', () => {
expect(
parseApiError(
{
detail: [{ loc: ['body', 'phone'], msg: 'field required' }],
},
'HTTP 422',
),
).toEqual({
message: 'field required',
errorCode: undefined,
requestId: undefined,
});
});
it('uses fallback when message is missing', () => {
expect(parseApiError({ error_code: 'INTERNAL_ERROR' }, 'HTTP 500')).toEqual({
message: 'HTTP 500',
errorCode: 'INTERNAL_ERROR',
requestId: undefined,
});
});
it('uses fallback when body is null', () => {
expect(parseApiError(null, 'HTTP 502')).toEqual({ message: 'HTTP 502' });
});
});