mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-07-11 22:10:59 +02:00
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
import uuid
|
|
|
|
import pytest
|
|
from bec_lib.bl_states import DeviceWithinLimitsStateConfig
|
|
|
|
# pylint: disable=unused-argument
|
|
# pylint: disable=redefined-outer-name
|
|
# pylint: disable=protected-access
|
|
|
|
|
|
def _delete_state_if_present(bec, state_name: str) -> None:
|
|
if hasattr(bec.beamline_states, state_name):
|
|
bec.beamline_states.delete(state_name)
|
|
|
|
|
|
@pytest.mark.timeout(100)
|
|
def test_beamline_state_manager_adds_updates_and_deletes_state_e2e(
|
|
qtbot, bec_client_lib, connected_client_gui_obj
|
|
):
|
|
"""
|
|
Verify the real BEC beamline-state flow is reflected by a BeamlineStateManager
|
|
running in the GUI server, accessed through the dock area RPC interface.
|
|
"""
|
|
gui = connected_client_gui_obj
|
|
dock_area = gui.bec
|
|
bec = bec_client_lib
|
|
dev = bec.device_manager.devices
|
|
scans = bec.scans
|
|
|
|
state_name = f"samx_widget_limits_{uuid.uuid4().hex[:8]}"
|
|
config = DeviceWithinLimitsStateConfig(
|
|
name=state_name, device="samx", signal="samx", low_limit=0.0, high_limit=10.0, tolerance=1.0
|
|
)
|
|
|
|
manager = dock_area.new("BeamlineStateManager")
|
|
qtbot.waitUntil(lambda: manager._gui_id in gui._server_registry, timeout=5000)
|
|
|
|
def state_entry() -> dict[str, str]:
|
|
return manager.state_summary().get(state_name, {})
|
|
|
|
_delete_state_if_present(bec, state_name)
|
|
|
|
try:
|
|
bec.beamline_states.add(config)
|
|
|
|
qtbot.waitUntil(lambda: hasattr(bec.beamline_states, state_name), timeout=10000)
|
|
qtbot.waitUntil(lambda: state_name in manager.state_summary(), timeout=10000)
|
|
|
|
scans.umv(dev.samx, 5, relative=False).wait()
|
|
qtbot.waitUntil(
|
|
lambda: getattr(bec.beamline_states, state_name).get()["status"] == "valid",
|
|
timeout=10000,
|
|
)
|
|
qtbot.waitUntil(lambda: state_entry().get("status") == "valid", timeout=10000)
|
|
assert state_entry()["label"] == "Device samx within limits"
|
|
|
|
scans.umv(dev.samx, 20, relative=False).wait()
|
|
qtbot.waitUntil(
|
|
lambda: getattr(bec.beamline_states, state_name).get()["status"] == "invalid",
|
|
timeout=10000,
|
|
)
|
|
qtbot.waitUntil(lambda: state_entry().get("status") == "invalid", timeout=10000)
|
|
assert state_entry()["label"] == "Device samx out of limits"
|
|
|
|
bec.beamline_states.delete(state_name)
|
|
qtbot.waitUntil(lambda: not hasattr(bec.beamline_states, state_name), timeout=10000)
|
|
qtbot.waitUntil(lambda: state_name not in manager.state_summary(), timeout=10000)
|
|
|
|
finally:
|
|
_delete_state_if_present(bec, state_name)
|
|
scans.umv(dev.samx, 0, relative=False).wait()
|