# tests/test_registry_solution_load.py
import importlib.util, json, os
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_spec = importlib.util.spec_from_file_location("sg_registry", os.path.join(ROOT, "prevent", "registry.py"))
registry = importlib.util.module_from_spec(_spec); _spec.loader.exec_module(registry)

def test_detector_default_unchanged():
    dets, skipped = registry.load(ROOT)                 # default kind='detector' — every existing caller
    assert any(d.get("id") == "deps" for d in dets) and skipped == []

def test_solution_kind_discovers_manifest(tmp_path):
    d = tmp_path / "domains" / "security" / "solutions" / "x"
    d.mkdir(parents=True)
    (d / "solution.json").write_text(json.dumps({"id": "x", "class": "S4", "rung": "located-suggestion"}))
    sols, skipped = registry.load(str(tmp_path), kind="solution")
    assert len(sols) == 1 and sols[0]["id"] == "x" and sols[0]["_dir"] == str(d) and skipped == []

def test_solution_malformed_skipped(tmp_path):
    d = tmp_path / "domains" / "security" / "solutions" / "bad"
    d.mkdir(parents=True)
    (d / "solution.json").write_text("{not json")
    sols, skipped = registry.load(str(tmp_path), kind="solution")
    assert sols == [] and len(skipped) == 1            # malformed → surfaced, never silently dropped
