import importlib import sys import types import unittest from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[2] MODULE_DIR = REPO_ROOT / "src" / "Mod" / "FreeCADExchange" if str(MODULE_DIR) not in sys.path: sys.path.insert(0, str(MODULE_DIR)) def _install_fake_modules(): fake_freecad = types.ModuleType("FreeCAD") fake_freecad.ActiveDocument = object() fake_freecad.Console = types.SimpleNamespace( PrintMessage=lambda *args, **kwargs: None, PrintWarning=lambda *args, **kwargs: None, PrintError=lambda *args, **kwargs: None, PrintLog=lambda *args, **kwargs: None, ) sys.modules["FreeCAD"] = fake_freecad fake_gui = types.ModuleType("FreeCADGui") fake_gui.getMainWindow = lambda: None sys.modules["FreeCADGui"] = fake_gui fake_device_import = types.ModuleType("DeviceImport") fake_device_import.DeviceImportError = RuntimeError fake_device_import.import_devices_from_payload = lambda *args, **kwargs: {} sys.modules["DeviceImport"] = fake_device_import fake_device_preview = types.ModuleType("DevicePreview") fake_device_preview.find_parent_qet_device_object = lambda obj: None fake_device_preview.is_preview_document_name = lambda name: False fake_device_preview.open_preview_for_device_object = lambda obj: None sys.modules["DevicePreview"] = fake_device_preview fake_terminal_import = types.ModuleType("TerminalImport") fake_terminal_import.TerminalImportError = RuntimeError sys.modules["TerminalImport"] = fake_terminal_import calls = [] fake_wiring = types.ModuleType("WiringObjects") fake_wiring.initialize_wiring_scene = lambda doc, project_uuid="": calls.append((doc, project_uuid)) or "root" sys.modules["WiringObjects"] = fake_wiring class _QObject: def __init__(self, *args, **kwargs): pass fake_qt_core = types.SimpleNamespace( QObject=_QObject, QEvent=types.SimpleNamespace(MouseButtonDblClick=1), QTimer=types.SimpleNamespace(singleShot=lambda *args, **kwargs: None), ) fake_qt_widgets = types.SimpleNamespace( QWidget=object, QMessageBox=types.SimpleNamespace( information=lambda *args, **kwargs: None, critical=lambda *args, **kwargs: None, ), ) fake_pyside = types.ModuleType("PySide6") fake_pyside.QtCore = fake_qt_core fake_pyside.QtWidgets = fake_qt_widgets sys.modules["PySide6"] = fake_pyside return fake_freecad, calls class ExchangeBootstrapWiringTest(unittest.TestCase): def test_initialize_wiring_scene_uses_active_document_and_project_uuid(self): app, calls = _install_fake_modules() sys.modules.pop("ExchangeBootstrap", None) bootstrap = importlib.import_module("ExchangeBootstrap") result = bootstrap._initialize_wiring_scene({"project_uuid": "project-1"}) self.assertEqual("root", result) self.assertEqual([(app.ActiveDocument, "project-1")], calls) if __name__ == "__main__": unittest.main()