mirror of
https://github.com/home-assistant/core.git
synced 2025-05-14 02:49:15 +00:00
122 lines
3.6 KiB
Python
122 lines
3.6 KiB
Python
"""Fixtures for the Sensibo integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import AsyncGenerator, Generator
|
|
import json
|
|
from typing import Any
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
from pysensibo import SensiboClient, SensiboData
|
|
import pytest
|
|
|
|
from homeassistant.components.sensibo.const import DOMAIN, PLATFORMS
|
|
from homeassistant.const import Platform
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from . import ENTRY_CONFIG
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_setup_entry() -> Generator[AsyncMock]:
|
|
"""Override async_setup_entry."""
|
|
with patch(
|
|
"homeassistant.components.sensibo.async_setup_entry", return_value=True
|
|
) as mock_setup_entry:
|
|
yield mock_setup_entry
|
|
|
|
|
|
@pytest.fixture(name="load_platforms")
|
|
async def patch_platform_constant() -> list[Platform]:
|
|
"""Return list of platforms to load."""
|
|
return PLATFORMS
|
|
|
|
|
|
@pytest.fixture
|
|
async def load_int(
|
|
hass: HomeAssistant,
|
|
mock_client: SensiboClient,
|
|
load_platforms: list[Platform],
|
|
) -> MockConfigEntry:
|
|
"""Set up the Sensibo integration."""
|
|
config_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
data=ENTRY_CONFIG,
|
|
entry_id="1",
|
|
unique_id="firstnamelastname",
|
|
version=2,
|
|
)
|
|
|
|
config_entry.add_to_hass(hass)
|
|
|
|
with patch("homeassistant.components.sensibo.PLATFORMS", load_platforms):
|
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
return config_entry
|
|
|
|
|
|
@pytest.fixture(name="mock_client")
|
|
async def get_client(
|
|
hass: HomeAssistant,
|
|
get_data: tuple[SensiboData, dict[str, Any], dict[str, Any]],
|
|
) -> AsyncGenerator[MagicMock]:
|
|
"""Mock SensiboClient."""
|
|
|
|
with (
|
|
patch(
|
|
"homeassistant.components.sensibo.coordinator.SensiboClient",
|
|
autospec=True,
|
|
) as mock_client,
|
|
patch("homeassistant.components.sensibo.util.SensiboClient", new=mock_client),
|
|
):
|
|
client = mock_client.return_value
|
|
client.async_get_devices_data.return_value = get_data[0]
|
|
client.async_get_me.return_value = get_data[1]
|
|
client.async_get_devices.return_value = get_data[2]
|
|
yield client
|
|
|
|
|
|
@pytest.fixture(name="get_data")
|
|
async def get_data_from_library(
|
|
hass: HomeAssistant,
|
|
aioclient_mock: AiohttpClientMocker,
|
|
load_json: tuple[dict[str, Any], dict[str, Any]],
|
|
) -> AsyncGenerator[tuple[SensiboData, dict[str, Any], dict[str, Any]]]:
|
|
"""Get data from api."""
|
|
client = SensiboClient("1234567890", aioclient_mock.create_session(hass.loop))
|
|
with patch.object(
|
|
client,
|
|
"async_get_me",
|
|
return_value=load_json[1],
|
|
):
|
|
me = await client.async_get_me()
|
|
with patch.object(
|
|
client,
|
|
"async_get_devices",
|
|
return_value=load_json[0],
|
|
):
|
|
data = await client.async_get_devices_data()
|
|
raw_data = await client.async_get_devices()
|
|
yield (data, me, raw_data)
|
|
await client._session.close()
|
|
|
|
|
|
@pytest.fixture(name="load_json")
|
|
def load_json_from_fixture(
|
|
load_data: tuple[str, str],
|
|
) -> tuple[dict[str, Any], dict[str, Any]]:
|
|
"""Load fixture with json data and return."""
|
|
json_data: dict[str, Any] = json.loads(load_data[0])
|
|
json_me: dict[str, Any] = json.loads(load_data[1])
|
|
return (json_data, json_me)
|
|
|
|
|
|
@pytest.fixture(name="load_data", scope="package")
|
|
def load_data_from_fixture() -> tuple[str, str]:
|
|
"""Load fixture with fixture data and return."""
|
|
return (load_fixture("data.json", "sensibo"), load_fixture("me.json", "sensibo"))
|