46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
shouldAutoRetry,
|
|
shouldAutoRetryChat,
|
|
shouldAutoRetryTask,
|
|
autoRetryDelayMs,
|
|
fallbackErrorClass,
|
|
} from './chatRetry';
|
|
|
|
test('shouldAutoRetryChat: disabled until idempotency', () => {
|
|
assert.equal(shouldAutoRetryChat({ class: 'transient' }, 0), false);
|
|
assert.equal(shouldAutoRetryChat({ class: 'transient' }, 1), false);
|
|
});
|
|
|
|
test('shouldAutoRetryTask: transient only, max 2', () => {
|
|
assert.equal(shouldAutoRetryTask({ class: 'transient', code: 'NETWORK_ERROR' }, 0), true);
|
|
assert.equal(shouldAutoRetryTask({ class: 'transient', code: 'NETWORK_ERROR' }, 1), true);
|
|
assert.equal(shouldAutoRetryTask({ class: 'transient', code: 'NETWORK_ERROR' }, 2), false);
|
|
assert.equal(shouldAutoRetryTask({ class: 'fatal', code: 'INTERNAL_ERROR' }, 0), false);
|
|
assert.equal(shouldAutoRetryTask({ class: 'resumable', code: 'WORKSPACE' }, 0), false);
|
|
assert.equal(
|
|
shouldAutoRetryTask({ class: 'transient', code: 'DOC_TASK_NOT_IN_ACTIVE_STAGE' }, 0),
|
|
false,
|
|
);
|
|
});
|
|
|
|
test('shouldAutoRetryTask: document busy never retries', () => {
|
|
assert.equal(shouldAutoRetryTask({ class: 'transient', code: 'DOC_BUSY' }, 0), false);
|
|
});
|
|
|
|
test('shouldAutoRetry alias delegates to task path', () => {
|
|
assert.equal(shouldAutoRetry({ class: 'transient', code: 'NETWORK_ERROR' }, 0), true);
|
|
});
|
|
|
|
test('autoRetryDelayMs: 1s then 2s', () => {
|
|
assert.equal(autoRetryDelayMs(0), 1000);
|
|
assert.equal(autoRetryDelayMs(1), 2000);
|
|
});
|
|
|
|
test('fallbackErrorClass: network → transient, workspace → resumable', () => {
|
|
assert.equal(fallbackErrorClass({ network: true }), 'transient');
|
|
assert.equal(fallbackErrorClass({ workspaceId: 'research_1' }), 'resumable');
|
|
assert.equal(fallbackErrorClass({}), 'fatal');
|
|
});
|