1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-02 08:26:41 +01:00
Files
core/tests/components/smarla/conftest.py
2026-03-13 14:29:37 +01:00

155 lines
4.8 KiB
Python

"""Configuration for smarla tests."""
from __future__ import annotations
from collections.abc import Generator
from unittest.mock import AsyncMock, MagicMock, patch
from pysmarlaapi import AuthToken
from pysmarlaapi.federwiege.services.classes import Property, Service
from pysmarlaapi.federwiege.services.types import SpringStatus, UpdateStatus
import pytest
from homeassistant.components.smarla.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER
from .const import MOCK_ACCESS_TOKEN_JSON, MOCK_USER_INPUT
from tests.common import MockConfigEntry
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Create a mock config entry."""
return MockConfigEntry(
domain=DOMAIN,
unique_id=MOCK_ACCESS_TOKEN_JSON["serialNumber"],
source=SOURCE_USER,
data=MOCK_USER_INPUT,
)
@pytest.fixture
def mock_setup_entry() -> Generator:
"""Override async_setup_entry."""
with patch("homeassistant.components.smarla.async_setup_entry", return_value=True):
yield
@pytest.fixture
def mock_connection() -> Generator[MagicMock]:
"""Patch Connection object."""
with (
patch(
"homeassistant.components.smarla.config_flow.Connection", autospec=True
) as mock_connection,
patch(
"homeassistant.components.smarla.Connection",
mock_connection,
),
):
connection = mock_connection.return_value
def mocked_connection(url, token_b64: str):
connection.token = AuthToken.from_base64(token_b64)
return connection
mock_connection.side_effect = mocked_connection
yield connection
def _mock_babywiege_service() -> MagicMock:
mock_babywiege_service = MagicMock(spec=Service)
mock_babywiege_service.props = {
"swing_active": MagicMock(spec=Property),
"smart_mode": MagicMock(spec=Property),
"intensity": MagicMock(spec=Property),
}
mock_babywiege_service.props["swing_active"].get.return_value = False
mock_babywiege_service.props["smart_mode"].get.return_value = False
mock_babywiege_service.props["intensity"].get.return_value = 1
return mock_babywiege_service
def _mock_analyser_service() -> MagicMock:
mock_analyser_service = MagicMock(spec=Service)
mock_analyser_service.props = {
"oscillation": MagicMock(spec=Property),
"activity": MagicMock(spec=Property),
"swing_count": MagicMock(spec=Property),
"spring_status": MagicMock(spec=Property),
}
mock_analyser_service.props["oscillation"].get.return_value = [0, 0]
mock_analyser_service.props["activity"].get.return_value = 0
mock_analyser_service.props["swing_count"].get.return_value = 0
mock_analyser_service.props["spring_status"].get.return_value = SpringStatus.UNKNOWN
return mock_analyser_service
def _mock_info_service() -> MagicMock:
mock_info_service = MagicMock(spec=Service)
mock_info_service.props = {
"version": MagicMock(spec=Property),
"total_swing_time": MagicMock(spec=Property),
}
mock_info_service.props["version"].get.return_value = "1.0.0"
mock_info_service.props["total_swing_time"].get.return_value = 0
return mock_info_service
def _mock_system_service() -> MagicMock:
mock_system_service = MagicMock(spec=Service)
mock_system_service.props = {
"firmware_update": MagicMock(spec=Property),
"firmware_update_status": MagicMock(spec=Property),
"send_diagnostic_data": MagicMock(spec=Property),
}
mock_system_service.props["firmware_update"].get.return_value = 0
mock_system_service.props[
"firmware_update_status"
].get.return_value = UpdateStatus.IDLE
return mock_system_service
@pytest.fixture
def mock_federwiege_cls(mock_connection: MagicMock) -> Generator[MagicMock]:
"""Mock the Federwiege class."""
with patch(
"homeassistant.components.smarla.Federwiege", autospec=True
) as mock_federwiege_cls:
mock_federwiege = mock_federwiege_cls.return_value
mock_federwiege.serial_number = MOCK_ACCESS_TOKEN_JSON["serialNumber"]
mock_federwiege.available = True
mock_federwiege.check_firmware_update = AsyncMock(return_value=("1.0.0", ""))
mock_federwiege.services = {
"babywiege": _mock_babywiege_service(),
"analyser": _mock_analyser_service(),
"info": _mock_info_service(),
"system": _mock_system_service(),
}
mock_federwiege.get_property = MagicMock(
side_effect=lambda service, prop: mock_federwiege.services[service].props[
prop
]
)
yield mock_federwiege_cls
@pytest.fixture
def mock_federwiege(mock_federwiege_cls: MagicMock) -> Generator[MagicMock]:
"""Mock the Federwiege instance."""
return mock_federwiege_cls.return_value