mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 11:41:49 +02:00
test(tests/client_mocks): added general mock_client with container for fake devices for testing
This commit is contained in:
67
tests/client_mocks.py
Normal file
67
tests/client_mocks.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
|
|
||||||
|
class FakeDevice:
|
||||||
|
"""Fake minimal positioner class for testing."""
|
||||||
|
|
||||||
|
def __init__(self, name, enabled=True):
|
||||||
|
self.name = name
|
||||||
|
self.enabled = enabled
|
||||||
|
self.signals = {self.name: {"value": 1.0}}
|
||||||
|
self.description = {self.name: {"source": self.name}}
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
def get_mocked_device(device_name: str):
|
||||||
|
"""
|
||||||
|
Helper function to mock the devices
|
||||||
|
Args:
|
||||||
|
device_name(str): Name of the device to mock
|
||||||
|
"""
|
||||||
|
return FakeDevice(name=device_name, enabled=True)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
def mocked_client():
|
||||||
|
# Create a dictionary of mocked devices
|
||||||
|
device_names = ["samx", "gauss_bpm", "gauss_adc1", "gauss_adc2", "gauss_adc3", "bpm4i"]
|
||||||
|
mocked_devices = {name: get_mocked_device(name) for name in device_names}
|
||||||
|
|
||||||
|
# Create a MagicMock object
|
||||||
|
client = MagicMock()
|
||||||
|
|
||||||
|
# Mock the device_manager.devices attribute
|
||||||
|
client.device_manager.devices = MagicMock()
|
||||||
|
client.device_manager.devices.__getitem__.side_effect = lambda x: mocked_devices.get(x)
|
||||||
|
client.device_manager.devices.__contains__.side_effect = lambda x: x in mocked_devices
|
||||||
|
|
||||||
|
# Set each device as an attribute of the mock
|
||||||
|
for name, device in mocked_devices.items():
|
||||||
|
setattr(client.device_manager.devices, name, device)
|
||||||
|
|
||||||
|
return client
|
Reference in New Issue
Block a user