import assert from 'node:assert/strict';
import test from 'node:test';
import {
completedTurnStats,
formatTurnDuration,
formatTurnTokens,
turnCacheHit,
} from './turnStats.ts';
test('formats compact turn durations and token totals', () => {
assert.equal(formatTurnDuration(10_740), '10.7s');
assert.equal(formatTurnDuration(65_000), '1m5s');
assert.equal(formatTurnTokens(267_000), '267K');
assert.equal(formatTurnTokens(1_250_000), '1.3M');
});
test('cache hit is only shown when the provider reported cached input', () => {
assert.equal(turnCacheHit({
duration_ms: 1,
rounds: 1,
tool_calls: 0,
prompt_tokens: 100,
completion_tokens: 5,
cached_tokens: 87,
}), 87);
assert.equal(turnCacheHit({
duration_ms: 1,
rounds: 1,
tool_calls: 0,
prompt_tokens: 100,
completion_tokens: 5,
cached_tokens: 0,
}), null);
assert.equal(turnCacheHit({
duration_ms: 1,
rounds: 1,
tool_calls: 0,
prompt_tokens: 3,
completion_tokens: 1,
cached_tokens: 2,
}), 66, 'matches the TUI integer percentage');
});
test('turn stats are exposed only for a naturally completed turn', () => {
const stats = {
duration_ms: 2_000,
rounds: 0,
tool_calls: 0,
prompt_tokens: 0,
completion_tokens: 0,
cached_tokens: 0,
};
assert.equal(completedTurnStats(undefined, 'stopped'), null);
assert.equal(completedTurnStats(stats, 'cancelled'), null);
assert.equal(completedTurnStats(stats, 'max_rounds'), null);
assert.equal(completedTurnStats(stats, 'stopped'), stats);
assert.equal(completedTurnStats(stats, undefined), stats, 'supports older daemons');
});