from __future__ import annotations from app.algorithm_runner.cli import _resolve_source_mode, _stream_time_for_frame def test_resolve_source_mode_auto_detects_local_video(tmp_path) -> None: video = tmp_path / "case.mp4" video.write_bytes(b"") assert _resolve_source_mode(str(video), "auto") == "file" def test_resolve_source_mode_auto_keeps_rtsp_realtime() -> None: assert _resolve_source_mode("rtsp://127.0.0.1:8554/demo", "auto") == "realtime" def test_resolve_source_mode_respects_explicit_choice() -> None: assert _resolve_source_mode("rtsp://127.0.0.1:8554/demo", "file") == "file" def test_realtime_stream_time_uses_frame_index_not_wall_clock() -> None: assert _stream_time_for_frame( source_mode="realtime", cap_pos_msec=999_999.0, frame_idx=50, fps_hint=25.0, ) == 2.0 def test_file_stream_time_prefers_capture_timestamp() -> None: assert _stream_time_for_frame( source_mode="file", cap_pos_msec=1234.0, frame_idx=50, fps_hint=25.0, ) == 1.234