38 lines
1.4 KiB
TypeScript
38 lines
1.4 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' }, 0), true);
|
|
assert.equal(shouldAutoRetryTask({ class: 'transient' }, 1), true);
|
|
assert.equal(shouldAutoRetryTask({ class: 'transient' }, 2), false);
|
|
assert.equal(shouldAutoRetryTask({ class: 'fatal' }, 0), false);
|
|
assert.equal(shouldAutoRetryTask({ class: 'resumable' }, 0), false);
|
|
});
|
|
|
|
test('shouldAutoRetry alias delegates to task path', () => {
|
|
assert.equal(shouldAutoRetry({ class: 'transient' }, 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');
|
|
});
|