1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-01 11:46:40 +01:00
Files
core/tests/components/imou/conftest.py
T
Imou-OpenPlatform 96c286f2e0 Add Imou integration (#161412)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Joostlek <joostlek@outlook.com>
2026-06-03 11:18:31 +02:00

90 lines
2.8 KiB
Python

"""Test configuration and fixtures for Imou integration."""
from collections.abc import Generator
from unittest.mock import AsyncMock, MagicMock, patch
from pyimouapi.ha_device import ImouHaDevice
import pytest
from homeassistant.components.imou.const import CONF_APP_ID, DOMAIN
from homeassistant.core import HomeAssistant
from .const import CONFIG_ENTRY_DATA, DEFAULT_MOCK_DEVICES
from tests.common import MockConfigEntry
PATCH_IMOU_OPENAPI_CLIENT = "homeassistant.components.imou.ImouOpenApiClient"
PATCH_CONFIG_FLOW_IMOU_OPENAPI_CLIENT = (
"homeassistant.components.imou.config_flow.ImouOpenApiClient"
)
PATCH_IMOU_HA_DEVICE_MANAGER = "homeassistant.components.imou.ImouHaDeviceManager"
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return the default mocked config entry."""
return MockConfigEntry(
title="Imou",
domain=DOMAIN,
data=CONFIG_ENTRY_DATA,
unique_id=CONFIG_ENTRY_DATA[CONF_APP_ID],
entry_id="test_entry_id",
)
@pytest.fixture
def mock_imou_openapi_client() -> Generator[AsyncMock]:
"""Mock ImouOpenApiClient for config flow and setup entry."""
with (
patch(
PATCH_IMOU_OPENAPI_CLIENT,
autospec=True,
) as mock_client,
patch(
PATCH_CONFIG_FLOW_IMOU_OPENAPI_CLIENT,
new=mock_client,
),
):
yield mock_client.return_value
@pytest.fixture
def imou_mock_devices(request: pytest.FixtureRequest) -> list[ImouHaDevice]:
"""Devices returned by ImouHaDeviceManager.async_get_devices (override via indirect)."""
return getattr(request, "param", DEFAULT_MOCK_DEVICES)
@pytest.fixture
def mock_imou_ha_device_manager(
imou_mock_devices: list[ImouHaDevice],
) -> Generator[MagicMock]:
"""Mock ImouHaDeviceManager with a default device list."""
with patch(PATCH_IMOU_HA_DEVICE_MANAGER, autospec=True) as mock_manager:
device_manager = mock_manager.return_value
device_manager.async_get_devices.return_value = imou_mock_devices
yield device_manager
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry so config flow tests do not load the full integration."""
with patch(
"homeassistant.components.imou.async_setup_entry",
return_value=True,
) as mock_setup:
yield mock_setup
@pytest.fixture
async def init_integration(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_imou_openapi_client: AsyncMock,
mock_imou_ha_device_manager: MagicMock,
) -> MagicMock:
"""Set up Imou with mocked library clients; returns the HA device manager mock."""
mock_config_entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
return mock_imou_ha_device_manager