diff --git a/bec_widgets/widgets/bec_queue/bec_queue.py b/bec_widgets/widgets/bec_queue/bec_queue.py index a7d7369c..36bbc77a 100644 --- a/bec_widgets/widgets/bec_queue/bec_queue.py +++ b/bec_widgets/widgets/bec_queue/bec_queue.py @@ -1,11 +1,11 @@ from __future__ import annotations from bec_lib.endpoints import MessageEndpoints +from bec_qthemes import material_icon from qtpy.QtCore import Property, Qt, Slot from qtpy.QtGui import QColor from qtpy.QtWidgets import QHeaderView, QLabel, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget -from bec_qthemes import material_icon from bec_widgets.qt_utils.toolbar import ModularToolBar, SeparatorAction, WidgetAction from bec_widgets.utils.bec_connector import ConnectionConfig from bec_widgets.utils.bec_widget import BECWidget diff --git a/bec_widgets/widgets/button_reset/button_reset.py b/bec_widgets/widgets/button_reset/button_reset.py index 977ae2e6..578738a4 100644 --- a/bec_widgets/widgets/button_reset/button_reset.py +++ b/bec_widgets/widgets/button_reset/button_reset.py @@ -1,13 +1,13 @@ from bec_qthemes import material_icon from qtpy.QtCore import Qt -from qtpy.QtWidgets import QHBoxLayout, QPushButton, QToolButton, QWidget +from qtpy.QtWidgets import QHBoxLayout, QMessageBox, QPushButton, QToolButton, QWidget from bec_widgets.qt_utils.error_popups import SafeSlot from bec_widgets.utils.bec_widget import BECWidget class ResetButton(BECWidget, QWidget): - """A button that reset the scan queue.""" + """A button that resets the scan queue.""" ICON_NAME = "restart_alt" @@ -34,11 +34,26 @@ class ResetButton(BECWidget, QWidget): self.button.setStyleSheet( "background-color: #F19E39; color: white; font-weight: bold; font-size: 12px;" ) - self.button.clicked.connect(self.reset_queue) + self.button.clicked.connect(self.confirm_reset_queue) self.layout.addWidget(self.button) + @SafeSlot() + def confirm_reset_queue(self): + """Prompt the user to confirm the queue reset.""" + msg_box = QMessageBox() + msg_box.setIcon(QMessageBox.Warning) + msg_box.setWindowTitle("Confirm Reset") + msg_box.setText( + "Are you sure you want to reset the scan queue? This action cannot be undone." + ) + msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No) + msg_box.setDefaultButton(QMessageBox.No) + + if msg_box.exec_() == QMessageBox.Yes: + self.reset_queue() + @SafeSlot() def reset_queue(self): - """Stop the scan.""" + """Reset the scan queue.""" self.queue.request_queue_reset() diff --git a/tests/unit_tests/test_reset_button.py b/tests/unit_tests/test_reset_button.py index 8cb159ad..fa2d4926 100644 --- a/tests/unit_tests/test_reset_button.py +++ b/tests/unit_tests/test_reset_button.py @@ -1,6 +1,9 @@ # pylint: disable=missing-function-docstring, missing-module-docstring, unused-import +from unittest.mock import patch + import pytest +from qtpy.QtWidgets import QMessageBox from bec_widgets.widgets.button_reset.button_reset import ResetButton @@ -15,12 +18,23 @@ def reset_button(qtbot, mocked_client): yield widget -def test_stop_button(reset_button): +def test_reset_button_appearance(reset_button): assert reset_button.button.text() == "Reset Queue" assert ( reset_button.button.styleSheet() == "background-color: #F19E39; color: white; font-weight: bold; font-size: 12px;" ) + + +@patch.object(QMessageBox, "exec_", return_value=QMessageBox.Yes) +def test_reset_button_confirmed(mock_exec, reset_button): reset_button.button.click() assert reset_button.queue.request_queue_reset.called reset_button.close() + + +@patch.object(QMessageBox, "exec_", return_value=QMessageBox.No) +def test_reset_button_cancelled(mock_exec, reset_button): + reset_button.button.click() + assert not reset_button.queue.request_queue_reset.called + reset_button.close()