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:
@ -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)
|
||||||
|
@ -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
|
|
||||||
|
Reference in New Issue
Block a user