diff --git a/tests/end-2-end/__init__.py b/tests/end-2-end/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/end-2-end/conftest.py b/tests/end-2-end/conftest.py new file mode 100644 index 00000000..fe4b8e44 --- /dev/null +++ b/tests/end-2-end/conftest.py @@ -0,0 +1,25 @@ +import pytest + +from bec_widgets.cli.rpc_register import RPCRegister +from bec_widgets.cli.server import BECWidgetsCLIServer +from bec_widgets.utils import BECDispatcher + + +@pytest.fixture(autouse=True) +def rpc_register(): + yield RPCRegister() + RPCRegister.reset_singleton() + + +@pytest.fixture +def rpc_server(qtbot, bec_client_lib, threads_check): + dispatcher = BECDispatcher(client=bec_client_lib) # Has to init singleton with fixture client + server = BECWidgetsCLIServer(gui_id="figure") + qtbot.addWidget(server.fig) + qtbot.waitExposed(server.fig) + qtbot.wait(1000) # 1s long to wait until gui is ready + yield server + dispatcher.disconnect_all() + server.client.shutdown() + server.shutdown() + dispatcher.reset_singleton() diff --git a/tests/end-2-end/test_bec_figure_rpc.py b/tests/end-2-end/test_bec_figure_rpc_e2e.py similarity index 90% rename from tests/end-2-end/test_bec_figure_rpc.py rename to tests/end-2-end/test_bec_figure_rpc_e2e.py index 431b3877..e64d47f6 100644 --- a/tests/end-2-end/test_bec_figure_rpc.py +++ b/tests/end-2-end/test_bec_figure_rpc_e2e.py @@ -3,22 +3,6 @@ import pytest from bec_lib import MessageEndpoints from bec_widgets.cli.client import BECFigure, BECImageShow, BECMotorMap, BECWaveform -from bec_widgets.cli.server import BECWidgetsCLIServer -from bec_widgets.utils import BECDispatcher - - -@pytest.fixture -def rpc_server(qtbot, bec_client_lib, threads_check): - dispatcher = BECDispatcher(client=bec_client_lib) # Has to init singleton with fixture client - server = BECWidgetsCLIServer(gui_id="id_test") - qtbot.addWidget(server.fig) - qtbot.waitExposed(server.fig) - qtbot.wait(1000) # 1s long to wait until gui is ready - yield server - dispatcher.disconnect_all() - server.client.shutdown() - server.shutdown() - dispatcher.reset_singleton() def test_rpc_waveform1d_custom_curve(rpc_server, qtbot): diff --git a/tests/end-2-end/test_rpc_register_e2e.py b/tests/end-2-end/test_rpc_register_e2e.py new file mode 100644 index 00000000..e86a8d17 --- /dev/null +++ b/tests/end-2-end/test_rpc_register_e2e.py @@ -0,0 +1,50 @@ +import pytest + +from bec_widgets.cli.client import BECFigure, BECImageShow, BECMotorMap, BECWaveform + + +def find_deepest_value(d: dict): + """ + Recursively find the deepest value in a dictionary + Args: + d(dict): Dictionary to search + + Returns: + The deepest value in the dictionary. + """ + if isinstance(d, dict): + if d: + return find_deepest_value(next(iter(d.values()))) + return d + + +def test_rpc_register_list_connections(rpc_server, rpc_register, qtbot): + fig = BECFigure(rpc_server.gui_id) + fig_server = rpc_server.fig + + plt = fig.plot("samx", "bpm4i") + im = fig.image("eiger") + motor_map = fig.motor_map("samx", "samy") + plt_z = fig.add_plot("samx", "samy", "bpm4i") + + all_connections = rpc_register.list_all_connections() + + # Construct dict of all rpc items manually + all_subwidgets_expected = dict(fig_server.widgets) + curve_1D = find_deepest_value(fig_server.widgets[plt.rpc_id]._curves_data) + curve_2D = find_deepest_value(fig_server.widgets[plt_z.rpc_id]._curves_data) + curves_expected = {curve_1D.rpc_id: curve_1D, curve_2D.rpc_id: curve_2D} + fig_expected = {fig.rpc_id: fig_server} + image_item_expected = { + fig_server.widgets[im.rpc_id].images[0].rpc_id: fig_server.widgets[im.rpc_id].images[0] + } + + all_connections_expected = { + **all_subwidgets_expected, + **curves_expected, + **fig_expected, + **image_item_expected, + } + + assert len(all_connections) == 8 + assert all_connections == all_connections_expected