teleo-infrastructure/tests/test_kb_proposal_normalize.py
2026-07-09 03:01:40 +02:00

131 lines
4.5 KiB
Python

"""Tests for scripts/kb_proposal_normalize.py."""
from __future__ import annotations
import sys
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(REPO_ROOT / "scripts"))
import kb_proposal_normalize as norm # noqa: E402
def test_freeform_claim_split_is_blocked_until_canonical_ids_exist():
preview = norm.normalize_proposal(
{
"id": "p-freeform",
"proposal_type": "attach_evidence",
"status": "approved",
"payload": {
"old_claim": {"id": "d0000000-0000-0000-0000-000000000005"},
"claim_candidates": [
{
"claim_key": "new_claim_key",
"headline": "New claim headline",
"edges": [
{
"edge_type": "supersedes_component_of",
"target_claim_id": "d0000000-0000-0000-0000-000000000005",
}
],
"evidence": [{"source_key": "human_review"}],
}
],
"source_candidates": [{"source_key": "human_review"}],
},
}
)
assert preview["normalization_state"] == "blocked_missing_canonical_ids"
assert preview["strict_child_count"] == 0
assert preview["blocked_count"] == 2
assert preview["blocked_fragments"][0]["missing"] == ["canonical from_claim"]
assert preview["blocked_fragments"][1]["missing"] == ["canonical claim_id", "canonical source_id"]
assert "Create or identify canonical claim/source rows" in preview["next_normalization_action"]
def test_exact_edge_fragment_emits_strict_add_edge_child():
preview = norm.normalize_proposal(
{
"id": "p-edge",
"proposal_type": "attach_evidence",
"status": "approved",
"payload": {
"proposed_supersession_edges": [
{
"from_claim": "11111111-1111-1111-1111-111111111111",
"to_claim_id": "22222222-2222-2222-2222-222222222222",
"edge_type": "supports",
"weight": 0.7,
}
]
},
}
)
assert preview["normalization_state"] == "strict_children_ready"
assert preview["blocked_count"] == 0
assert preview["strict_child_count"] == 1
child = preview["strict_child_proposals"][0]
assert child["proposal_type"] == "add_edge"
assert child["payload"]["apply_payload"] == {
"from_claim": "11111111-1111-1111-1111-111111111111",
"to_claim": "22222222-2222-2222-2222-222222222222",
"edge_type": "supports",
"weight": 0.7,
}
def test_exact_evidence_fragments_emit_one_attach_evidence_child():
preview = norm.normalize_proposal(
{
"id": "p-evidence",
"proposal_type": "attach_evidence",
"status": "approved",
"payload": {
"evidence": [
{
"claim_id": "33333333-3333-3333-3333-333333333333",
"source_id": "44444444-4444-4444-4444-444444444444",
"role": "grounds",
"weight": 0.9,
}
]
},
}
)
assert preview["normalization_state"] == "strict_children_ready"
assert preview["strict_child_count"] == 1
child = preview["strict_child_proposals"][0]
assert child["proposal_type"] == "attach_evidence"
assert child["payload"]["apply_payload"]["evidence"] == [
{
"claim_id": "33333333-3333-3333-3333-333333333333",
"source_id": "44444444-4444-4444-4444-444444444444",
"role": "grounds",
"weight": 0.9,
}
]
def test_existing_apply_payload_is_already_strict():
preview = norm.normalize_proposal(
{
"id": "p-strict",
"proposal_type": "add_edge",
"status": "approved",
"payload": {
"apply_payload": {
"from_claim": "11111111-1111-1111-1111-111111111111",
"to_claim": "22222222-2222-2222-2222-222222222222",
"edge_type": "supports",
}
},
}
)
assert preview["normalization_state"] == "already_strict_apply_payload"
assert preview["strict_child_count"] == 0
assert preview["blocked_count"] == 0