Spaces:
Sleeping
Sleeping
| """End-to-end smoke test in mock mode — the PRD's gate: prove clean turns from | |
| the full loop (stance -> catch -> witness line -> voice), and a full win. | |
| Runs with no GPU / no Modal (offline mock backend), so CI can assert the whole | |
| game flow on every commit. | |
| """ | |
| from witnessbox.backends import get_backends | |
| from witnessbox.engine import WitnessBoxEngine | |
| from witnessbox.state import Phase | |
| CATCH_LINES = [ | |
| "The wire cleared on March 6th — before the board approved it on the 14th.", | |
| "Anything over $5 million requires the CFO's sign-off, and your credentials are on the authorization log.", | |
| "You were cc'd on Meridian's incorporation filing two years ago — Dana Voss, your colleague.", | |
| ] | |
| def _new_engine(): | |
| eng = WitnessBoxEngine(get_backends()) | |
| eng.start() | |
| return eng | |
| def test_five_consecutive_clean_turns(): | |
| eng = _new_engine() | |
| for i in range(5): | |
| res = eng.take_turn(typed_text=f"Just asking a harmless question number {i}.") | |
| assert res.witness_text # he always says something | |
| assert res.witness_audio is not None # and we always have audio | |
| assert res.status["turn"] == i + 1 | |
| def test_full_win_path_and_voice_crack(): | |
| eng = _new_engine() | |
| last = None | |
| for line in CATCH_LINES: | |
| last = eng.take_turn(typed_text=line) | |
| assert last.evidence # each catch shows honest on-record evidence | |
| assert last.events.won | |
| assert eng.state.phase == Phase.WON | |
| assert last.witness_audio is not None # the cached break take | |
| assert last.epilogue_audio is not None # win sting follows | |
| def test_confident_clip_does_not_crash_turn(): | |
| import numpy as np | |
| eng = _new_engine() | |
| audio = (0.2 * np.random.RandomState(1).randn(24000)).astype(np.float32) | |
| res = eng.take_turn(audio=audio, sr=16000, typed_text="Were you in the building that day?") | |
| assert res.stance.tier in {"CONFIDENT", "NEUTRAL", "HESITANT"} | |
| assert res.witness_text | |