diff --git a/bec_widgets/widgets/positioner_box/positioner_box.py b/bec_widgets/widgets/positioner_box/positioner_box.py index 5f3bbe53..0b46d73a 100644 --- a/bec_widgets/widgets/positioner_box/positioner_box.py +++ b/bec_widgets/widgets/positioner_box/positioner_box.py @@ -46,6 +46,7 @@ class PositionerBox(BECWidget, QWidget): self.get_bec_shortcuts() self._device = "" self._limits = None + self._dialog = None self.init_ui() @@ -87,17 +88,18 @@ class PositionerBox(BECWidget, QWidget): def _open_dialog_selection(self): """Open dialog window for positioner selection""" - dialog = QDialog(self) - dialog.setWindowTitle("Positioner Selection") + self._dialog = QDialog(self) + self._dialog.setWindowTitle("Positioner Selection") layout = QVBoxLayout() line_edit = DeviceLineEdit(self, client=self.client, device_filter="Positioner") - line_edit.textChanged.connect(self._positioner_changed) + line_edit.textChanged.connect(self.set_positioner) layout.addWidget(line_edit) close_button = QPushButton("Close") - close_button.clicked.connect(dialog.accept) + close_button.clicked.connect(self._dialog.accept) layout.addWidget(close_button) - dialog.setLayout(layout) - dialog.exec() + self._dialog.setLayout(layout) + self._dialog.exec() + self._dialog = None def init_device(self): """Init the device view and readback""" diff --git a/tests/unit_tests/test_positioner_box.py b/tests/unit_tests/test_positioner_box.py index 46983232..78a5e546 100644 --- a/tests/unit_tests/test_positioner_box.py +++ b/tests/unit_tests/test_positioner_box.py @@ -4,8 +4,11 @@ import pytest from bec_lib.device import Positioner from bec_lib.endpoints import MessageEndpoints from bec_lib.messages import ScanQueueMessage +from qtpy.QtCore import Qt, QTimer from qtpy.QtGui import QValidator +from qtpy.QtWidgets import QPushButton +from bec_widgets.widgets.device_line_edit.device_line_edit import DeviceLineEdit from bec_widgets.widgets.positioner_box.positioner_box import PositionerBox from bec_widgets.widgets.positioner_box.positioner_control_line import PositionerControlLine @@ -128,3 +131,23 @@ def test_positioner_control_line(qtbot, mocked_client): assert db.ui.device_box.height() == 60 assert db.ui.device_box.width() == 600 + + +def test_positioner_box_open_dialog_selection(qtbot, positioner_box): + """Test open positioner edit""" + + # Use a timer to close the dialog after it opens + def close_dialog(): + # pylint: disable=protected-access + assert positioner_box._dialog is not None + qtbot.waitUntil(lambda: positioner_box._dialog.isVisible() is True, timeout=1000) + line_edit = positioner_box._dialog.findChild(DeviceLineEdit) + line_edit.setText("samy") + close_button = positioner_box._dialog.findChild(QPushButton) + assert close_button.text() == "Close" + qtbot.mouseClick(close_button, Qt.LeftButton) + + # Execute the timer after the dialog opens to close it + QTimer.singleShot(100, close_dialog) + qtbot.mouseClick(positioner_box.ui.tool_button, Qt.LeftButton) + assert positioner_box.device == "samy"