// Tests fuer 2.6 Veraltet-Erkennung // Phase 2.6 import { describe, it, expect } from 'vitest'; import { isStale } from '../src/cli/index-cmd.js'; const NOW = new Date('2026-09-05T00:00:00Z'); function monthsAgo(months: number): string { // Direkt-Konstruktion statt setMonth (das mit Schaltjahr/30-Tage-Monaten schief geht) const d = new Date(NOW.getFullYear(), NOW.getMonth() - months, NOW.getDate()); return d.toISOString().slice(0, 10); } describe('isStale', () => { it('Wiki ist nie veraltet', () => { expect(isStale('wiki', monthsAgo(24), null, 12, NOW)).toBe(false); expect(isStale('wiki', monthsAgo(36), monthsAgo(36), 12, NOW)).toBe(false); }); it('frische Notiz (< threshold) ist nicht veraltet', () => { expect(isStale('inbox', monthsAgo(1), null, 12, NOW)).toBe(false); expect(isStale('inbox', monthsAgo(11), null, 12, NOW)).toBe(false); }); it('alte Notiz (>= threshold) ist veraltet', () => { expect(isStale('inbox', monthsAgo(12), null, 12, NOW)).toBe(true); expect(isStale('inbox', monthsAgo(15), null, 12, NOW)).toBe(true); expect(isStale('daily', monthsAgo(24), null, 12, NOW)).toBe(true); }); it('aktualisiert-Feld hat Vorrang vor created', () => { // created alt, aber aktualisiert frisch expect(isStale('inbox', monthsAgo(24), monthsAgo(1), 12, NOW)).toBe(false); // created frisch, aktualisiert alt expect(isStale('inbox', monthsAgo(1), monthsAgo(15), 12, NOW)).toBe(true); }); it('fehlende Daten fuehren zu "nicht veraltet" (kein False-Positive)', () => { expect(isStale('inbox', null, null, 12, NOW)).toBe(false); expect(isStale('project', null, null, 12, NOW)).toBe(false); }); it('ungueltiges Datum wird ignoriert', () => { expect(isStale('inbox', 'kein-datum', null, 12, NOW)).toBe(false); expect(isStale('inbox', null, 'auch-keins', 12, NOW)).toBe(false); }); it('Schwelle = 0 macht alles veraltet (ausser Wiki)', () => { expect(isStale('inbox', monthsAgo(1), null, 0, NOW)).toBe(true); expect(isStale('wiki', monthsAgo(1), null, 0, NOW)).toBe(false); }); it('genaue Schwelle: 12.0 Monate = veraltet', () => { expect(isStale('inbox', monthsAgo(12), null, 12, NOW)).toBe(true); expect(isStale('inbox', monthsAgo(11), null, 12, NOW)).toBe(false); }); });