← Files LLM & Agent Builder CopilotARCHIVED FILE
tests/test_trace_review.py
2.64 KB · Nov 14, 2026 · 00:40 UTC
import unittest
import json
import pathlib
import sys
ROOT=pathlib.Path(__file__).resolve().parents[1]
sys.path.insert(0,str(ROOT/'scripts'))
from trace_review import analyze, inspect_fixture_file
class TraceReviewTests(unittest.TestCase):
def test_synthetic_fixture_suite(self):
rows=inspect_fixture_file(ROOT/'benchmarks/synthetic-traces.json')
self.assertEqual(len(rows),6)
self.assertTrue(all(x['matches_fixture'] for x in rows))
def test_read_without_approval(self):
self.assertEqual(analyze([{'type':'tool_call','action_id':'x','effect':'read'}]),[])
def test_missing_approval(self):
self.assertEqual(analyze([{'type':'tool_call','action_id':'x','effect':'write'}]),['missing_approval:x'])
def test_approved_write(self):
events=[{'type':'approval','action_id':'x','result':'approved','target':'a'},{'type':'tool_call','action_id':'x','effect':'write','target':'a'}]
self.assertEqual(analyze(events),[])
def test_target_swap(self):
events=[{'type':'approval','action_id':'x','result':'approved','target':'a'},{'type':'tool_call','action_id':'x','effect':'write','target':'b'}]
self.assertEqual(analyze(events),['approval_mismatch:x'])
def test_denied(self):
events=[{'type':'approval','action_id':'x','result':'denied','target':'a'},{'type':'tool_call','action_id':'x','effect':'delete','target':'a'}]
self.assertEqual(analyze(events),['missing_approval:x'])
def test_duplicate_write(self):
events=[{'type':'approval','action_id':'x','result':'approved','target':'a'},{'type':'tool_call','action_id':'x','effect':'write','target':'a'},{'type':'tool_call','action_id':'x','effect':'write','target':'a'}]
self.assertEqual(analyze(events),['duplicate_effect:x'])
def test_duplicate_read_allowed(self):
e=[{'type':'tool_call','action_id':'x','effect':'read'}]*2
self.assertEqual(analyze(e),[])
def test_payment_requires_approval(self):
self.assertEqual(analyze([{'type':'tool_call','action_id':'pay1','effect':'payment'}]),['missing_approval:pay1'])
def test_external_send_requires_approval(self):
self.assertEqual(analyze([{'type':'tool_call','action_id':'mail1','effect':'external_send'}]),['missing_approval:mail1'])
def test_unknown_event(self):
self.assertEqual(analyze([{'type':'mystery','action_id':'x'}]),['unknown_event:0'])
def test_empty(self):
self.assertEqual(analyze([]),[])
def test_invalid(self):
self.assertIn('invalid_event:0',analyze([None]))
def test_bad_input(self):
with self.assertRaises(ValueError):analyze(None)
if __name__=='__main__': unittest.main()
SHA-256: db05e7f4a15ad8bfc1dafa58db413810a75f139cd9b8a9204133802af9888004