"""D14b wiring: status=auto, search_formulas, and evidence loader skips formula files. Completes the formula layer beyond the store: the `auto` status the spec requires (ยง4.7.2), the concept-substring retrieval that `tht search find --kind formula` uses, and the guarantee that load_evidence_dir does NOT choke on *.sql.md formula files when they live under the evidence root. """ from tht.evidence.formula_store import ConceptFormula, save_formula, search_formulas from tht.evidence.model import EvidenceDoc, load_evidence_dir def test_status_auto_is_valid(): f = ConceptFormula(concept="x", sql="SELECT 1", status="auto") assert f.status == "auto" # round-trips through parse/dump assert ConceptFormula.parse(f.dump()).status == "auto" def test_search_formulas_substring_case_insensitive(tmp_path): save_formula(tmp_path, ConceptFormula(concept="fascia pediatrica", sql="SELECT 1")) save_formula(tmp_path, ConceptFormula(concept="indice di Charlson", sql="SELECT 2")) hits = search_formulas(tmp_path, "PEDIATRICA") assert len(hits) == 1 assert hits[0].concept == "fascia pediatrica" assert search_formulas(tmp_path, "charlson")[0].concept == "indice di Charlson" def test_load_evidence_dir_skips_formula_files(tmp_path): # a real evidence doc + a formula file under the same root (tmp_path / "ev1.md").write_text( "---\nid: ev1\ntitle: T\n---\nbody text\n" ) save_formula(tmp_path, ConceptFormula(concept="ablazione", sql="SELECT 1")) docs = load_evidence_dir(tmp_path) ids = [d.id for d in docs] assert ids == ["ev1"] # the .sql.md formula file is skipped, no crash assert all(isinstance(d, EvidenceDoc) for d in docs)