"""Unit tests for LamniGuiTools.lamnigui_show_xeyealign()'s live-view reset.""" from unittest import mock from csaxs_bec.bec_ipython_client.plugins.LamNI.gui_tools import LamniGuiTools # pylint: disable=protected-access GUI_TOOLS = "csaxs_bec.bec_ipython_client.plugins.LamNI.gui_tools" def _make_gui_tools(): tools = LamniGuiTools() client = mock.MagicMock() tools.set_client(client) return tools, client def test_lamnigui_show_xeyealign_resets_live_view_on_reuse(): """A previously-interrupted run (e.g. Ctrl-C mid set_live_view_signal) could leave xeyegui stuck on the smear channel/indicator; since the widget is reused (not recreated) across calls, opening the alignment view must reset both every time, not just on first creation.""" tools, client = _make_gui_tools() tools.xeyegui = mock.MagicMock() tools.xeyegui._is_deleted.return_value = False client.gui.windows = {"lamni": mock.MagicMock()} dev_mock = mock.MagicMock() dev_mock.cam_xeye.live_mode_enabled.get.return_value = True with mock.patch(f"{GUI_TOOLS}.dev", dev_mock, create=True): tools.lamnigui_show_xeyealign() tools.xeyegui.set_live_view_signal.assert_called_once_with("image") tools.xeyegui.set_smear_active.assert_called_once_with(False) def test_lamnigui_show_xeyealign_resets_on_fresh_widget_too(): """Even a freshly-created widget gets the reset call -- cheap/no-op, and keeps the behavior uniform regardless of prior state.""" tools, client = _make_gui_tools() client.gui.windows = {"lamni": mock.MagicMock()} new_widget = mock.MagicMock() client.gui.lamni.new.return_value = new_widget dev_mock = mock.MagicMock() dev_mock.cam_xeye.live_mode_enabled.get.return_value = True with mock.patch(f"{GUI_TOOLS}.dev", dev_mock, create=True): tools.lamnigui_show_xeyealign() new_widget.set_live_view_signal.assert_called_once_with("image") new_widget.set_smear_active.assert_called_once_with(False)