from __future__ import annotations import pytest class _FakeSession: def __init__(self, available=True): self.raw_solve_options = [{"available": available}] def test_precheck_execute_inputs_requires_action(monkeypatch, reload_module): config = reload_module("config") callbacks = reload_module("gradio_callbacks") monkeypatch.setattr(callbacks, "get_session", lambda uid: _FakeSession(available=False)) with pytest.raises(Exception) as excinfo: callbacks.precheck_execute_inputs("uid-1", None, config.UI_TEXT["coords"]["not_needed"]) assert config.UI_TEXT["log"]["execute_missing_action"] in str(excinfo.value) def test_precheck_execute_inputs_requires_coords_when_option_needs_it(monkeypatch, reload_module): config = reload_module("config") callbacks = reload_module("gradio_callbacks") monkeypatch.setattr(callbacks, "get_session", lambda uid: _FakeSession(available=True)) with pytest.raises(Exception) as excinfo: callbacks.precheck_execute_inputs( "uid-1", 0, config.UI_TEXT["coords"]["select_point"] ) assert config.UI_TEXT["coords"]["select_point_before_execute"] in str(excinfo.value) def test_precheck_execute_inputs_accepts_valid_coords(monkeypatch, reload_module): reload_module("config") callbacks = reload_module("gradio_callbacks") monkeypatch.setattr(callbacks, "get_session", lambda uid: _FakeSession(available=True)) result = callbacks.precheck_execute_inputs("uid-1", 0, "11, 22") assert result is None def test_precheck_execute_inputs_session_error(monkeypatch, reload_module): config = reload_module("config") callbacks = reload_module("gradio_callbacks") monkeypatch.setattr(callbacks, "get_session", lambda uid: None) with pytest.raises(Exception) as excinfo: callbacks.precheck_execute_inputs("uid-missing", 0, "1, 2") assert config.UI_TEXT["log"]["session_error"] in str(excinfo.value)