1
0
mirror of https://github.com/home-assistant/core.git synced 2026-06-03 14:14:40 +01:00
Files
core/tests/components/tradfri/conftest.py
T

107 lines
3.1 KiB
Python

"""Common tradfri test fixtures."""
from collections.abc import Callable, Generator
import json
from typing import Any
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from pytradfri.command import Command
from pytradfri.const import ATTR_FIRMWARE_VERSION, ATTR_GATEWAY_ID
from pytradfri.device import Device
from pytradfri.gateway import Gateway
from homeassistant.components.tradfri.const import DOMAIN
from . import GATEWAY_ID, TRADFRI_PATH
from .common import CommandStore
from tests.common import load_fixture
@pytest.fixture
def mock_entry_setup() -> Generator[AsyncMock]:
"""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", autouse=True)
def mock_gateway_fixture(command_store: CommandStore) -> Gateway:
"""Mock a Tradfri gateway."""
gateway = Gateway()
command_store.register_response(
gateway.get_gateway_info(),
{ATTR_GATEWAY_ID: GATEWAY_ID, ATTR_FIRMWARE_VERSION: "1.2.1234"},
)
command_store.register_response(
gateway.get_devices(),
[],
)
return gateway
@pytest.fixture(name="command_store", autouse=True)
def command_store_fixture() -> CommandStore:
"""Store commands and command responses for the API."""
return CommandStore([], {})
@pytest.fixture(name="mock_api")
def mock_api_fixture(
command_store: CommandStore,
) -> Callable[[Command | list[Command], float | None], Any | None]:
"""Mock api."""
async def api(
command: Command | list[Command], timeout: float | None = None
) -> Any | None:
"""Mock api function."""
if isinstance(command, list):
result = []
for cmd in command:
command_store.sent_commands.append(cmd)
result.append(command_store.process_command(cmd))
return result
command_store.sent_commands.append(command)
return command_store.process_command(command)
return api
@pytest.fixture(autouse=True)
def mock_api_factory(
mock_api: Callable[[Command | list[Command], float | None], Any | None],
) -> Generator[MagicMock]:
"""Mock pytradfri api factory."""
with patch(f"{TRADFRI_PATH}.APIFactory", autospec=True) as factory_class:
factory = factory_class.return_value
factory_class.init.return_value = factory
factory.request = mock_api
yield factory
@pytest.fixture
def device(
command_store: CommandStore, mock_gateway: Gateway, request: pytest.FixtureRequest
) -> Device:
"""Return a device."""
device_response: dict[str, Any] = json.loads(request.getfixturevalue(request.param))
device = Device(device_response)
command_store.register_device(mock_gateway, device.raw)
return device
@pytest.fixture(scope="package")
def air_purifier() -> str:
"""Return an air purifier response."""
return load_fixture("air_purifier.json", DOMAIN)
@pytest.fixture(scope="package")
def blind() -> str:
"""Return a blind response."""
return load_fixture("blind.json", DOMAIN)