import { afterEach, describe, expect, it, vi } from 'vitest'; import { formatDistanceLabel, getPresenceStatus, isDiscoverGridItem, profileAgeFromBirthDate, readDiscoverGridItems, } from './discover-profile-formatters'; describe('profileAgeFromBirthDate', () => { it('returns null for empty or invalid dates', () => { expect(profileAgeFromBirthDate(null)).toBeNull(); expect(profileAgeFromBirthDate('not-a-date')).toBeNull(); }); it('computes age from ISO birth date', () => { expect(profileAgeFromBirthDate('2000-01-01')).toBeGreaterThanOrEqual(25); }); }); describe('formatDistanceLabel', () => { it('formats metric distances', () => { expect(formatDistanceLabel(500)).toBe('500 m'); expect(formatDistanceLabel(1500)).toBe('1.5 km'); expect(formatDistanceLabel(15000)).toBe('15 km'); }); it('formats imperial distances', () => { expect(formatDistanceLabel(10, 'imperial')).toMatch(/ft$/); expect(formatDistanceLabel(2000, 'imperial')).toMatch(/mi$/); }); }); describe('getPresenceStatus', () => { afterEach(() => { vi.useRealTimers(); }); it('classifies lastSeen windows', () => { vi.useFakeTimers(); vi.setSystemTime(new Date('2026-01-01T12:00:00Z')); expect(getPresenceStatus(null)).toBe('offline'); expect(getPresenceStatus('not-a-date')).toBe('offline'); expect(getPresenceStatus('2026-01-01T11:58:00Z')).toBe('online'); expect(getPresenceStatus('2026-01-01T06:00:00Z')).toBe('recent'); expect(getPresenceStatus('2025-12-01T12:00:00Z')).toBe('offline'); }); }); describe('discover grid helpers', () => { it('type-guards and reads nested grid items', () => { expect(isDiscoverGridItem(null)).toBe(false); expect(isDiscoverGridItem({ kind: 'profile' })).toBe(true); expect(isDiscoverGridItem({ kind: 'ad' })).toBe(true); expect(isDiscoverGridItem({ kind: 'other' })).toBe(false); const data = { discover: { items: [ { kind: 'profile', id: 'p1', person: { id: 'p1' } }, { kind: 'ad', id: 'a1' }, { kind: 'nope' }, null, ], }, }; expect(readDiscoverGridItems(data, 'discover.items')).toHaveLength(2); expect(readDiscoverGridItems(data, 'discover.missing')).toEqual([]); expect(readDiscoverGridItems({}, 'a.b')).toEqual([]); vi.useFakeTimers(); vi.setSystemTime(new Date('2026-06-15T00:00:00Z')); expect(profileAgeFromBirthDate('2000-07-01')).toBe(25); expect(profileAgeFromBirthDate('2000-06-15')).toBe(26); expect(profileAgeFromBirthDate('2099-01-01')).toBeNull(); vi.useRealTimers(); }); });