import { describe, it, expect } from 'vitest' import { loadLib } from './helpers/loadLib.js' const { sourceStatus, relativeTime, tokenExportMessage } = loadLib('popup-format.js', [ 'sourceStatus', 'relativeTime', 'tokenExportMessage' ]) const NOW = Date.parse('2026-09-25T12:00:00Z') const src = (extra = {}) => ({ enabled: true, last_error: null, backfill_state: null, ...extra }) describe('sourceStatus', () => { it('puts an error first, trimmed to its first line', () => { const s = sourceStatus(src({ last_error: 'Discord rejected the token\nstack…', backfill_state: 'running' }), NOW) expect(s).toEqual({ text: 'Error — Discord rejected the token', kind: 'error' }) }) it('shows a running backfill and its progress', () => { expect(sourceStatus(src({ backfill_state: 'running', backfill_chunks: 0 }), NOW).text).toBe('Backfill queued') expect(sourceStatus(src({ backfill_state: 'running', backfill_chunks: 3 }), NOW).text).toBe( 'Backfilling — 3 chunks done' ) }) it('says when a source was last checked, or that it never was', () => { expect(sourceStatus(src({ last_checked_at: '2026-09-25T11:55:00Z' }), NOW).text).toBe('Checked 5m ago') expect(sourceStatus(src({ last_checked_at: null }), NOW).text).toBe('Not checked yet') }) it('shows a disabled source as disabled, whatever else it carries', () => { expect(sourceStatus(src({ enabled: false, last_error: 'x' }), NOW).text).toBe('Disabled') }) }) describe('relativeTime', () => { it('uses the web UI formatRelative buckets', () => { expect(relativeTime('2026-09-25T11:59:18Z', NOW)).toBe('42s ago') expect(relativeTime('2026-09-25T09:00:00Z', NOW)).toBe('3h ago') expect(relativeTime('2026-09-23T12:00:00Z', NOW)).toBe('2d ago') expect(relativeTime('garbage', NOW)).toBe('Never') }) }) describe('tokenExportMessage', () => { it('distinguishes verified, rejected and untested tokens', () => { expect(tokenExportMessage({ valid: true, reason: 'Token valid (me)' }).kind).toBe('success') expect(tokenExportMessage({ valid: false, reason: 'Discord rejected the token' }).kind).toBe('error') const untested = tokenExportMessage({ valid: null, reason: 'No enabled source' }) expect(untested.kind).toBe('warning') expect(untested.text).toContain('No enabled source') }) })