0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

test: bugfix to prohibit leackage of mock

This commit is contained in:
2024-06-24 13:17:52 +02:00
parent 5c11fde0a9
commit 4348ed1bb2
2 changed files with 127 additions and 154 deletions

View File

@ -11,7 +11,7 @@ import qdarktheme
from bec_lib.utils.import_utils import lazy_import_from from bec_lib.utils.import_utils import lazy_import_from
from pydantic import BaseModel, Field, field_validator from pydantic import BaseModel, Field, field_validator
from qtpy.QtCore import QObject, QTimer, Signal, Slot from qtpy.QtCore import QObject, QTimer, Signal, Slot
from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem
from bec_widgets.utils.bec_connector import BECConnector, ConnectionConfig from bec_widgets.utils.bec_connector import BECConnector, ConnectionConfig
from bec_widgets.widgets.bec_status_box.status_item import StatusItem from bec_widgets.widgets.bec_status_box.status_item import StatusItem
@ -108,6 +108,7 @@ class BECStatusBox(BECConnector, QTreeWidget):
service_name: str = "BEC Server", service_name: str = "BEC Server",
client: BECClient = None, client: BECClient = None,
config: BECStatusBoxConfig | dict = None, config: BECStatusBoxConfig | dict = None,
bec_service_status_mixin: BECServiceStatusMixin = None,
gui_id: str = None, gui_id: str = None,
): ):
if config is None: if config is None:
@ -124,7 +125,10 @@ class BECStatusBox(BECConnector, QTreeWidget):
self.bec_service_info_container = {} self.bec_service_info_container = {}
self.tree_items = {} self.tree_items = {}
self.tree_top_item = None self.tree_top_item = None
self.bec_service_status = BECServiceStatusMixin(client=self.client)
if not bec_service_status_mixin:
bec_service_status_mixin = BECServiceStatusMixin(client=self.client)
self.bec_service_status = bec_service_status_mixin
self.init_ui() self.init_ui()
self.bec_service_status.services_update.connect(self.update_service_status) self.bec_service_status.services_update.connect(self.update_service_status)

View File

