wip adding dialog adjusted

This commit is contained in:
2026-05-29 16:02:57 +02:00
parent 0883719c4e
commit 67aa66edc9
2 changed files with 143 additions and 44 deletions
+64 -4
View File
@@ -1,4 +1,6 @@
import shiboken6
from bec_lib import messages
from qtpy.QtCore import QCoreApplication, QEvent
from bec_widgets.utils.toolbars.toolbar import ModularToolBar
from bec_widgets.widgets.services.beamline_states.beamline_state_pill import (
@@ -6,6 +8,7 @@ from bec_widgets.widgets.services.beamline_states.beamline_state_pill import (
BeamlineStateManager,
BeamlineStatePill,
)
from bec_widgets.widgets.utility.spinbox.decimal_spinbox import BECSpinBox
from .client_mocks import mocked_client
@@ -81,7 +84,7 @@ def test_beamline_state_manager_adds_and_removes_pills(qtbot, mocked_client):
assert sorted(widget._state_pills) == ["limits"]
def test_beamline_state_manager_filters_states(qtbot, mocked_client):
def test_beamline_state_manager_filters_status(qtbot, mocked_client):
widget = BeamlineStateManager(client=mocked_client)
qtbot.addWidget(widget)
@@ -107,7 +110,13 @@ def test_beamline_state_manager_filters_states(qtbot, mocked_client):
assert isinstance(widget._toolbar, ModularToolBar)
widget._selected_state_names = {"limits"}
widget._state_pills["limits"].update_state(
{"name": "limits", "status": "valid", "label": "Within limits."}, {}
)
widget._state_pills["shutter_open"].update_state(
{"name": "shutter_open", "status": "invalid", "label": "Closed."}, {}
)
widget._selected_statuses = {"valid"}
widget._apply_filters()
assert not widget._hidden_summary.isHidden()
@@ -120,6 +129,39 @@ def test_beamline_state_manager_filters_states(qtbot, mocked_client):
assert not widget._hidden_content.isHidden()
def test_beamline_state_manager_status_filter_reacts_to_state_changes(qtbot, mocked_client):
widget = BeamlineStateManager(client=mocked_client)
qtbot.addWidget(widget)
widget.update_available_states(
{
"states": [
{
"name": "limits",
"title": "Limits",
"state_type": "DeviceWithinLimitsState",
"parameters": {"device": "samx"},
}
]
},
{},
)
widget._selected_statuses = {"valid"}
widget._state_pills["limits"].update_state(
{"name": "limits", "status": "valid", "label": "Within limits."}, {}
)
assert widget._hidden_summary.isHidden()
widget._state_pills["limits"].update_state(
{"name": "limits", "status": "invalid", "label": "Out of limits."}, {}
)
assert not widget._hidden_summary.isHidden()
assert widget._state_pills["limits"].parent() is widget._hidden_content
def test_beamline_state_manager_filters_devices(qtbot, mocked_client):
widget = BeamlineStateManager(client=mocked_client)
qtbot.addWidget(widget)
@@ -158,7 +200,6 @@ def test_add_beamline_state_dialog_uses_device_signal_widgets_and_normalizes_nam
dialog = AddBeamlineStateDialog(client=mocked_client)
qtbot.addWidget(dialog)
dialog._type_combo.setCurrentIndex(1)
dialog._name.setText("samx-limits")
dialog._title.setText("samx-limits-15")
dialog._device.set_device("samx")
@@ -173,6 +214,9 @@ def test_add_beamline_state_dialog_uses_device_signal_widgets_and_normalizes_nam
assert config.signal == "samx"
assert config.low_limit == 0.0
assert config.high_limit == 15.0
assert isinstance(dialog._low_limit, BECSpinBox)
assert isinstance(dialog._high_limit, BECSpinBox)
assert dialog._low_limit.width() == dialog._device.width()
def test_add_beamline_state_dialog_generates_name_only_after_valid_device_selection(
@@ -181,7 +225,6 @@ def test_add_beamline_state_dialog_generates_name_only_after_valid_device_select
dialog = AddBeamlineStateDialog(client=mocked_client)
qtbot.addWidget(dialog)
dialog._type_combo.setCurrentIndex(1)
dialog._device.setCurrentText("s")
assert dialog._name.text() == ""
@@ -189,3 +232,20 @@ def test_add_beamline_state_dialog_generates_name_only_after_valid_device_select
dialog._device.set_device("samx")
assert dialog._name.text() == "samx_limits"
def test_add_beamline_state_dialog_cleanup_deletes_device_widgets(qtbot, mocked_client):
dialog = AddBeamlineStateDialog(client=mocked_client)
qtbot.addWidget(dialog)
device = dialog._device
signal = dialog._signal
dialog.reject()
assert shiboken6.isValid(device)
assert shiboken6.isValid(signal)
dialog.cleanup()
QCoreApplication.sendPostedEvents(None, QEvent.Type.DeferredDelete)
assert not shiboken6.isValid(device)
assert not shiboken6.isValid(signal)