Files
Remote-Terminal-for-MeshCore/frontend/src/test/repeaterFormatters.test.ts
T
2026-02-27 14:20:52 -08:00

94 lines
2.8 KiB
TypeScript

import { describe, it, expect, vi, afterEach } from 'vitest';
import { formatDuration, formatClockDrift } from '../components/RepeaterDashboard';
describe('formatDuration', () => {
it('formats seconds only', () => {
expect(formatDuration(0)).toBe('0s');
expect(formatDuration(30)).toBe('30s');
expect(formatDuration(59)).toBe('59s');
});
it('formats minutes only', () => {
expect(formatDuration(60)).toBe('1m');
expect(formatDuration(300)).toBe('5m');
expect(formatDuration(3540)).toBe('59m');
});
it('formats hours and minutes', () => {
expect(formatDuration(3600)).toBe('1h');
expect(formatDuration(3660)).toBe('1h1m');
expect(formatDuration(7200)).toBe('2h');
expect(formatDuration(7260)).toBe('2h1m');
});
it('formats days', () => {
expect(formatDuration(86400)).toBe('1d');
expect(formatDuration(86400 + 3600)).toBe('1d1h');
expect(formatDuration(86400 + 60)).toBe('1d1m');
expect(formatDuration(86400 + 3600 + 60)).toBe('1d1h1m');
expect(formatDuration(172800)).toBe('2d');
});
it('formats multi-day durations', () => {
expect(formatDuration(3 * 86400 + 12 * 3600 + 30 * 60)).toBe('3d12h30m');
});
});
describe('formatClockDrift', () => {
afterEach(() => {
vi.useRealTimers();
});
it('parses firmware format HH:MM - D/M/YYYY UTC', () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2025-01-09T12:30:00Z'));
const result = formatClockDrift('12:30 - 9/1/2025 UTC');
expect(result.isLarge).toBe(false);
expect(result.text).toBe('0s');
});
it('parses firmware format with seconds HH:MM:SS - D/M/YYYY', () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2025-06-15T08:00:00Z'));
const result = formatClockDrift('08:00:00 - 15/6/2025 UTC');
expect(result.isLarge).toBe(false);
expect(result.text).toBe('0s');
});
it('reports large drift (>24h)', () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2025-01-11T12:30:00Z'));
const result = formatClockDrift('12:30 - 9/1/2025 UTC');
expect(result.isLarge).toBe(true);
expect(result.text).toBe('>24 hours!');
});
it('handles invalid date strings', () => {
const result = formatClockDrift('not a date');
expect(result.text).toBe('(invalid)');
expect(result.isLarge).toBe(false);
});
it('formats multi-unit drift', () => {
vi.useFakeTimers();
// 1h30m5s drift
vi.setSystemTime(new Date('2025-01-09T14:00:05Z'));
const result = formatClockDrift('12:30 - 9/1/2025 UTC');
expect(result.isLarge).toBe(false);
expect(result.text).toBe('1h30m5s');
});
it('formats minutes and seconds drift', () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2025-01-09T12:35:10Z'));
const result = formatClockDrift('12:30 - 9/1/2025 UTC');
expect(result.isLarge).toBe(false);
expect(result.text).toBe('5m10s');
});
});