import { describe, test, expect } from 'bun:test'; import { formatBytesPerSecond } from '../src/components/transfer/SpeedReadout.js'; import { formatEta } from '../src/components/transfer/ETAReadout.js'; describe('formatBytesPerSecond', () => { test('renders sub-1KB rates in B/s', () => { expect(formatBytesPerSecond(1)).toBe('1 B/s'); expect(formatBytesPerSecond(512)).toBe('512 B/s'); }); test('renders KB/s', () => { expect(formatBytesPerSecond(1024)).toBe('1.0 KB/s'); expect(formatBytesPerSecond(1536)).toBe('1.5 KB/s'); }); test('renders MB/s', () => { expect(formatBytesPerSecond(1024 * 1024)).toBe('1.00 MB/s'); expect(formatBytesPerSecond(2.5 * 1024 * 1024)).toBe('2.50 MB/s'); }); test('renders GB/s', () => { expect(formatBytesPerSecond(1024 * 1024 * 1024)).toBe('1.00 GB/s'); }); test('handles zero / non-finite as em-dash', () => { expect(formatBytesPerSecond(0)).toBe('— B/s'); expect(formatBytesPerSecond(-1)).toBe('— B/s'); expect(formatBytesPerSecond(Number.NaN)).toBe('— B/s'); }); }); describe('formatEta', () => { test('undefined → em-dash', () => { expect(formatEta(undefined)).toBe('ETA —'); }); test('NaN/Infinity → em-dash', () => { expect(formatEta(Number.NaN)).toBe('ETA —'); expect(formatEta(Number.POSITIVE_INFINITY)).toBe('ETA —'); }); test('sub-second', () => { expect(formatEta(0.4)).toBe('ETA <1s'); }); test('seconds', () => { expect(formatEta(45)).toBe('ETA 45s'); }); test('minutes + seconds', () => { expect(formatEta(90)).toBe('ETA 1m 30s'); expect(formatEta(125)).toBe('ETA 2m 5s'); }); test('hours + minutes', () => { expect(formatEta(3600 + 30 * 60)).toBe('ETA 1h 30m'); }); });