| import json |
| import os |
| import unittest |
|
|
| import app |
| import town |
|
|
|
|
| class TraceTest(unittest.TestCase): |
| def test_act_records_generation_trace(self): |
| original_generate = town.GENERATE |
| town.GENERATE = lambda system, user: '"A tidy test line."' |
| try: |
| state = town.TownState() |
| town.inject(state, "The bell rings.") |
| state.tick = 1 |
|
|
| town.act(state, town.CAST[0]) |
|
|
| self.assertEqual(len(state.traces), 1) |
| trace = state.traces[0] |
| self.assertEqual(trace["tick"], 1) |
| self.assertEqual(trace["speaker"], "Mayor Doreen") |
| self.assertEqual(trace["role"], "mayor") |
| self.assertEqual(trace["model"], town.AGENT_MODEL) |
| self.assertEqual(trace["context"], ["📢: The bell rings."]) |
| self.assertEqual(trace["output"], "A tidy test line.") |
| self.assertTrue(trace["system"].startswith("You are Mayor Doreen")) |
| self.assertTrue(trace["ts"].endswith("Z")) |
| finally: |
| town.GENERATE = original_generate |
|
|
| def test_download_trace_writes_jsonl(self): |
| state = town.TownState(traces=[{"tick": 1, "output": "café"}]) |
|
|
| path = app.download_trace(state) |
| try: |
| with open(path, encoding="utf-8") as trace_file: |
| self.assertEqual(json.loads(trace_file.read()), state.traces[0]) |
| finally: |
| os.unlink(path) |
|
|
| def test_download_trace_handles_missing_state(self): |
| self.assertIsNone(app.download_trace(None)) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|