from __future__ import annotations import tempfile import unittest from pathlib import Path from owner_voice_pet.simulation import run_simulated_live class SimulationTests(unittest.TestCase): def test_simulated_live_runs_two_turns_with_context_and_noise_filter(self) -> None: result = run_simulated_live(turns=2) self.assertTrue(result["success"], result) self.assertEqual(result["completed_turns"], 2) self.assertEqual(result["failed_turns"], 0) self.assertEqual(result["final_transcripts"], ["第1轮模拟问题", "第2轮模拟问题"]) self.assertNotIn("家", result["partials"]) self.assertNotIn("家确", result["partials"]) self.assertTrue(result["checks"]["context_in_second_turn"]) self.assertTrue(result["checks"]["denoised_capture"]) self.assertEqual(result["checks"]["standby_per_turn"], True) def test_simulated_live_can_write_and_replay_fixture(self) -> None: with tempfile.TemporaryDirectory() as tmp: fixture = Path(tmp) / "simulated-mic.jsonl" generated = run_simulated_live(turns=1, write_fixture=fixture) replayed = run_simulated_live(turns=1, fixture_path=fixture) self.assertTrue(generated["success"], generated) self.assertTrue(replayed["success"], replayed) self.assertEqual(replayed["final_transcripts"], ["第1轮模拟问题"]) if __name__ == "__main__": unittest.main()