Files
ai-contract-platform/backend/tests/test_review_structured_acceptance_gate.py
T
2026-05-04 18:53:24 +08:00

113 lines
4.6 KiB
Python

import unittest
from tools.review_structured_acceptance_gate import (
build_field_baseline,
build_field_baseline_by_contract,
build_relationship_baseline,
build_relationship_baseline_by_type,
load_cases_from_manifest,
SAMPLE_MANIFEST_PATH,
)
class ReviewStructuredAcceptanceGateMetricsTestCase(unittest.TestCase):
def test_build_field_baseline_counts_expected_metrics(self):
summary = {
"cases": [
{
"case_id": "S-001",
"status": "PASS",
"result": {
"clauses": [{"clause_type": "payment"}, {"clause_type": "confidentiality"}],
"contract_structure": {
"detected_contract_type": "service",
"amount": "人民币500000元",
"term_details": {"start_date": "2026-05-01", "end_date": "2027-05-01"},
"payment_milestones": [{}],
"liability_carve_outs": [],
"intellectual_property_owner": None,
},
},
}
]
}
rows = build_field_baseline(summary)
metrics = {row["metric"]: row for row in rows}
self.assertEqual(metrics["contract_type"]["passed"], 1)
self.assertEqual(metrics["amount"]["passed"], 1)
self.assertEqual(metrics["term_start"]["passed"], 1)
self.assertEqual(metrics["payment_milestones"]["passed"], 1)
def test_build_relationship_baseline_counts_presence_and_confidence(self):
summary = {
"cases": [
{
"case_id": "S-007",
"status": "PASS",
"result": {
"contract_structure": {
"clause_relationships": [
{"type": "payment_depends_on_acceptance", "confidence_tier": "high"},
{"type": "liability_cap_conflicts_with_breach", "confidence_tier": "weak"},
]
}
},
}
]
}
rows = build_relationship_baseline(summary)
metrics = {row["metric"]: row for row in rows}
self.assertEqual(metrics["relationship_presence"]["passed"], 2)
self.assertEqual(metrics["relationship_absence"]["passed"], 2)
self.assertEqual(metrics["relationship_confidence"]["passed"], 1)
def test_load_cases_from_manifest_reads_external_sample_files(self):
cases = load_cases_from_manifest(SAMPLE_MANIFEST_PATH)
self.assertGreaterEqual(len(cases), 10)
self.assertTrue(any(case.case_id == "S-010" for case in cases))
self.assertTrue(any("甲方" in case.content for case in cases))
def test_grouped_baselines_split_by_contract_and_relationship_type(self):
summary = {
"cases": [
{
"case_id": "S-006",
"status": "PASS",
"result": {
"clauses": [{"clause_type": "payment"}, {"clause_type": "acceptance"}],
"contract_structure": {
"detected_contract_type": "service",
"amount": "人民币1500000元",
"term_details": {"start_date": "2026-08-01", "end_date": "2027-08-01"},
"payment_milestones": [{}, {}, {}, {}],
"liability_carve_outs": [],
"intellectual_property_owner": "party_a",
"clause_relationships": [
{"type": "payment_depends_on_acceptance", "confidence_tier": "high"},
],
},
},
}
]
}
field_rows = build_field_baseline_by_contract(summary)
relationship_rows = build_relationship_baseline_by_type(summary)
field_metrics = {row["contract_family"]: row for row in field_rows}
relationship_metrics = {row["relationship_type"]: row for row in relationship_rows}
self.assertEqual(field_metrics["service"]["contract_type_accuracy"], 100.0)
self.assertEqual(field_metrics["service"]["payment_milestone_accuracy"], 100.0)
self.assertEqual(relationship_metrics["payment_depends_on_acceptance"]["presence_accuracy"], 100.0)
self.assertEqual(relationship_metrics["payment_depends_on_acceptance"]["confidence_accuracy"], 100.0)
if __name__ == "__main__":
unittest.main()