问题:Token balance exhausted 被作为原始助手气泡展示,且额度确认可能跨会话复用。 修复:区分绝对余额与滚动额度,绑定当前会话失败 key,并补充真实消息结构与双会话回归测试。
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
getOpencodeErrorKind,
|
|
isOpencodeTokenBalanceExhausted,
|
|
} from '../../shared/opencode-error-kind';
|
|
|
|
describe('getOpencodeErrorKind', () => {
|
|
it('classifies a generic Works Square gateway authorization failure as invalid authentication', () => {
|
|
expect(getOpencodeErrorKind('works_square_gateway_authorize_failed')).toBe('authentication_invalid');
|
|
});
|
|
|
|
it.each([
|
|
'token_balance_exhausted',
|
|
'Token balance exhausted',
|
|
'Token quota exhausted for rolling 5-hour window',
|
|
'works_square_gateway_authorize_failed: Token balance exhausted',
|
|
])('classifies explicit quota evidence as exhausted: %s', (message) => {
|
|
expect(getOpencodeErrorKind(message)).toBe('quota_exhausted');
|
|
});
|
|
|
|
it.each([
|
|
'token_balance_exhausted',
|
|
'Token balance exhausted (request id: req-1)',
|
|
'works_square_gateway_authorize_failed: balance exhausted',
|
|
])('identifies authoritative token-balance exhaustion: %s', (message) => {
|
|
expect(isOpencodeTokenBalanceExhausted(message)).toBe(true);
|
|
});
|
|
|
|
it.each([
|
|
'Token quota exhausted for rolling 5-hour window',
|
|
'user quota is not enough',
|
|
'works_square_gateway_authorize_failed',
|
|
])('does not mistake other failures for token-balance exhaustion: %s', (message) => {
|
|
expect(isOpencodeTokenBalanceExhausted(message)).toBe(false);
|
|
});
|
|
});
|