50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import {describe, expect, it} from 'vitest';
|
|
|
|
import {parseApiErrorMessage} from './jsonClient';
|
|
|
|
describe('parseApiErrorMessage', () => {
|
|
it('prefers api error detail messages for business failures', () => {
|
|
expect(
|
|
parseApiErrorMessage(
|
|
JSON.stringify({
|
|
ok: false,
|
|
data: null,
|
|
error: {
|
|
code: 'BAD_REQUEST',
|
|
message: '请求参数不合法',
|
|
details: {
|
|
message: 'big_fish 发布校验未通过:还缺少 16 个基础动作',
|
|
provider: 'spacetimedb',
|
|
},
|
|
},
|
|
meta: {
|
|
apiVersion: '2026-04-08',
|
|
},
|
|
}),
|
|
'Fallback failure',
|
|
),
|
|
).toBe('big_fish 发布校验未通过:还缺少 16 个基础动作');
|
|
});
|
|
|
|
it('prefers nested api error messages', () => {
|
|
expect(
|
|
parseApiErrorMessage(
|
|
JSON.stringify({
|
|
error: {
|
|
message: 'Detailed failure',
|
|
},
|
|
}),
|
|
'Fallback failure',
|
|
),
|
|
).toBe('Detailed failure');
|
|
});
|
|
|
|
it('falls back to the raw response text when the payload is not json', () => {
|
|
expect(parseApiErrorMessage('Plain text failure', 'Fallback failure')).toBe('Plain text failure');
|
|
});
|
|
|
|
it('uses the fallback when the response body is empty', () => {
|
|
expect(parseApiErrorMessage('', 'Fallback failure')).toBe('Fallback failure');
|
|
});
|
|
});
|