import pytest from unittest.mock import MagicMock, patch from PySide6.QtCore import Qt from aare.gui.main_window import MainWindow @pytest.fixture def mock_ui_state(): with patch("aare.gui.main_window.UIStateManager") as mock: yield mock def test_main_window_init(qtbot, mock_ui_state): # Mocking many things that MainWindow __init__ tries to do # Especially things that hit the network or expected files with patch("requests.get") as mock_get, \ patch("aare.gui.main_window.DAQWorker"), \ patch("aare.gui.main_window.SampleCameraThread"), \ patch("aare.gui.main_window.PredictionSubscriber"), \ patch("aare.gui.main_window.VideoThread"), \ patch("aare.gui.main_window.JFJochDBusClient"), \ patch("aare.gui.main_window.WorkflowSSEClient"), \ patch("aare.gui.main_window.jwt.decode") as mock_jwt: mock_get.return_value.status_code = 200 mock_get.return_value.json.return_value = {"status": "ok"} mock_jwt.return_value = {"sub": "testuser", "staff": True, "pgroups": ["p123"], "session": 15} # Create a valid-looking fake JWT fake_token = "header.payload.signature" # We need to provide all arguments to MainWindow win = MainWindow( base_url="http://localhost:5210", token=fake_token, default_image=None, zmq_addr=None, pred_zmq_addr=None, beamline_cam_addr="localhost", gonio_cam_addr="localhost", gonio_cam_id=1 ) win.show() qtbot.addWidget(win) assert win.windowTitle() == "AareGUI" assert win.isVisible() def test_main_window_mount_view(qtbot, mock_ui_state): with patch("requests.get"), \ patch("aare.gui.main_window.DAQWorker"), \ patch("aare.gui.main_window.SampleCameraThread"), \ patch("aare.gui.main_window.PredictionSubscriber"), \ patch("aare.gui.main_window.VideoThread"), \ patch("aare.gui.main_window.JFJochDBusClient"), \ patch("aare.gui.main_window.WorkflowSSEClient"), \ patch("aare.gui.main_window.jwt.decode") as mock_jwt: mock_jwt.return_value = {"sub": "testuser", "staff": True, "pgroups": ["p123"], "session": 15} fake_token = "header.payload.signature" win = MainWindow( base_url=None, token=fake_token, default_image=None, zmq_addr=None, pred_zmq_addr=None, beamline_cam_addr=None, gonio_cam_addr=None, gonio_cam_id=None ) qtbot.addWidget(win) win.mount_view() # This just changes some panel visibility, hard to assert without deep inspection # but we check it doesn't crash