import { describe, expect, it } from 'vitest'; import { monthsAgo, computeLastActivity } from '../../src/lib/staleSpaces.ts'; describe('monthsAgo', () => { it('subtracts calendar months', () => { const now = new Date('2026-07-06T12:00:00Z'); const back = monthsAgo(24, now); expect(back.getUTCFullYear()).toBe(2024); expect(back.getUTCMonth()).toBe(6); // July (0-indexed) }); it('handles month-boundary edge without throwing (Mar 31 → Feb 28/Mar 3)', () => { const now = new Date('2026-03-31T00:00:00Z'); expect(() => monthsAgo(1, now)).not.toThrow(); }); it('is idempotent for months=0', () => { const now = new Date('2026-01-15T00:00:00Z'); expect(monthsAgo(0, now).toISOString()).toBe(now.toISOString()); }); }); describe('computeLastActivity', () => { const older = new Date('2024-01-01T00:00:00Z'); const newer = new Date('2025-06-01T00:00:00Z'); it('returns spaceCreatedAt when there are no messages', () => { expect(computeLastActivity(older, null).toISOString()).toBe(older.toISOString()); expect(computeLastActivity(older, undefined).toISOString()).toBe(older.toISOString()); }); it('returns the message date when it is newer', () => { expect(computeLastActivity(older, newer).toISOString()).toBe(newer.toISOString()); }); it('returns spaceCreatedAt when the message is older (defensive)', () => { expect(computeLastActivity(newer, older).toISOString()).toBe(newer.toISOString()); }); });