import pytest from tht.evidence.canonical import ( CuratedEvidence, ManualEvidenceProvenance, dump_curated_markdown, parse_curated_markdown, ) def unit(kind="domain", payload=None): return CuratedEvidence.model_validate( { "schema_version": 4, "id": "evidence:example", "title": "Example", "kind": kind, "purposes": ["sql_generation"], "language": "en", "provenance": {"kind": "manual", "declared_by": "curator"}, "payload": payload or {"rule": "Count orders once, using their complete key."}, } ) @pytest.mark.parametrize( ("kind", "payload"), [ ("domain", {"rule": "A rule.\n\n### Explanation\n\n- First line\n- Second line"}), ( "glossary", { "definition": "A patient.", "synonyms": ["person", "a\nmultiline synonym"], "variants": [], }, ), ( "enum", { "column": "sales.orders.status", "values": {"": "Unknown", "A": "Active\n\nwith details"}, }, ), ("example", {"question": "How many?", "interpretation": "Count distinct orders."}), ( "mapping", {"concept": "Orders", "tables": ["sales.orders"], "columns": ["sales.orders.id"]}, ), ("normalization", {"input": "A", "output": "active", "rule": "Expand the abbreviation."}), ("formula", {"concept": "Total", "columns": ["sales.lines.amount"], "sql": "sum(amount)"}), ( "reference", {"url": "https://example.test/rule", "label": "Policy", "description": "Rule source."}, ), ], ) def test_editable_round_trip_preserves_every_typed_payload(kind, payload): original = unit(kind, payload) rendered = dump_curated_markdown(original) assert parse_curated_markdown(rendered) == original assert "