From 7628e47478336993f453c3ce04280e4de4fb798c Mon Sep 17 00:00:00 2001 From: JobvAlewijk Date: Mon, 24 Nov 2025 20:02:28 +0000 Subject: [PATCH] test: added qi_utils test --- test/unit/test_qi_utils.py | 90 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 test/unit/test_qi_utils.py diff --git a/test/unit/test_qi_utils.py b/test/unit/test_qi_utils.py new file mode 100644 index 0000000..70d9c69 --- /dev/null +++ b/test/unit/test_qi_utils.py @@ -0,0 +1,90 @@ +import sys + +# Import module under test +import robot_interface.utils.qi_utils as qi_utils + + +def reload_qi_utils_with(qi_module): + """ + Helper: reload qi_utils after injecting a fake qi module. + Python 2 uses built-in reload(). + Just changing sys.modules[qi] won't affect the already imported module. + """ + if qi_module is None: + if "qi" in sys.modules: + del sys.modules["qi"] + else: + sys.modules["qi"] = qi_module + + # Python 2 reload + global qi_utils + qi_utils = reload(qi_utils) + + +def test_get_qi_session_no_qi_module(): + """ + Tests the 'qi is None' path. + """ + reload_qi_utils_with(None) + + session = qi_utils.get_qi_session() + assert session is None + + +def test_get_qi_session_no_qi_url_argument(monkeypatch): + """ + Tests the '--qi-url not in sys.argv' path. + """ + class FakeQi: + pass + + reload_qi_utils_with(FakeQi()) + + monkeypatch.setattr(sys, "argv", ["pytest"]) + + session = qi_utils.get_qi_session() + assert session is None + + +def test_get_qi_session_runtime_error(monkeypatch): + """ + Tests the 'exept RuntineError' path. + """ + class FakeApp: + def start(self): + raise RuntimeError("boom") + + class FakeQi: + Application = lambda self=None: FakeApp() + + reload_qi_utils_with(FakeQi()) + + monkeypatch.setattr(sys, "argv", ["pytest", "--qi-url", "tcp://localhost"]) + + session = qi_utils.get_qi_session() + assert session is None + + +def test_get_qi_session_success(monkeypatch): + """ + Tests a valid path. + """ + class FakeSession: + pass + + class FakeApp: + def __init__(self): + self.session = FakeSession() + + def start(self): + return True + + class FakeQi: + Application = lambda self=None: FakeApp() + + reload_qi_utils_with(FakeQi()) + + monkeypatch.setattr(sys, "argv", ["pytest", "--qi-url", "tcp://localhost"]) + + session = qi_utils.get_qi_session() + assert isinstance(session, FakeSession)