87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
"""Unit tests for ServiceManager initialization and config application."""
|
|
|
|
from typing import Any, cast
|
|
from types import SimpleNamespace
|
|
from unittest.mock import Mock
|
|
|
|
from config.schema import (
|
|
BridgeConfig,
|
|
DeviceConfig,
|
|
DeviceStatusConfig,
|
|
EventQueueConfig,
|
|
LoggingConfig,
|
|
MQTTConfig,
|
|
OdooConfig,
|
|
SessionConfig,
|
|
)
|
|
from core.service_manager import ServiceManager
|
|
|
|
|
|
def _build_config(use_mock: bool = True) -> BridgeConfig:
|
|
return BridgeConfig(
|
|
mqtt=MQTTConfig(broker="localhost", port=1883, client_id="bridge"),
|
|
odoo=OdooConfig(
|
|
base_url="http://odoo:8069",
|
|
database="odoo-db",
|
|
username="admin",
|
|
api_key="secret",
|
|
use_mock=use_mock,
|
|
mock_failure_rate=0.1,
|
|
),
|
|
logging=LoggingConfig(),
|
|
event_queue=EventQueueConfig(),
|
|
device_status=DeviceStatusConfig(enabled=False),
|
|
devices=[
|
|
DeviceConfig(
|
|
device_id="device-1",
|
|
mqtt_topic="shelly/device-1/status",
|
|
parser_type="shelly_pm",
|
|
machine_name="Machine 1",
|
|
session_config=SessionConfig(
|
|
strategy="power_threshold",
|
|
standby_threshold_w=5,
|
|
working_threshold_w=20,
|
|
start_debounce_s=3,
|
|
stop_debounce_s=15,
|
|
message_timeout_s=20,
|
|
heartbeat_interval_s=60,
|
|
),
|
|
)
|
|
],
|
|
)
|
|
|
|
|
|
def test_initialize_odoo_client_returns_none_without_config():
|
|
manager = ServiceManager(config=None, logger=Mock(), bridge_port=8080, bridge_token=None)
|
|
|
|
client = manager.initialize_odoo_client()
|
|
|
|
assert client is None
|
|
|
|
|
|
def test_initialize_odoo_client_returns_mock_client_when_enabled():
|
|
manager = ServiceManager(config=_build_config(use_mock=True), logger=Mock(), bridge_port=8080, bridge_token=None)
|
|
|
|
client = manager.initialize_odoo_client()
|
|
|
|
assert client is not None
|
|
assert client.__class__.__name__ == "MockOdooClient"
|
|
|
|
|
|
def test_apply_initial_config_updates_config_server_state_and_device_manager():
|
|
manager = ServiceManager(config=_build_config(use_mock=True), logger=Mock(), bridge_port=8080, bridge_token=None)
|
|
manager.device_manager = Mock()
|
|
manager.config_server = cast(
|
|
Any,
|
|
SimpleNamespace(current_config=None, device_count=0, subscription_count=0),
|
|
)
|
|
|
|
manager.apply_initial_config()
|
|
|
|
manager.device_manager.apply_config.assert_called_once()
|
|
assert manager.config_server is not None
|
|
assert manager.config_server.current_config is not None
|
|
assert manager.config_server.current_config.mqtt is not None
|
|
assert manager.config_server.device_count == 1
|
|
assert manager.config_server.subscription_count == 1
|