39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { nextThinkTimer, formatThinkDuration } from '@/lib/agent/client/thinking-timers';
|
|
|
|
describe('nextThinkTimer (per reasoning block)', () => {
|
|
it('starts the timer on the first observation of a block', () => {
|
|
expect(nextThinkTimer(undefined, { end: false, now: 100 })).toEqual({ startedAt: 100 });
|
|
});
|
|
|
|
it('stays open while the block is still the last part (end=false)', () => {
|
|
const started = { startedAt: 100 };
|
|
expect(nextThinkTimer(started, { end: false, now: 300 })).toEqual(started);
|
|
});
|
|
|
|
it('ends the block when a later part follows it (end=true)', () => {
|
|
const started = { startedAt: 100 };
|
|
expect(nextThinkTimer(started, { end: true, now: 250 })).toEqual({
|
|
startedAt: 100,
|
|
endedAt: 250,
|
|
});
|
|
});
|
|
|
|
it('keeps the first endedAt (does not move once ended)', () => {
|
|
const ended = { startedAt: 100, endedAt: 250 };
|
|
expect(nextThinkTimer(ended, { end: true, now: 999 })).toEqual(ended);
|
|
});
|
|
});
|
|
|
|
describe('formatThinkDuration', () => {
|
|
it('shows one decimal under 10s', () => {
|
|
expect(formatThinkDuration(1234)).toBe('1.2s');
|
|
});
|
|
it('rounds to whole seconds at/above 10s', () => {
|
|
expect(formatThinkDuration(12600)).toBe('13s');
|
|
});
|
|
it('clamps negatives to 0', () => {
|
|
expect(formatThinkDuration(-5)).toBe('0.0s');
|
|
});
|
|
});
|