"""Tests fuer src/source_meta.py - Single Source of Truth fuer Kategorien/Typen.""" from source_meta import ( SOURCE_CATEGORIES, SOURCE_TYPES, get_meta, category_label, type_label, ) def test_categories_have_unique_keys(): keys = [c["key"] for c in SOURCE_CATEGORIES] assert len(keys) == len(set(keys)) def test_types_have_unique_keys(): keys = [t["key"] for t in SOURCE_TYPES] assert len(keys) == len(set(keys)) def test_categories_and_types_have_label(): for c in SOURCE_CATEGORIES: assert "key" in c and "label" in c assert isinstance(c["label"], str) and c["label"] for t in SOURCE_TYPES: assert "key" in t and "label" in t def test_get_meta_shape(): meta = get_meta() assert set(meta.keys()) == {"categories", "types"} assert meta["categories"] == SOURCE_CATEGORIES assert meta["types"] == SOURCE_TYPES def test_category_label_lookup(): assert category_label("nachrichtenagentur") == "Nachrichtenagentur" assert category_label("oeffentlich-rechtlich") == "Öffentlich-Rechtlich" # Unbekannter key -> Fallback auf key selbst assert category_label("does-not-exist") == "does-not-exist" def test_type_label_lookup(): assert type_label("rss_feed") == "RSS-Feed" assert type_label("telegram_channel") == "Telegram-Kanal" assert type_label("does-not-exist") == "does-not-exist" def test_category_includes_aktuelle_themen(): """Phase 3b: Lagen-spezifische Kategorien (cybercrime etc.) müssen drin sein.""" keys = {c["key"] for c in SOURCE_CATEGORIES} assert "cybercrime" in keys assert "ukraine-russland-krieg" in keys assert "russische-staatspropaganda" in keys