import { describe, expect, it } from 'vitest'; import { validateDateFilters } from '../src/cli/flags.js'; import { loadConfigFromString } from '../src/config/config.js'; describe('config validation', () => { it('loads a valid YAML config with defaults', () => { const config = loadConfigFromString(` gmail: folder: Newsletters output: name: Newsletter Link Catalog excel: enabled: true path: ./output/catalog.xlsx `); expect(config.gmail.folder).toBe('Newsletters'); expect(config.links.trackingParams).toContain('utm_*'); expect(config.enrichment.concurrency).toBe(3); expect(config.database.enabled).toBe(true); expect(config.database.path).toBe('./data/newsletter-catalog.sqlite'); }); it('treats comment-only YAML maps as empty objects', () => { const config = loadConfigFromString(` gmail: folder: Newsletters output: name: Newsletter Link Catalog excel: enabled: true path: ./output/catalog.xlsx newsletters: # sender@example.com: categories: custom: - Rust llm: # provider: anthropic `); expect(config.newsletters).toEqual({}); expect(config.categories.llm.provider).toBe('anthropic'); }); it('rejects conflicting relative and absolute date filters', () => { expect(() => validateDateFilters({ last: '30d', from: '2026-01-01' })).toThrow( /cannot be combined/i ); }); });