54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
"""Reject structurally plausible planning results that lose case traceability."""
|
|
|
|
import copy
|
|
|
|
import pytest
|
|
|
|
from scripts.ops.test_planning.contracts import validate_families, validate_profile, DIMENSIONS
|
|
|
|
|
|
def source(case_id):
|
|
return {"campaign_id": "FA01", "suite_id": "S1", "case_id": case_id,
|
|
"fields": {"description": "Read mode through RPC."}}
|
|
|
|
|
|
@pytest.fixture
|
|
def families():
|
|
return {"campaign_id": "FA01", "suite_id": "S1", "families": [
|
|
{"member_case_ids": ["C1", "C2"], "objectives": [{"case_id": "C1"}, {"case_id": "C2"}],
|
|
"source_evidence": [{"case_id": "C1", "field": "description", "quote": "through RPC"}]}]}
|
|
|
|
|
|
def test_exact_partition_is_accepted(families):
|
|
assert validate_families(families, [source("C1"), source("C2")])["case_count"] == 2
|
|
|
|
|
|
@pytest.mark.parametrize("fault", ["omitted", "invented", "duplicate", "owner", "objective", "evidence"])
|
|
def test_invalid_case_assignments_cannot_pass(families, fault):
|
|
family = families["families"][0]
|
|
if fault == "omitted":
|
|
family["member_case_ids"].pop()
|
|
elif fault == "invented":
|
|
family["member_case_ids"].append("C3")
|
|
elif fault == "duplicate":
|
|
families["families"].append(copy.deepcopy(family))
|
|
elif fault == "owner":
|
|
families["suite_id"] = "S2"
|
|
elif fault == "objective":
|
|
family["objectives"][1]["case_id"] = "C1"
|
|
else:
|
|
family["source_evidence"][0]["quote"] = "invented machinery"
|
|
with pytest.raises(ValueError):
|
|
validate_families(families, [source("C1"), source("C2")])
|
|
|
|
|
|
def test_profile_evidence_must_come_from_a_real_field():
|
|
profile = {"campaign_id": "FA01", "suite_id": "S1", "case_id": "C1",
|
|
"facts": {key: None for key in DIMENSIONS}, "inferred_suggestions": []}
|
|
profile["facts"]["target_interface"] = [{"value": "RPC", "evidence": [
|
|
{"field": "description", "quote": "RPC"}]}]
|
|
validate_profile(profile, source("C1"))
|
|
profile["facts"]["target_interface"][0]["evidence"][0]["field"] = "unprovided_document"
|
|
with pytest.raises(ValueError):
|
|
validate_profile(profile, source("C1"))
|