diff --git a/tests/unit_tests/client_mocks.py b/bec_widgets/tests/client_mocks.py similarity index 99% rename from tests/unit_tests/client_mocks.py rename to bec_widgets/tests/client_mocks.py index b64a65ee3..cf361eb8d 100644 --- a/tests/unit_tests/client_mocks.py +++ b/bec_widgets/tests/client_mocks.py @@ -9,7 +9,7 @@ from bec_lib.redis_connector import RedisConnector from bec_lib.scan_history import ScanHistory -from bec_widgets.tests.utils import DEVICES, DMMock, FakePositioner, Positioner +from bec_widgets.tests.fake_devices import DEVICES, DMMock, FakePositioner, Positioner def fake_redis_server(host, port): diff --git a/bec_widgets/tests/fake_devices.py b/bec_widgets/tests/fake_devices.py new file mode 100644 index 000000000..bf4cdf0e2 --- /dev/null +++ b/bec_widgets/tests/fake_devices.py @@ -0,0 +1,285 @@ +from unittest.mock import MagicMock + +from bec_lib.device import Device as BECDevice +from bec_lib.device import Positioner as BECPositioner +from bec_lib.device import ReadoutPriority +from bec_lib.devicemanager import DeviceContainer + + +class FakeDevice(BECDevice): + """Fake minimal positioner class for testing.""" + + def __init__(self, name, enabled=True, readout_priority=ReadoutPriority.MONITORED): + super().__init__(name=name) + self._enabled = enabled + self.signals = {self.name: {"value": 1.0}} + self.description = {self.name: {"source": self.name, "dtype": "number", "shape": []}} + self._readout_priority = readout_priority + self._config = { + "readoutPriority": "baseline", + "deviceClass": "ophyd.Device", + "deviceConfig": {}, + "deviceTags": {"user device"}, + "enabled": enabled, + "readOnly": False, + "name": self.name, + } + + @property + def readout_priority(self): + return self._readout_priority + + @readout_priority.setter + def readout_priority(self, value): + self._readout_priority = value + + @property + def limits(self) -> tuple[float, float]: + return self._limits + + @limits.setter + def limits(self, value: tuple[float, float]): + self._limits = value + + def __contains__(self, item): + return item == self.name + + @property + def _hints(self): + return [self.name] + + def set_value(self, fake_value: float = 1.0) -> None: + """ + Setup fake value for device readout + Args: + fake_value(float): Desired fake value + """ + self.signals[self.name]["value"] = fake_value + + def describe(self) -> dict: + """ + Get the description of the device + Returns: + dict: Description of the device + """ + return self.description + + +class FakePositioner(BECPositioner): + + def __init__( + self, + name, + enabled=True, + limits=None, + read_value=1.0, + readout_priority=ReadoutPriority.MONITORED, + ): + super().__init__(name=name) + # self.limits = limits if limits is not None else [0.0, 0.0] + self.read_value = read_value + self.setpoint_value = read_value + self.motor_is_moving_value = 0 + self._enabled = enabled + self._limits = limits + self._readout_priority = readout_priority + self.signals = {self.name: {"value": 1.0}} + self.description = {self.name: {"source": self.name, "dtype": "number", "shape": []}} + self._config = { + "readoutPriority": "baseline", + "deviceClass": "ophyd_devices.SimPositioner", + "deviceConfig": {"delay": 1, "tolerance": 0.01, "update_frequency": 400}, + "deviceTags": {"user motors"}, + "enabled": enabled, + "readOnly": False, + "name": self.name, + } + self._info = { + "signals": { + "readback": { + "kind_str": "hinted", + "component_name": "readback", + "obj_name": self.name, + }, # hinted + "setpoint": { + "kind_str": "normal", + "component_name": "setpoint", + "obj_name": f"{self.name}_setpoint", + }, # normal + "velocity": { + "kind_str": "config", + "component_name": "velocity", + "obj_name": f"{self.name}_velocity", + }, # config + } + } + self.signals = { + self.name: {"value": self.read_value}, + f"{self.name}_setpoint": {"value": self.setpoint_value}, + f"{self.name}_motor_is_moving": {"value": self.motor_is_moving_value}, + } + + @property + def readout_priority(self): + return self._readout_priority + + @readout_priority.setter + def readout_priority(self, value): + self._readout_priority = value + + @property + def enabled(self) -> bool: + return self._enabled + + @enabled.setter + def enabled(self, value: bool): + self._enabled = value + + @property + def limits(self) -> tuple[float, float]: + return self._limits + + @limits.setter + def limits(self, value: tuple[float, float]): + self._limits = value + + def __contains__(self, item): + return item == self.name + + @property + def _hints(self): + return [self.name] + + def set_value(self, fake_value: float = 1.0) -> None: + """ + Setup fake value for device readout + Args: + fake_value(float): Desired fake value + """ + self.read_value = fake_value + + def describe(self) -> dict: + """ + Get the description of the device + Returns: + dict: Description of the device + """ + return self.description + + @property + def precision(self): + return 3 + + def set_read_value(self, value): + self.read_value = value + + def read(self, cached=False): + return self.signals + + def set_limits(self, limits): + self.limits = limits + + def move(self, value, relative=False): + """Simulates moving the device to a new position.""" + if relative: + self.read_value += value + else: + self.read_value = value + # Respect the limits + self.read_value = max(min(self.read_value, self.limits[1]), self.limits[0]) + + @property + def readback(self): + return MagicMock(get=MagicMock(return_value=self.read_value)) + + +class Positioner(FakePositioner): + """just placeholder for testing embedded isinstance check in DeviceCombobox""" + + def __init__(self, name="test", limits=None, read_value=1.0, enabled=True): + super().__init__(name, limits=limits, read_value=read_value, enabled=enabled) + + +class Device(FakeDevice): + """just placeholder for testing embedded isinstance check in DeviceCombobox""" + + def __init__(self, name, enabled=True): + super().__init__(name, enabled) + + +class DMMock: + def __init__(self): + self.devices = DeviceContainer() + self.enabled_devices = [device for device in self.devices if device.enabled] + + def add_devices(self, devices: list): + """ + Add devices to the DeviceContainer. + + Args: + devices (list): List of device instances to add. + """ + for device in devices: + self.devices[device.name] = device + + def get_bec_signals(self, signal_class_name: str): + """ + Emulate DeviceManager.get_bec_signals for unit-tests. + + For “AsyncSignal” we list every device whose readout_priority is + ReadoutPriority.ASYNC and build a minimal tuple + (device_name, signal_name, signal_info_dict) that matches the real + API shape used by Waveform._check_async_signal_found. + """ + signals: list[tuple[str, str, dict]] = [] + if signal_class_name != "AsyncSignal": + return signals + + for device in self.devices.values(): + if getattr(device, "readout_priority", None) == ReadoutPriority.ASYNC: + device_name = device.name + signal_name = device.name # primary signal in our mocks + signal_info = { + "component_name": signal_name, + "obj_name": signal_name, + "kind_str": "hinted", + "signal_class": signal_class_name, + "metadata": { + "connected": True, + "precision": None, + "read_access": True, + "timestamp": 0.0, + "write_access": True, + }, + } + signals.append((device_name, signal_name, signal_info)) + return signals + + +DEVICES = [ + FakePositioner("samx", limits=[-10, 10], read_value=2.0), + FakePositioner("samy", limits=[-5, 5], read_value=3.0), + FakePositioner("samz", limits=[-8, 8], read_value=4.0), + FakePositioner("aptrx", limits=None, read_value=4.0), + FakePositioner("aptry", limits=None, read_value=5.0), + FakeDevice("gauss_bpm"), + FakeDevice("gauss_adc1"), + FakeDevice("gauss_adc2"), + FakeDevice("gauss_adc3"), + FakeDevice("bpm4i"), + FakeDevice("bpm3a"), + FakeDevice("bpm3i"), + FakeDevice("eiger", readout_priority=ReadoutPriority.ASYNC), + FakeDevice("waveform1d"), + FakeDevice("async_device", readout_priority=ReadoutPriority.ASYNC), + Positioner("test", limits=[-10, 10], read_value=2.0), + Device("test_device"), +] + + +def check_remote_data_size(widget, plot_name, num_elements): + """ + Check if the remote data has the correct number of elements. + Used in the qtbot.waitUntil function. + """ + return len(widget.get_all_data()[plot_name]["x"]) == num_elements diff --git a/bec_widgets/tests/utils.py b/bec_widgets/tests/utils.py index bf4cdf0e2..74bf4cbc4 100644 --- a/bec_widgets/tests/utils.py +++ b/bec_widgets/tests/utils.py @@ -1,285 +1,76 @@ -from unittest.mock import MagicMock - -from bec_lib.device import Device as BECDevice -from bec_lib.device import Positioner as BECPositioner -from bec_lib.device import ReadoutPriority -from bec_lib.devicemanager import DeviceContainer - - -class FakeDevice(BECDevice): - """Fake minimal positioner class for testing.""" - - def __init__(self, name, enabled=True, readout_priority=ReadoutPriority.MONITORED): - super().__init__(name=name) - self._enabled = enabled - self.signals = {self.name: {"value": 1.0}} - self.description = {self.name: {"source": self.name, "dtype": "number", "shape": []}} - self._readout_priority = readout_priority - self._config = { - "readoutPriority": "baseline", - "deviceClass": "ophyd.Device", - "deviceConfig": {}, - "deviceTags": {"user device"}, - "enabled": enabled, - "readOnly": False, - "name": self.name, - } - - @property - def readout_priority(self): - return self._readout_priority - - @readout_priority.setter - def readout_priority(self, value): - self._readout_priority = value - - @property - def limits(self) -> tuple[float, float]: - return self._limits - - @limits.setter - def limits(self, value: tuple[float, float]): - self._limits = value - - def __contains__(self, item): - return item == self.name - - @property - def _hints(self): - return [self.name] - - def set_value(self, fake_value: float = 1.0) -> None: - """ - Setup fake value for device readout - Args: - fake_value(float): Desired fake value - """ - self.signals[self.name]["value"] = fake_value - - def describe(self) -> dict: - """ - Get the description of the device - Returns: - dict: Description of the device - """ - return self.description - - -class FakePositioner(BECPositioner): - - def __init__( - self, - name, - enabled=True, - limits=None, - read_value=1.0, - readout_priority=ReadoutPriority.MONITORED, - ): - super().__init__(name=name) - # self.limits = limits if limits is not None else [0.0, 0.0] - self.read_value = read_value - self.setpoint_value = read_value - self.motor_is_moving_value = 0 - self._enabled = enabled - self._limits = limits - self._readout_priority = readout_priority - self.signals = {self.name: {"value": 1.0}} - self.description = {self.name: {"source": self.name, "dtype": "number", "shape": []}} - self._config = { - "readoutPriority": "baseline", - "deviceClass": "ophyd_devices.SimPositioner", - "deviceConfig": {"delay": 1, "tolerance": 0.01, "update_frequency": 400}, - "deviceTags": {"user motors"}, - "enabled": enabled, - "readOnly": False, - "name": self.name, - } - self._info = { - "signals": { - "readback": { - "kind_str": "hinted", - "component_name": "readback", - "obj_name": self.name, - }, # hinted - "setpoint": { - "kind_str": "normal", - "component_name": "setpoint", - "obj_name": f"{self.name}_setpoint", - }, # normal - "velocity": { - "kind_str": "config", - "component_name": "velocity", - "obj_name": f"{self.name}_velocity", - }, # config - } - } - self.signals = { - self.name: {"value": self.read_value}, - f"{self.name}_setpoint": {"value": self.setpoint_value}, - f"{self.name}_motor_is_moving": {"value": self.motor_is_moving_value}, - } - - @property - def readout_priority(self): - return self._readout_priority - - @readout_priority.setter - def readout_priority(self, value): - self._readout_priority = value - - @property - def enabled(self) -> bool: - return self._enabled - - @enabled.setter - def enabled(self, value: bool): - self._enabled = value - - @property - def limits(self) -> tuple[float, float]: - return self._limits - - @limits.setter - def limits(self, value: tuple[float, float]): - self._limits = value - - def __contains__(self, item): - return item == self.name - - @property - def _hints(self): - return [self.name] - - def set_value(self, fake_value: float = 1.0) -> None: - """ - Setup fake value for device readout - Args: - fake_value(float): Desired fake value - """ - self.read_value = fake_value - - def describe(self) -> dict: - """ - Get the description of the device - Returns: - dict: Description of the device - """ - return self.description - - @property - def precision(self): - return 3 - - def set_read_value(self, value): - self.read_value = value - - def read(self, cached=False): - return self.signals - - def set_limits(self, limits): - self.limits = limits - - def move(self, value, relative=False): - """Simulates moving the device to a new position.""" - if relative: - self.read_value += value - else: - self.read_value = value - # Respect the limits - self.read_value = max(min(self.read_value, self.limits[1]), self.limits[0]) - - @property - def readback(self): - return MagicMock(get=MagicMock(return_value=self.read_value)) - - -class Positioner(FakePositioner): - """just placeholder for testing embedded isinstance check in DeviceCombobox""" - - def __init__(self, name="test", limits=None, read_value=1.0, enabled=True): - super().__init__(name, limits=limits, read_value=read_value, enabled=enabled) - - -class Device(FakeDevice): - """just placeholder for testing embedded isinstance check in DeviceCombobox""" - - def __init__(self, name, enabled=True): - super().__init__(name, enabled) - - -class DMMock: - def __init__(self): - self.devices = DeviceContainer() - self.enabled_devices = [device for device in self.devices if device.enabled] - - def add_devices(self, devices: list): - """ - Add devices to the DeviceContainer. - - Args: - devices (list): List of device instances to add. - """ - for device in devices: - self.devices[device.name] = device - - def get_bec_signals(self, signal_class_name: str): - """ - Emulate DeviceManager.get_bec_signals for unit-tests. - - For “AsyncSignal” we list every device whose readout_priority is - ReadoutPriority.ASYNC and build a minimal tuple - (device_name, signal_name, signal_info_dict) that matches the real - API shape used by Waveform._check_async_signal_found. - """ - signals: list[tuple[str, str, dict]] = [] - if signal_class_name != "AsyncSignal": - return signals - - for device in self.devices.values(): - if getattr(device, "readout_priority", None) == ReadoutPriority.ASYNC: - device_name = device.name - signal_name = device.name # primary signal in our mocks - signal_info = { - "component_name": signal_name, - "obj_name": signal_name, - "kind_str": "hinted", - "signal_class": signal_class_name, - "metadata": { - "connected": True, - "precision": None, - "read_access": True, - "timestamp": 0.0, - "write_access": True, - }, - } - signals.append((device_name, signal_name, signal_info)) - return signals - - -DEVICES = [ - FakePositioner("samx", limits=[-10, 10], read_value=2.0), - FakePositioner("samy", limits=[-5, 5], read_value=3.0), - FakePositioner("samz", limits=[-8, 8], read_value=4.0), - FakePositioner("aptrx", limits=None, read_value=4.0), - FakePositioner("aptry", limits=None, read_value=5.0), - FakeDevice("gauss_bpm"), - FakeDevice("gauss_adc1"), - FakeDevice("gauss_adc2"), - FakeDevice("gauss_adc3"), - FakeDevice("bpm4i"), - FakeDevice("bpm3a"), - FakeDevice("bpm3i"), - FakeDevice("eiger", readout_priority=ReadoutPriority.ASYNC), - FakeDevice("waveform1d"), - FakeDevice("async_device", readout_priority=ReadoutPriority.ASYNC), - Positioner("test", limits=[-10, 10], read_value=2.0), - Device("test_device"), -] - - -def check_remote_data_size(widget, plot_name, num_elements): - """ - Check if the remote data has the correct number of elements. - Used in the qtbot.waitUntil function. - """ - return len(widget.get_all_data()[plot_name]["x"]) == num_elements +from pytestqt.exceptions import TimeoutError as QtBotTimeoutError +from qtpy.QtCore import QTimer +from qtpy.QtWidgets import QApplication + +from bec_widgets.cli.rpc.rpc_register import RPCRegister +from bec_widgets.utils import bec_dispatcher as bec_dispatcher_module +from bec_widgets.utils import error_popups + + +class TestableQTimer(QTimer): + _instances: list[tuple[QTimer, str]] = [] + _current_test_name: str = "" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + TestableQTimer._instances.append((self, TestableQTimer._current_test_name)) + + @classmethod + def check_all_stopped(cls, qtbot): + def _is_done_or_deleted(t: QTimer): + try: + return not t.isActive() + except RuntimeError as e: + return "already deleted" in e.args[0] + + try: + qtbot.waitUntil(lambda: all(_is_done_or_deleted(timer) for timer, _ in cls._instances)) + except QtBotTimeoutError as exc: + active_timers = list(filter(lambda t: t[0].isActive(), cls._instances)) + (t.stop() for t, _ in cls._instances) + raise TimeoutError(f"Failed to stop all timers: {active_timers}") from exc + cls._instances = [] + + +def qapplication_fixture(qtbot, request, testable_qtimer_class): + yield + + if request.node.stash._storage.get("failed"): + print("Test failed, skipping cleanup checks") + return + + bec_dispatcher = bec_dispatcher_module.BECDispatcher() + bec_dispatcher.stop_cli_server() + + testable_qtimer_class.check_all_stopped(qtbot) + qapp = QApplication.instance() + qapp.processEvents() + if hasattr(qapp, "os_listener") and qapp.os_listener: + qapp.removeEventFilter(qapp.os_listener) + try: + qtbot.waitUntil(lambda: qapp.topLevelWidgets() == []) + except QtBotTimeoutError as exc: + raise TimeoutError(f"Failed to close all widgets: {qapp.topLevelWidgets()}") from exc + + +def rpc_register_fixture(): + try: + yield RPCRegister() + finally: + RPCRegister.reset_singleton() + + +def bec_dispatcher_fixture(threads_check): + bec_dispatcher = bec_dispatcher_module.BECDispatcher() + try: + yield bec_dispatcher + finally: + bec_dispatcher.disconnect_all() + bec_dispatcher.client.shutdown() + bec_dispatcher.stop_cli_server() + bec_dispatcher_module.BECDispatcher.reset_singleton() + + +def clean_singleton_fixture(): + error_popups._popup_utility_instance = None + yield diff --git a/tests/conftest.py b/tests/conftest.py index f9b084487..ada9d5804 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,33 +1,7 @@ import pytest import qtpy.QtCore -from pytestqt.exceptions import TimeoutError as QtBotTimeoutError -from qtpy.QtCore import QTimer - - -class TestableQTimer(QTimer): - _instances: list[tuple[QTimer, str]] = [] - _current_test_name: str = "" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - TestableQTimer._instances.append((self, TestableQTimer._current_test_name)) - - @classmethod - def check_all_stopped(cls, qtbot): - def _is_done_or_deleted(t: QTimer): - try: - return not t.isActive() - except RuntimeError as e: - return "already deleted" in e.args[0] - - try: - qtbot.waitUntil(lambda: all(_is_done_or_deleted(timer) for timer, _ in cls._instances)) - except QtBotTimeoutError as exc: - active_timers = list(filter(lambda t: t[0].isActive(), cls._instances)) - (t.stop() for t, _ in cls._instances) - raise TimeoutError(f"Failed to stop all timers: {active_timers}") from exc - cls._instances = [] +from bec_widgets.tests.utils import TestableQTimer # To support 'from qtpy.QtCore import QTimer' syntax we just replace this completely for the test session # see: https://docs.python.org/3/library/unittest.mock.html#where-to-patch diff --git a/tests/end-2-end/test_plotting_framework_e2e.py b/tests/end-2-end/test_plotting_framework_e2e.py index ebed9f250..5a6416ccb 100644 --- a/tests/end-2-end/test_plotting_framework_e2e.py +++ b/tests/end-2-end/test_plotting_framework_e2e.py @@ -6,7 +6,7 @@ from bec_widgets.cli.client import Image, MotorMap, MultiWaveform, ScatterWaveform, Waveform from bec_widgets.cli.rpc.rpc_base import RPCReference -from bec_widgets.tests.utils import check_remote_data_size +from bec_widgets.tests.fake_devices import check_remote_data_size def test_rpc_waveform1d_custom_curve(qtbot, connected_client_gui_obj): diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py index db5427dc3..2f2821e32 100644 --- a/tests/unit_tests/conftest.py +++ b/tests/unit_tests/conftest.py @@ -6,12 +6,9 @@ import pytest from bec_lib import messages from bec_lib.messages import _StoredDataInfo -from pytestqt.exceptions import TimeoutError as QtBotTimeoutError -from qtpy.QtWidgets import QApplication, QMessageBox +from qtpy.QtWidgets import QMessageBox -from bec_widgets.cli.rpc.rpc_register import RPCRegister -from bec_widgets.utils import bec_dispatcher as bec_dispatcher_module -from bec_widgets.utils import error_popups +from bec_widgets.tests import utils as test_utils @pytest.hookimpl(tryfirst=True, hookwrapper=True) @@ -25,49 +22,22 @@ def pytest_runtest_makereport(item, call): @pytest.fixture(autouse=True) def qapplication(qtbot, request, testable_qtimer_class): # pylint: disable=unused-argument - yield - - # if the test failed, we don't want to check for open widgets as - # it simply pollutes the output - if request.node.stash._storage.get("failed"): - print("Test failed, skipping cleanup checks") - return - bec_dispatcher = bec_dispatcher_module.BECDispatcher() - bec_dispatcher.stop_cli_server() - - testable_qtimer_class.check_all_stopped(qtbot) - qapp = QApplication.instance() - qapp.processEvents() - if hasattr(qapp, "os_listener") and qapp.os_listener: - qapp.removeEventFilter(qapp.os_listener) - try: - qtbot.waitUntil(lambda: qapp.topLevelWidgets() == []) - except QtBotTimeoutError as exc: - raise TimeoutError(f"Failed to close all widgets: {qapp.topLevelWidgets()}") from exc + yield from test_utils.qapplication_fixture(qtbot, request, testable_qtimer_class) @pytest.fixture(autouse=True) def rpc_register(): - yield RPCRegister() - RPCRegister.reset_singleton() + yield from test_utils.rpc_register_fixture() @pytest.fixture(autouse=True) def bec_dispatcher(threads_check): # pylint: disable=unused-argument - bec_dispatcher = bec_dispatcher_module.BECDispatcher() - yield bec_dispatcher - bec_dispatcher.disconnect_all() - # clean BEC client - bec_dispatcher.client.shutdown() - # stop the cli server - bec_dispatcher.stop_cli_server() - # reinitialize singleton for next test - bec_dispatcher_module.BECDispatcher.reset_singleton() + yield from test_utils.bec_dispatcher_fixture(threads_check) @pytest.fixture(autouse=True) def clean_singleton(): - error_popups._popup_utility_instance = None + yield from test_utils.clean_singleton_fixture() @pytest.fixture(autouse=True) diff --git a/tests/unit_tests/test_abort_button.py b/tests/unit_tests/test_abort_button.py index ca6c18a29..eea3c594e 100644 --- a/tests/unit_tests/test_abort_button.py +++ b/tests/unit_tests/test_abort_button.py @@ -2,10 +2,9 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.buttons.button_abort.button_abort import AbortButton -from .client_mocks import mocked_client - @pytest.fixture def abort_button(qtbot, mocked_client): diff --git a/tests/unit_tests/test_axis_settings.py b/tests/unit_tests/test_axis_settings.py index 88acc04b0..de0e0b2fb 100644 --- a/tests/unit_tests/test_axis_settings.py +++ b/tests/unit_tests/test_axis_settings.py @@ -1,9 +1,9 @@ import pytest from qtpy.QtWidgets import QDoubleSpinBox, QLineEdit +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.plot_base import PlotBase from bec_widgets.widgets.plots.setting_menus.axis_settings import AxisSettings -from tests.unit_tests.client_mocks import mocked_client from tests.unit_tests.conftest import create_widget diff --git a/tests/unit_tests/test_bec_connector.py b/tests/unit_tests/test_bec_connector.py index 62b88ca76..73426a8d4 100644 --- a/tests/unit_tests/test_bec_connector.py +++ b/tests/unit_tests/test_bec_connector.py @@ -5,11 +5,10 @@ from qtpy.QtCore import QObject from qtpy.QtWidgets import QApplication +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils import BECConnector from bec_widgets.utils.error_popups import SafeSlot as Slot -from .client_mocks import mocked_client - class BECConnectorQObject(BECConnector, QObject): ... diff --git a/tests/unit_tests/test_bec_dock.py b/tests/unit_tests/test_bec_dock.py index 2f117ae3f..8706f3be5 100644 --- a/tests/unit_tests/test_bec_dock.py +++ b/tests/unit_tests/test_bec_dock.py @@ -5,9 +5,9 @@ import pytest from bec_lib.endpoints import MessageEndpoints +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.containers.dock import BECDockArea -from .client_mocks import mocked_client from .test_bec_queue import bec_queue_msg_full diff --git a/tests/unit_tests/test_bec_queue.py b/tests/unit_tests/test_bec_queue.py index e3f0f7a11..6297cdaf0 100644 --- a/tests/unit_tests/test_bec_queue.py +++ b/tests/unit_tests/test_bec_queue.py @@ -1,10 +1,9 @@ import pytest from bec_lib import messages +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.services.bec_queue.bec_queue import BECQueue -from .client_mocks import mocked_client - @pytest.fixture def bec_queue_msg_full(): diff --git a/tests/unit_tests/test_bec_status_box.py b/tests/unit_tests/test_bec_status_box.py index 363602df1..3360c5d9d 100644 --- a/tests/unit_tests/test_bec_status_box.py +++ b/tests/unit_tests/test_bec_status_box.py @@ -4,13 +4,12 @@ import pytest from bec_lib.messages import BECStatus, ServiceMetricMessage, StatusMessage +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.services.bec_status_box.bec_status_box import ( BECServiceInfoContainer, BECStatusBox, ) -from .client_mocks import mocked_client - @pytest.fixture def service_status_fixture(): diff --git a/tests/unit_tests/test_color_utils.py b/tests/unit_tests/test_color_utils.py index 7628e8ae4..c4ac57c8f 100644 --- a/tests/unit_tests/test_color_utils.py +++ b/tests/unit_tests/test_color_utils.py @@ -4,11 +4,11 @@ from qtpy.QtGui import QColor from qtpy.QtWidgets import QVBoxLayout, QWidget +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils import Colors, ConnectionConfig from bec_widgets.utils.bec_widget import BECWidget from bec_widgets.utils.colors import apply_theme from bec_widgets.widgets.plots.waveform.curve import CurveConfig -from tests.unit_tests.client_mocks import mocked_client from tests.unit_tests.conftest import create_widget diff --git a/tests/unit_tests/test_crosshair.py b/tests/unit_tests/test_crosshair.py index e1461e70f..23cd438a9 100644 --- a/tests/unit_tests/test_crosshair.py +++ b/tests/unit_tests/test_crosshair.py @@ -4,10 +4,10 @@ from qtpy.QtCore import QPointF, Qt from qtpy.QtGui import QTransform +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils import Crosshair from bec_widgets.widgets.plots.image.image_item import ImageItem from bec_widgets.widgets.plots.waveform.waveform import Waveform -from tests.unit_tests.client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_curve_settings.py b/tests/unit_tests/test_curve_settings.py index 7c630bd28..fc0b9889c 100644 --- a/tests/unit_tests/test_curve_settings.py +++ b/tests/unit_tests/test_curve_settings.py @@ -6,13 +6,13 @@ from qtpy.QtGui import QValidator from qtpy.QtWidgets import QComboBox, QVBoxLayout +from bec_widgets.tests.client_mocks import dap_plugin_message, mocked_client, mocked_client_with_dap from bec_widgets.widgets.plots.waveform.settings.curve_settings.curve_setting import CurveSetting from bec_widgets.widgets.plots.waveform.settings.curve_settings.curve_tree import ( CurveTree, ScanIndexValidator, ) from bec_widgets.widgets.plots.waveform.waveform import Waveform -from tests.unit_tests.client_mocks import dap_plugin_message, mocked_client, mocked_client_with_dap from tests.unit_tests.conftest import create_widget ################################################## diff --git a/tests/unit_tests/test_dap_combobox.py b/tests/unit_tests/test_dap_combobox.py index 93cdfca0f..779c06802 100644 --- a/tests/unit_tests/test_dap_combobox.py +++ b/tests/unit_tests/test_dap_combobox.py @@ -1,8 +1,8 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.dap.dap_combo_box.dap_combo_box import DapComboBox -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_dark_mode_button.py b/tests/unit_tests/test_dark_mode_button.py index 3dca50a20..d141622da 100644 --- a/tests/unit_tests/test_dark_mode_button.py +++ b/tests/unit_tests/test_dark_mode_button.py @@ -4,12 +4,11 @@ from qtpy.QtCore import Qt from qtpy.QtWidgets import QApplication +# pylint: disable=unused-import +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils.colors import set_theme from bec_widgets.widgets.utility.visual.dark_mode_button.dark_mode_button import DarkModeButton -# pylint: disable=unused-import -from .client_mocks import mocked_client - # pylint: disable=redefined-outer-name diff --git a/tests/unit_tests/test_device_browser.py b/tests/unit_tests/test_device_browser.py index 3ef97af8a..de65f371f 100644 --- a/tests/unit_tests/test_device_browser.py +++ b/tests/unit_tests/test_device_browser.py @@ -6,6 +6,7 @@ from qtpy.QtCore import QPoint, Qt from qtpy.QtWidgets import QTabWidget +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.services.device_browser.device_browser import DeviceBrowser from bec_widgets.widgets.services.device_browser.device_item.device_config_form import ( DeviceConfigForm, @@ -14,8 +15,6 @@ SignalDisplay, ) -from .client_mocks import mocked_client - if TYPE_CHECKING: # pragma: no cover from qtpy.QtWidgets import QListWidgetItem diff --git a/tests/unit_tests/test_device_input_base.py b/tests/unit_tests/test_device_input_base.py index 02ae550d8..82390c986 100644 --- a/tests/unit_tests/test_device_input_base.py +++ b/tests/unit_tests/test_device_input_base.py @@ -4,13 +4,13 @@ from bec_lib.device import ReadoutPriority from qtpy.QtWidgets import QWidget +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.device_input.base_classes.device_input_base import ( BECDeviceFilter, DeviceInputBase, DeviceInputConfig, ) -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_device_input_widgets.py b/tests/unit_tests/test_device_input_widgets.py index f394a2973..54dc8171e 100644 --- a/tests/unit_tests/test_device_input_widgets.py +++ b/tests/unit_tests/test_device_input_widgets.py @@ -1,14 +1,13 @@ import pytest from bec_lib.device import ReadoutPriority +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter from bec_widgets.widgets.control.device_input.device_combobox.device_combobox import DeviceComboBox from bec_widgets.widgets.control.device_input.device_line_edit.device_line_edit import ( DeviceLineEdit, ) -from .client_mocks import mocked_client - @pytest.fixture def device_input_combobox(qtbot, mocked_client): diff --git a/tests/unit_tests/test_device_signal_input.py b/tests/unit_tests/test_device_signal_input.py index 65bffd238..a29e0514b 100644 --- a/tests/unit_tests/test_device_signal_input.py +++ b/tests/unit_tests/test_device_signal_input.py @@ -4,7 +4,7 @@ from bec_lib.device import Signal from qtpy.QtWidgets import QWidget -from bec_widgets.tests.utils import FakeDevice +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils.ophyd_kind_util import Kind from bec_widgets.widgets.control.device_input.base_classes.device_input_base import BECDeviceFilter from bec_widgets.widgets.control.device_input.base_classes.device_signal_input_base import ( @@ -16,7 +16,6 @@ SignalLineEdit, ) -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_filter_io.py b/tests/unit_tests/test_filter_io.py index 818faa7d5..d11f183e3 100644 --- a/tests/unit_tests/test_filter_io.py +++ b/tests/unit_tests/test_filter_io.py @@ -1,12 +1,12 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils.filter_io import FilterIO from bec_widgets.widgets.control.device_input.device_line_edit.device_line_edit import ( DeviceLineEdit, ) from bec_widgets.widgets.dap.dap_combo_box.dap_combo_box import DapComboBox -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_heatmap_widget.py b/tests/unit_tests/test_heatmap_widget.py index 66010a0e0..337374da9 100644 --- a/tests/unit_tests/test_heatmap_widget.py +++ b/tests/unit_tests/test_heatmap_widget.py @@ -5,12 +5,9 @@ from bec_lib import messages from bec_lib.scan_history import ScanHistory -from bec_widgets.widgets.plots.heatmap.heatmap import Heatmap, HeatmapConfig, HeatmapDeviceSignal - # pytest: disable=unused-import -from tests.unit_tests.client_mocks import mocked_client - -from .client_mocks import create_dummy_scan_item +from bec_widgets.tests.client_mocks import create_dummy_scan_item, mocked_client +from bec_widgets.widgets.plots.heatmap.heatmap import Heatmap, HeatmapConfig, HeatmapDeviceSignal @pytest.fixture diff --git a/tests/unit_tests/test_image_roi_tree.py b/tests/unit_tests/test_image_roi_tree.py index d00866b23..b2b3fb56c 100644 --- a/tests/unit_tests/test_image_roi_tree.py +++ b/tests/unit_tests/test_image_roi_tree.py @@ -4,10 +4,10 @@ import pytest from qtpy.QtCore import QPointF, Qt +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.image.image import Image from bec_widgets.widgets.plots.image.setting_widgets.image_roi_tree import ROIPropertyTree from bec_widgets.widgets.plots.roi.image_roi import CircularROI, RectangularROI -from tests.unit_tests.client_mocks import mocked_client from tests.unit_tests.conftest import create_widget diff --git a/tests/unit_tests/test_image_rois.py b/tests/unit_tests/test_image_rois.py index f667a37bd..c6f5e88db 100644 --- a/tests/unit_tests/test_image_rois.py +++ b/tests/unit_tests/test_image_rois.py @@ -5,6 +5,7 @@ import numpy as np import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.image.image import Image from bec_widgets.widgets.plots.roi.image_roi import ( CircularROI, @@ -12,7 +13,6 @@ RectangularROI, ROIController, ) -from tests.unit_tests.client_mocks import mocked_client from tests.unit_tests.conftest import create_widget diff --git a/tests/unit_tests/test_image_view_next_gen.py b/tests/unit_tests/test_image_view_next_gen.py index 78e34705b..de05d27dc 100644 --- a/tests/unit_tests/test_image_view_next_gen.py +++ b/tests/unit_tests/test_image_view_next_gen.py @@ -3,8 +3,8 @@ import pytest from qtpy.QtCore import QPointF +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.image.image import Image -from tests.unit_tests.client_mocks import mocked_client from tests.unit_tests.conftest import create_widget ################################################## diff --git a/tests/unit_tests/test_launch_window.py b/tests/unit_tests/test_launch_window.py index f23e51654..2b2e8264b 100644 --- a/tests/unit_tests/test_launch_window.py +++ b/tests/unit_tests/test_launch_window.py @@ -8,11 +8,10 @@ import bec_widgets from bec_widgets.applications.launch_window import LaunchWindow +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.containers.auto_update.auto_updates import AutoUpdates from bec_widgets.widgets.containers.main_window.main_window import BECMainWindow -from .client_mocks import mocked_client - base_path = os.path.dirname(bec_widgets.__file__) diff --git a/tests/unit_tests/test_lmfit_dialog.py b/tests/unit_tests/test_lmfit_dialog.py index 31d1418d0..1f319670f 100644 --- a/tests/unit_tests/test_lmfit_dialog.py +++ b/tests/unit_tests/test_lmfit_dialog.py @@ -3,9 +3,9 @@ import numpy as np import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.dap.lmfit_dialog.lmfit_dialog import LMFitDialog -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_logpanel.py b/tests/unit_tests/test_logpanel.py index b9d207319..5d840e278 100644 --- a/tests/unit_tests/test_logpanel.py +++ b/tests/unit_tests/test_logpanel.py @@ -8,18 +8,12 @@ import pytest from bec_lib.messages import LogMessage -from bec_lib.redis_connector import StreamMessage from qtpy.QtCore import QDateTime -from bec_widgets.widgets.utility.logpanel._util import ( - log_time, - replace_escapes, - simple_color_format, -) +from bec_widgets.tests.client_mocks import mocked_client +from bec_widgets.widgets.utility.logpanel._util import replace_escapes, simple_color_format from bec_widgets.widgets.utility.logpanel.logpanel import DEFAULT_LOG_COLORS, LogPanel -from .client_mocks import mocked_client - TEST_TABLE_STRING = "2025-01-15 15:57:18 | bec_server.scan_server.scan_queue | [INFO] | \n \x1b[3m primary queue / ScanQueueStatus.RUNNING \x1b[0m\n┏━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━┓\n┃\x1b[1m \x1b[0m\x1b[1m queue_id \x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1mscan_id\x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1mis_scan\x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1mtype\x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1mscan_numb…\x1b[0m\x1b[1m \x1b[0m┃\x1b[1m \x1b[0m\x1b[1mIQ status\x1b[0m\x1b[1m \x1b[0m┃\n┡━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━┩\n│ bbe50c82-6… │ None │ False │ mv │ None │ PENDING │\n└─────────────┴─────────┴─────────┴──────┴────────────┴───────────┘\n\n" TEST_LOG_MESSAGES = [ diff --git a/tests/unit_tests/test_main_widnow.py b/tests/unit_tests/test_main_widnow.py index fbbce59e1..b754a82b7 100644 --- a/tests/unit_tests/test_main_widnow.py +++ b/tests/unit_tests/test_main_widnow.py @@ -5,6 +5,7 @@ from qtpy.QtGui import QEnterEvent from qtpy.QtWidgets import QApplication, QFrame, QLabel +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.containers.main_window.addons.hover_widget import ( HoverWidget, WidgetTooltip, @@ -13,7 +14,6 @@ from bec_widgets.widgets.containers.main_window.addons.web_links import BECWebLinksMixin from bec_widgets.widgets.containers.main_window.main_window import BECMainWindow -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_motor_map_next_gen.py b/tests/unit_tests/test_motor_map_next_gen.py index 277b3be17..1a5accc40 100644 --- a/tests/unit_tests/test_motor_map_next_gen.py +++ b/tests/unit_tests/test_motor_map_next_gen.py @@ -1,8 +1,8 @@ import numpy as np import pyqtgraph as pg +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.motor_map.motor_map import MotorMap -from tests.unit_tests.client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_multi_waveform_next_gen.py b/tests/unit_tests/test_multi_waveform_next_gen.py index 0b7ae96f3..1c28d5969 100644 --- a/tests/unit_tests/test_multi_waveform_next_gen.py +++ b/tests/unit_tests/test_multi_waveform_next_gen.py @@ -1,7 +1,7 @@ import numpy as np +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.multi_waveform.multi_waveform import MultiWaveform -from tests.unit_tests.client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_notifications.py b/tests/unit_tests/test_notifications.py index 3ef5f5a32..f851932ef 100644 --- a/tests/unit_tests/test_notifications.py +++ b/tests/unit_tests/test_notifications.py @@ -1,6 +1,7 @@ import pytest from qtpy import QtCore, QtGui, QtWidgets +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils.error_popups import ErrorPopupUtility from bec_widgets.widgets.containers.main_window.addons.notification_center.notification_banner import ( DARK_PALETTE, @@ -13,8 +14,6 @@ SeverityKind, ) -from .client_mocks import mocked_client - @pytest.fixture def toast(qtbot): diff --git a/tests/unit_tests/test_plot_base_next_gen.py b/tests/unit_tests/test_plot_base_next_gen.py index c1918d658..e07f6585a 100644 --- a/tests/unit_tests/test_plot_base_next_gen.py +++ b/tests/unit_tests/test_plot_base_next_gen.py @@ -1,8 +1,8 @@ import numpy as np +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.plot_base import PlotBase, UIMode -from .client_mocks import mocked_client from .conftest import create_widget # pylint: disable=unused-import diff --git a/tests/unit_tests/test_positioner_box.py b/tests/unit_tests/test_positioner_box.py index 531a494e4..0ddd31adc 100644 --- a/tests/unit_tests/test_positioner_box.py +++ b/tests/unit_tests/test_positioner_box.py @@ -7,7 +7,8 @@ from qtpy.QtGui import QValidator from qtpy.QtWidgets import QPushButton -from bec_widgets.tests.utils import Positioner +from bec_widgets.tests.client_mocks import mocked_client +from bec_widgets.tests.fake_devices import Positioner from bec_widgets.widgets.control.device_control.positioner_box import ( PositionerBox, PositionerControlLine, @@ -16,7 +17,6 @@ DeviceLineEdit, ) -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_positioner_box_2d.py b/tests/unit_tests/test_positioner_box_2d.py index 40535ab09..17cebd9b7 100644 --- a/tests/unit_tests/test_positioner_box_2d.py +++ b/tests/unit_tests/test_positioner_box_2d.py @@ -2,9 +2,9 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.device_control.positioner_box import PositionerBox2D -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_reset_button.py b/tests/unit_tests/test_reset_button.py index 1d0836c97..a4f3ae81b 100644 --- a/tests/unit_tests/test_reset_button.py +++ b/tests/unit_tests/test_reset_button.py @@ -5,10 +5,9 @@ import pytest from qtpy.QtWidgets import QMessageBox +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.buttons.button_reset.button_reset import ResetButton -from .client_mocks import mocked_client - @pytest.fixture def reset_button(qtbot, mocked_client): diff --git a/tests/unit_tests/test_resume_button.py b/tests/unit_tests/test_resume_button.py index b080ab605..5fda80b46 100644 --- a/tests/unit_tests/test_resume_button.py +++ b/tests/unit_tests/test_resume_button.py @@ -2,10 +2,9 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.buttons.button_resume.button_resume import ResumeButton -from .client_mocks import mocked_client - @pytest.fixture def resume_button(qtbot, mocked_client): diff --git a/tests/unit_tests/test_ring_progress_bar.py b/tests/unit_tests/test_ring_progress_bar.py index 9ff95baf6..2032af0be 100644 --- a/tests/unit_tests/test_ring_progress_bar.py +++ b/tests/unit_tests/test_ring_progress_bar.py @@ -4,13 +4,12 @@ from bec_lib.endpoints import MessageEndpoints from pydantic import ValidationError +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils import Colors from bec_widgets.widgets.progress.ring_progress_bar import RingProgressBar from bec_widgets.widgets.progress.ring_progress_bar.ring import ProgressbarConnections, RingConfig from bec_widgets.widgets.progress.ring_progress_bar.ring_progress_bar import RingProgressBarConfig -from .client_mocks import mocked_client - @pytest.fixture def ring_progress_bar(qtbot, mocked_client): diff --git a/tests/unit_tests/test_scan_control.py b/tests/unit_tests/test_scan_control.py index 30ce317d5..be928f323 100644 --- a/tests/unit_tests/test_scan_control.py +++ b/tests/unit_tests/test_scan_control.py @@ -7,12 +7,11 @@ from bec_lib.messages import AvailableResourceMessage, ScanHistoryMessage from qtpy.QtCore import QModelIndex, Qt +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils.forms_from_types.items import StrFormItem from bec_widgets.utils.widget_io import WidgetIO from bec_widgets.widgets.control.scan_control import ScanControl -from .client_mocks import mocked_client - # pylint: disable=no-member # pylint: disable=missing-function-docstring # pylint: disable=redefined-outer-name diff --git a/tests/unit_tests/test_scan_history_browser.py b/tests/unit_tests/test_scan_history_browser.py index 4ddf24e70..0615c0c91 100644 --- a/tests/unit_tests/test_scan_history_browser.py +++ b/tests/unit_tests/test_scan_history_browser.py @@ -2,10 +2,9 @@ import pytest from bec_lib.messages import ScanHistoryMessage, _StoredDataInfo -from pytestqt import qtbot from qtpy import QtCore -from bec_widgets.utils.colors import get_accent_colors +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.services.scan_history_browser.components import ( ScanHistoryDeviceViewer, ScanHistoryMetadataViewer, @@ -15,8 +14,6 @@ ScanHistoryBrowser, ) -from .client_mocks import mocked_client - @pytest.fixture def scan_history_msg(): diff --git a/tests/unit_tests/test_scan_progress_bar.py b/tests/unit_tests/test_scan_progress_bar.py index a531d4f20..9a1b41d61 100644 --- a/tests/unit_tests/test_scan_progress_bar.py +++ b/tests/unit_tests/test_scan_progress_bar.py @@ -4,6 +4,7 @@ import pytest from bec_lib import messages +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.progress.bec_progressbar.bec_progressbar import ( BECProgressBar, ProgressState, @@ -14,8 +15,6 @@ ScanProgressBar, ) -from .client_mocks import mocked_client - @pytest.fixture def scan_progressbar(qtbot, mocked_client): diff --git a/tests/unit_tests/test_scatter_waveform.py b/tests/unit_tests/test_scatter_waveform.py index 8476ebe5f..c70366df3 100644 --- a/tests/unit_tests/test_scatter_waveform.py +++ b/tests/unit_tests/test_scatter_waveform.py @@ -2,12 +2,12 @@ import numpy as np +from bec_widgets.tests.client_mocks import create_dummy_scan_item, mocked_client from bec_widgets.widgets.plots.scatter_waveform.scatter_curve import ( ScatterCurveConfig, ScatterDeviceSignal, ) from bec_widgets.widgets.plots.scatter_waveform.scatter_waveform import ScatterWaveform -from tests.unit_tests.client_mocks import create_dummy_scan_item, mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_signal_label.py b/tests/unit_tests/test_signal_label.py index 38df89b37..9f1e9e0da 100644 --- a/tests/unit_tests/test_signal_label.py +++ b/tests/unit_tests/test_signal_label.py @@ -4,15 +4,14 @@ import pytest from qtpy import QtCore -from qtpy.QtWidgets import QDialogButtonBox, QLabel +from qtpy.QtWidgets import QDialogButtonBox +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.device_input.base_classes.device_signal_input_base import ( DeviceSignalInputBaseConfig, ) from bec_widgets.widgets.utility.signal_label.signal_label import ChoiceDialog, SignalLabel -from .client_mocks import mocked_client - SAMX_INFO_DICT = { "signals": { "readback": { diff --git a/tests/unit_tests/test_stop_button.py b/tests/unit_tests/test_stop_button.py index b5ecdc1f9..deafeed75 100644 --- a/tests/unit_tests/test_stop_button.py +++ b/tests/unit_tests/test_stop_button.py @@ -2,10 +2,9 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.control.buttons.stop_button.stop_button import StopButton -from .client_mocks import mocked_client - @pytest.fixture def stop_button(qtbot, mocked_client): diff --git a/tests/unit_tests/test_text_box_widget.py b/tests/unit_tests/test_text_box_widget.py index 65f0f719d..d419c932b 100644 --- a/tests/unit_tests/test_text_box_widget.py +++ b/tests/unit_tests/test_text_box_widget.py @@ -1,9 +1,8 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.editors.text_box.text_box import DEFAULT_TEXT, TextBox -from .client_mocks import mocked_client - @pytest.fixture def text_box_widget(qtbot, mocked_client): diff --git a/tests/unit_tests/test_utils_bec_signal_proxy.py b/tests/unit_tests/test_utils_bec_signal_proxy.py index e8fd50fb1..dd01ef143 100644 --- a/tests/unit_tests/test_utils_bec_signal_proxy.py +++ b/tests/unit_tests/test_utils_bec_signal_proxy.py @@ -3,10 +3,10 @@ import pyqtgraph as pg import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.utils.bec_signal_proxy import BECSignalProxy from bec_widgets.widgets.dap.dap_combo_box.dap_combo_box import DapComboBox -from .client_mocks import mocked_client from .conftest import create_widget diff --git a/tests/unit_tests/test_utils_plot_indicators.py b/tests/unit_tests/test_utils_plot_indicators.py index 6e1b491b2..2ac010580 100644 --- a/tests/unit_tests/test_utils_plot_indicators.py +++ b/tests/unit_tests/test_utils_plot_indicators.py @@ -1,10 +1,9 @@ import pytest from qtpy.QtCore import QPointF +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.plots.waveform.waveform import Waveform -from .client_mocks import mocked_client - @pytest.fixture def plot_widget_with_arrow_item(qtbot, mocked_client): diff --git a/tests/unit_tests/test_vscode_widget.py b/tests/unit_tests/test_vscode_widget.py index d4210cba1..95630e4c3 100644 --- a/tests/unit_tests/test_vscode_widget.py +++ b/tests/unit_tests/test_vscode_widget.py @@ -5,10 +5,9 @@ import pytest +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.editors.vscode.vscode import VSCodeEditor -from .client_mocks import mocked_client - @pytest.fixture def vscode_widget(qtbot, mocked_client): diff --git a/tests/unit_tests/test_waveform.py b/tests/unit_tests/test_waveform.py index 01c48f6d9..c13babcd4 100644 --- a/tests/unit_tests/test_waveform.py +++ b/tests/unit_tests/test_waveform.py @@ -12,13 +12,7 @@ from qtpy.QtCore import QTimer from qtpy.QtWidgets import QApplication, QCheckBox, QDialog, QDialogButtonBox, QDoubleSpinBox -from bec_widgets.widgets.plots.plot_base import UIMode -from bec_widgets.widgets.plots.waveform.curve import DeviceSignal -from bec_widgets.widgets.plots.waveform.waveform import Waveform -from bec_widgets.widgets.services.scan_history_browser.scan_history_browser import ( - ScanHistoryBrowser, -) -from tests.unit_tests.client_mocks import ( +from bec_widgets.tests.client_mocks import ( DummyData, create_dummy_scan_item, dap_plugin_message, @@ -26,6 +20,12 @@ mocked_client, mocked_client_with_dap, ) +from bec_widgets.widgets.plots.plot_base import UIMode +from bec_widgets.widgets.plots.waveform.curve import DeviceSignal +from bec_widgets.widgets.plots.waveform.waveform import Waveform +from bec_widgets.widgets.services.scan_history_browser.scan_history_browser import ( + ScanHistoryBrowser, +) from .conftest import create_widget diff --git a/tests/unit_tests/test_web_console.py b/tests/unit_tests/test_web_console.py index 3da2f9a0e..1a8cc482e 100644 --- a/tests/unit_tests/test_web_console.py +++ b/tests/unit_tests/test_web_console.py @@ -3,10 +3,9 @@ import pytest from qtpy.QtNetwork import QAuthenticator +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.editors.web_console.web_console import WebConsole, _web_console_registry -from .client_mocks import mocked_client - @pytest.fixture def console_widget(qtbot, mocked_client): diff --git a/tests/unit_tests/test_website_widget.py b/tests/unit_tests/test_website_widget.py index 83909474a..f72b5bf35 100644 --- a/tests/unit_tests/test_website_widget.py +++ b/tests/unit_tests/test_website_widget.py @@ -1,10 +1,9 @@ import pytest from qtpy.QtCore import QUrl +from bec_widgets.tests.client_mocks import mocked_client from bec_widgets.widgets.editors.website.website import WebsiteWidget -from .client_mocks import mocked_client - @pytest.fixture def website_widget(qtbot, mocked_client):