"""CI-Pfad-Tests fuer die Registry-Erweiterung 2026-06-14:
5 neue Use Cases + Mapper-Regeln fuer zuvor ungemappte Quell-Gesetze.
Liegt in compliance/tests/ (im Gegensatz zu tests/), damit die CI sie faehrt."""

from __future__ import annotations

from compliance.data import use_case_registry as reg


def test_new_use_cases_registered():
    for key in ("arbeitsrecht", "gesellschaftsrecht", "insolvenzrecht",
                "csrd", "bafin_it"):
        assert reg.is_valid_use_case(key), key


def test_regulation_mapper_new_domains():
    cases = {
        "Arbeitsverfassungsgesetz (ArbVG)": "arbeitsrecht",
        "Arbeitszeitgesetz (AZG)": "arbeitsrecht",
        "Mutterschutzgesetz (MuSchG)": "arbeitsrecht",
        "Mindestlohngesetz (MiLoG)": "arbeitsrecht",
        "Arbeitsgesetz (ArG)": "arbeitsrecht",
        "Aktiengesetz (AktG)": "gesellschaftsrecht",
        "GmbH-Gesetz (GmbHG)": "gesellschaftsrecht",
        "Obligationenrecht (OR)": "gesellschaftsrecht",
        "Insolvenzordnung (InsO)": "insolvenzrecht",
        "Corporate Sustainability Reporting Directive (CSRD)": "csrd",
        "VAIT (BaFin 2022)": "bafin_it",
        "BAIT (BaFin 2024)": "bafin_it",
        "EU Machinery Guide 2006/42": "maschinen",
        "GoBD (BMF-Schreiben 2025)": "steuerrecht",
    }
    for reg_str, expected in cases.items():
        assert reg.use_case_for_regulation(reg_str) == expected, reg_str


def test_existing_mappings_unchanged():
    # Regression: die neuen Regeln duerfen bestehende Mappings nicht kapern.
    assert reg.use_case_for_regulation("TMG") == "impressum"
    assert reg.use_case_for_regulation("AT ABGB") == "handelsrecht"
    assert reg.use_case_for_regulation("OWASP Top 10 (2021)") == "code_security"
    assert reg.use_case_for_regulation("DSGVO (EU) 2016/679") == "dse"
    assert reg.use_case_for_regulation("Maschinenverordnung (EU) 2023/1230") == "maschinen"


def test_all_rules_point_to_valid_use_cases():
    for _needle, uc in reg._REGULATION_RULES:
        assert uc in reg.REGISTRY and reg.REGISTRY[uc].enabled, uc
