121 lines
3.3 KiB
Python
121 lines
3.3 KiB
Python
"""Common tradfri test fixtures."""
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Generator
|
|
import json
|
|
from typing import Any
|
|
from unittest.mock import MagicMock, Mock, patch
|
|
|
|
import pytest
|
|
from pytradfri.device import Device
|
|
from pytradfri.device.air_purifier import AirPurifier
|
|
from pytradfri.device.blind import Blind
|
|
|
|
from homeassistant.components.tradfri.const import DOMAIN
|
|
|
|
from . import GATEWAY_ID, TRADFRI_PATH
|
|
|
|
from tests.common import load_fixture
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_gateway_info():
|
|
"""Mock get_gateway_info."""
|
|
with patch(f"{TRADFRI_PATH}.config_flow.get_gateway_info") as gateway_info:
|
|
yield gateway_info
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_entry_setup():
|
|
"""Mock entry setup."""
|
|
with patch(f"{TRADFRI_PATH}.async_setup_entry") as mock_setup:
|
|
mock_setup.return_value = True
|
|
yield mock_setup
|
|
|
|
|
|
@pytest.fixture(name="mock_gateway")
|
|
def mock_gateway_fixture():
|
|
"""Mock a Tradfri gateway."""
|
|
|
|
def get_devices():
|
|
"""Return mock devices."""
|
|
return gateway.mock_devices
|
|
|
|
def get_groups():
|
|
"""Return mock groups."""
|
|
return gateway.mock_groups
|
|
|
|
gateway_info = Mock(id=GATEWAY_ID, firmware_version="1.2.1234")
|
|
|
|
def get_gateway_info():
|
|
"""Return mock gateway info."""
|
|
return gateway_info
|
|
|
|
gateway = Mock(
|
|
get_devices=get_devices,
|
|
get_groups=get_groups,
|
|
get_gateway_info=get_gateway_info,
|
|
mock_commands=[],
|
|
mock_devices=[],
|
|
mock_groups=[],
|
|
mock_responses=[],
|
|
)
|
|
with patch(f"{TRADFRI_PATH}.Gateway", return_value=gateway), patch(
|
|
f"{TRADFRI_PATH}.config_flow.Gateway", return_value=gateway
|
|
):
|
|
yield gateway
|
|
|
|
|
|
@pytest.fixture(name="mock_api")
|
|
def mock_api_fixture(mock_gateway):
|
|
"""Mock api."""
|
|
|
|
async def api(command, timeout=None):
|
|
"""Mock api function."""
|
|
# Store the data for "real" command objects.
|
|
if hasattr(command, "_data") and not isinstance(command, Mock):
|
|
mock_gateway.mock_responses.append(command._data)
|
|
mock_gateway.mock_commands.append(command)
|
|
return command
|
|
|
|
return api
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_api_factory(mock_api) -> Generator[MagicMock, None, None]:
|
|
"""Mock pytradfri api factory."""
|
|
with patch(f"{TRADFRI_PATH}.APIFactory", autospec=True) as factory:
|
|
factory.init.return_value = factory.return_value
|
|
factory.return_value.request = mock_api
|
|
yield factory.return_value
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def air_purifier_response() -> dict[str, Any]:
|
|
"""Return an air purifier response."""
|
|
return json.loads(load_fixture("air_purifier.json", DOMAIN))
|
|
|
|
|
|
@pytest.fixture
|
|
def air_purifier(air_purifier_response: dict[str, Any]) -> AirPurifier:
|
|
"""Return air purifier."""
|
|
device = Device(air_purifier_response)
|
|
air_purifier_control = device.air_purifier_control
|
|
assert air_purifier_control
|
|
return air_purifier_control.air_purifiers[0]
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def blind_response() -> dict[str, Any]:
|
|
"""Return a blind response."""
|
|
return json.loads(load_fixture("blind.json", DOMAIN))
|
|
|
|
|
|
@pytest.fixture
|
|
def blind(blind_response: dict[str, Any]) -> Blind:
|
|
"""Return blind."""
|
|
device = Device(blind_response)
|
|
blind_control = device.blind_control
|
|
assert blind_control
|
|
return blind_control.blinds[0]
|