import { describe, expect, it } from 'vitest' import { estimateSequenceFinishDate, estimateSequenceRemainingSeconds, formatSequenceRemaining, sequenceProgressPercent, } from '../../instrument' import type { SequenceProgress } from '../../types' describe('instrument sequence helpers', () => { const progress: SequenceProgress = { current_sample: 3, total_samples: 6, elapsed_seconds: 180, sample_durations: [50, 70, 60], } it('calculates percent and remaining time from sample durations', () => { expect(sequenceProgressPercent(progress)).toBe(50) expect(estimateSequenceRemainingSeconds(progress)).toBe(180) expect(formatSequenceRemaining(progress)).toBe('~3m left') }) it('falls back to elapsed average when sample durations are unavailable', () => { expect(estimateSequenceRemainingSeconds({ current_sample: 2, total_samples: 5, elapsed_seconds: 120, })).toBe(180) }) it('uses explicit finish time or builds one from remaining seconds', () => { const now = new Date('2026-05-15T12:00:00.000Z') expect(estimateSequenceFinishDate(progress, now)?.toISOString()).toBe('2026-05-15T12:03:00.000Z') expect(estimateSequenceFinishDate({ current_sample: 1, total_samples: 2, estimated_finish_time: '2026-05-15T13:00:00.000Z', })?.toISOString()).toBe('2026-05-15T13:00:00.000Z') }) it('clamps completed or over-complete sequences for display', () => { expect(sequenceProgressPercent({ current_sample: 12, total_samples: 10 })).toBe(100) expect(formatSequenceRemaining({ current_sample: 10, total_samples: 10 })).toBeNull() }) })