@ -1,152 +1,121 @@
# import re from unittest import mock
# from unittest import mock
# import pytest
# import pytest from bec_lib.messages import BECStatus, ServiceMetricMessage, StatusMessage
# from bec_lib.messages import BECStatus, ServiceMetricMessage, StatusMessage
# from qtpy.QtCore import QMetaMethod from bec_widgets.widgets.bec_status_box.bec_status_box import BECServiceInfoContainer, BECStatusBox
#
# from bec_widgets.widgets.bec_status_box.bec_status_box import BECServiceInfoContainer, BECStatusBox from .client_mocks import mocked_client
#
# from .client_mocks import mocked_client
# @pytest.fixture
# def service_status_fixture():
# @pytest.fixture yield mock.MagicMock()
# def status_box(qtbot, mocked_client):
# with mock.patch(
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin" @pytest.fixture
# ) as mock_service_status_mixin: def status_box(qtbot, mocked_client, service_status_fixture):
# widget = BECStatusBox(client=mocked_client) widget = BECStatusBox(
# qtbot.addWidget(widget) client=mocked_client, service_name="test", bec_service_status_mixin=service_status_fixture
# qtbot.waitExposed(widget) )
# yield widget qtbot.addWidget(widget)
# qtbot.waitExposed(widget)
# yield widget
# def test_status_box_init(qtbot, mocked_client):
# with mock.patch(
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin" def test_update_top_item(status_box):
# ) as mock_service_status_mixin: assert status_box.children()[0].children()[0].config.status == "IDLE"
# name = "my test" status_box.update_top_item_status(status="RUNNING")
# widget = BECStatusBox(parent=None, service_name=name, client=mocked_client) assert status_box.bec_service_info_container["test"].status == "RUNNING"
# qtbot.addWidget(widget) assert status_box.children()[0].children()[0].config.status == "RUNNING"
# qtbot.waitExposed(widget)
# assert widget.headerItem().DontShowIndicator.value == 1
# assert widget.children()[0].children()[0].config.service_name == name def test_create_status_widget(status_box):
# name = "test_service"
# status = BECStatus.IDLE
# def test_update_top_item(qtbot, mocked_client): info = {"test": "test"}
# with ( metrics = {"metric": "test_metric"}
# mock.patch( item = status_box._create_status_widget(name, status, info, metrics)
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin" assert item.config.service_name == name
# ) as mock_service_status_mixin, assert item.config.status == status.name
# mock.patch( assert item.config.info == info
# "bec_widgets.widgets.bec_status_box.status_item.StatusItem.update_config" assert item.config.metrics == metrics
# ) as mock_update,
# ):
# name = "my test" def test_bec_service_container(status_box):
# widget = BECStatusBox(parent=None, service_name=name, client=mocked_client) name = "test_service"
# qtbot.addWidget(widget) status = BECStatus.IDLE
# qtbot.waitExposed(widget) info = {"test": "test"}
# widget.update_top_item_status(status="RUNNING") metrics = {"metric": "test_metric"}
# assert widget.bec_service_info_container[name].status == "RUNNING" expected_return = BECServiceInfoContainer(
# assert mock_update.call_args == mock.call(widget.bec_service_info_container[name].dict()) service_name=name, status=status, info=info, metrics=metrics
# )
# assert status_box.service_name in status_box.bec_service_info_container
# def test_create_status_widget(status_box): assert len(status_box.bec_service_info_container) == 1
# name = "test_service" status_box._update_bec_service_container(name, status, info, metrics)
# status = BECStatus.IDLE assert len(status_box.bec_service_info_container) == 2
# info = {"test": "test"} assert status_box.bec_service_info_container[name] == expected_return
# metrics = {"metric": "test_metric"}
# item = status_box._create_status_widget(name, status, info, metrics)
# assert item.config.service_name == name def test_add_tree_item(status_box):
# assert item.config.status == status.name name = "test_service"
# assert item.config.info == info status = BECStatus.IDLE
# assert item.config.metrics == metrics info = {"test": "test"}
# metrics = {"metric": "test_metric"}
# assert len(status_box.children()[0].children()) == 1
# def test_bec_service_container(status_box): status_box.add_tree_item(name, status, info, metrics)
# name = "test_service" assert len(status_box.children()[0].children()) == 2
# status = BECStatus.IDLE assert name in status_box.tree_items
# info = {"test": "test"}
# metrics = {"metric": "test_metric"}
# expected_return = BECServiceInfoContainer( def test_update_service_status(status_box):
# service_name=name, status=status, info=info, metrics=metrics """Also checks check redundant tree items"""
# ) name = "test_service"
# assert status_box.service_name in status_box.bec_service_info_container status = BECStatus.IDLE
# assert len(status_box.bec_service_info_container) == 1 info = {"test": "test"}
# status_box._update_bec_service_container(name, status, info, metrics) metrics = {"metric": "test_metric"}
# assert len(status_box.bec_service_info_container) == 2 status_box.add_tree_item(name, status, info, {})
# assert status_box.bec_service_info_container[name] == expected_return not_connected_name = "invalid_service"
# status_box.add_tree_item(not_connected_name, status, info, metrics)
#
# def test_add_tree_item(status_box): services_status = {name: StatusMessage(name=name, status=status, info=info)}
# name = "test_service" services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
# status = BECStatus.IDLE
# info = {"test": "test"} with mock.patch.object(status_box, "update_core_services", return_value=services_status):
# metrics = {"metric": "test_metric"} assert not_connected_name in status_box.tree_items
# assert len(status_box.children()[0].children()) == 1 status_box.update_service_status(services_status, services_metrics)
# status_box.add_tree_item(name, status, info, metrics) assert status_box.tree_items[name][1].config.metrics == metrics
# assert len(status_box.children()[0].children()) == 2 assert not_connected_name not in status_box.tree_items
# assert name in status_box.tree_items
#
# def test_update_core_services(status_box):
# def test_update_service_status(status_box): status_box.CORE_SERVICES = ["test_service"]
# """Also checks check redundant tree items""" name = "test_service"
# name = "test_service" status = BECStatus.RUNNING
# status = BECStatus.IDLE info = {"test": "test"}
# info = {"test": "test"} metrics = {"metric": "test_metric"}
# metrics = {"metric": "test_metric"} services_status = {name: StatusMessage(name=name, status=status, info=info)}
# status_box.add_tree_item(name, status, info, {}) services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
# not_connected_name = "invalid_service"
# status_box.add_tree_item(not_connected_name, status, info, metrics) status_box.update_core_services(services_status, services_metrics)
# assert status_box.children()[0].children()[0].config.status == "RUNNING"
# services_status = {name: StatusMessage(name=name, status=status, info=info)} assert status_box.tree_items[name][1].config.metrics == metrics
# services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
# status = BECStatus.IDLE
# with mock.patch.object(status_box, "update_core_services", return_value=services_status): services_status = {name: StatusMessage(name=name, status=status, info=info)}
# assert not_connected_name in status_box.tree_items services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
# status_box.update_service_status(services_status, services_metrics) status_box.update_core_services(services_status, services_metrics)
# assert status_box.tree_items[name][1].config.metrics == metrics assert status_box.children()[0].children()[0].config.status == "ERROR"
# assert not_connected_name not in status_box.tree_items assert status_box.tree_items[name][1].config.metrics == metrics
#
#
# def test_update_core_services(qtbot, mocked_client): def test_double_click_item(status_box):
# with ( name = "test_service"
# mock.patch( status = BECStatus.IDLE
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin" info = {"test": "test"}
# ) as mock_service_status_mixin, metrics = {"MyData": "This should be shown nicely"}
# mock.patch( status_box.add_tree_item(name, status, info, metrics)
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECStatusBox.update_top_item_status" item, status_item = status_box.tree_items[name]
# ) as mock_update, with mock.patch.object(status_item, "show_popup") as mock_show_popup:
# ): status_box.itemDoubleClicked.emit(item, 0)
# name = "my test" assert mock_show_popup.call_count == 1
# status_box = BECStatusBox(parent=None, service_name=name, client=mocked_client)
# qtbot.addWidget(status_box)
# qtbot.waitExposed(status_box)
# status_box.CORE_SERVICES = ["test_service"]
# name = "test_service"
# status = BECStatus.RUNNING
# info = {"test": "test"}
# metrics = {"metric": "test_metric"}
# services_status = {name: StatusMessage(name=name, status=status, info=info)}
# services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
#
# status_box.update_core_services(services_status, services_metrics)
# assert mock_update.call_args == mock.call(status.name)
#
# status = BECStatus.IDLE
# services_status = {name: StatusMessage(name=name, status=status, info=info)}
# services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
# status_box.update_core_services(services_status, services_metrics)
# assert mock_update.call_args == mock.call("ERROR")
#
#
# def test_double_click_item(status_box):
# name = "test_service"
# status = BECStatus.IDLE
# info = {"test": "test"}
# metrics = {"MyData": "This should be shown nicely"}
# status_box.add_tree_item(name, status, info, metrics)
# item, status_item = status_box.tree_items[name]
# with mock.patch.object(status_item, "show_popup") as mock_show_popup:
# status_box.itemDoubleClicked.emit(item, 0)
# assert mock_show_popup.call_count == 1