MicroFish/backend/tests/interviews/test_simulation_hooks.py

41 lines
1.4 KiB
Python

"""
Tests for SimulationManager lifecycle hooks (on_ready / on_completed).
NOTE ON SHAPE DIVERGENCE vs. original plan spec:
- SimulationState uses `simulation_id` (not `sim_id`)
- `status` is a SimulationStatus enum, not a plain string
- The COMPLETED transition lives in simulation_runner.py (SimulationRunner._monitor_simulation),
not in simulation_manager.py. The _notify_on_completed hook is registered on SimulationManager
and the production insertion point for COMPLETED is documented in DONE_WITH_CONCERNS.
"""
from app.services.simulation_manager import SimulationManager, SimulationState, SimulationStatus
def test_register_post_ready_hook_invoked():
called = []
mgr = SimulationManager()
mgr.register_on_ready(lambda state: called.append(("ready", state.simulation_id)))
state = SimulationState(
simulation_id="abc",
project_id="proj1",
graph_id="graph1",
status=SimulationStatus.READY,
)
mgr._notify_on_ready(state)
assert called == [("ready", "abc")]
def test_register_post_completed_hook_invoked():
called = []
mgr = SimulationManager()
mgr.register_on_completed(lambda state: called.append(("done", state.simulation_id)))
state = SimulationState(
simulation_id="abc",
project_id="proj1",
graph_id="graph1",
status=SimulationStatus.COMPLETED,
)
mgr._notify_on_completed(state)
assert called == [("done", "abc")]