import { describe, it, expect } from 'vitest'; import { m } from '$lib/paraglide/messages.js'; const { relativeTime } = await import('./time'); function msAgo(ms: number, now: Date): string { return new Date(now.getTime() - ms).toISOString(); } describe('relativeTime', () => { const now = new Date('2024-06-15T12:00:00.000Z'); it('returns "just now" for timestamps under 60 seconds ago', () => { const ts = msAgo(30_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_just_now()); }); it('returns 1-minute label for exactly 1 minute ago', () => { const ts = msAgo(60_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_minutes({ count: 1 })); }); it('returns 59-minute label for exactly 59 minutes ago', () => { const ts = msAgo(59 * 60_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_minutes({ count: 59 })); }); it('returns 1-hour label for exactly 1 hour ago', () => { const ts = msAgo(60 * 60_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_hours({ count: 1 })); }); it('returns 23-hour label for 23 hours ago', () => { const ts = msAgo(23 * 60 * 60_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_hours({ count: 23 })); }); it('returns 1-day label for exactly 24 hours ago', () => { const ts = msAgo(24 * 60 * 60_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_days({ count: 1 })); }); it('returns 6-day label for 6 days ago', () => { const ts = msAgo(6 * 24 * 60 * 60_000, now); expect(relativeTime(ts, now)).toBe(m.comment_time_days({ count: 6 })); }); it('defaults now to current time when omitted', () => { const ts = new Date(Date.now() - 5 * 60_000).toISOString(); expect(relativeTime(ts)).toBeTruthy(); }); });