1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-03 12:46:09 +01:00
Files

135 lines
3.7 KiB
Python

"""Common fixtures for the Aqvify tests."""
from collections.abc import Generator
from typing import Any
from unittest.mock import AsyncMock, MagicMock, patch
from pyaqvify import (
AqvifyAccount,
AqvifyDeviceData,
AqvifyDevices,
AqvifyHourAggregatedValueList,
)
import pytest
from homeassistant.components.aqvify.const import DOMAIN
from homeassistant.core import HomeAssistant
from tests.common import (
MockConfigEntry,
async_load_json_array_fixture,
async_load_json_object_fixture,
)
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.aqvify.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def mock_config_entry(hass: HomeAssistant) -> MockConfigEntry:
"""Return the default mocked config entry."""
config_entry = MockConfigEntry(
minor_version=1,
domain=DOMAIN,
title="Aqvify test",
data={"api_key": "fake_api_key"},
entry_id="aqvify_test",
unique_id="test_account_id",
)
config_entry.add_to_hass(hass)
return config_entry
@pytest.fixture
def mock_aqvify_client(
device_fixture: list[dict[str, Any]],
device_data_fixture: dict[str, Any],
device_aggregated_data_fixture: list[dict[str, Any]],
account_fixture: dict[str, Any],
) -> Generator[MagicMock]:
"""Mock an Aqvify client."""
with (
patch(
"homeassistant.components.aqvify.AqvifyAPI",
autospec=True,
) as mock_client,
patch(
"homeassistant.components.aqvify.config_flow.AqvifyAPI",
new=mock_client,
),
):
client = mock_client.return_value
client.async_get_account_id.return_value = AqvifyAccount(account_fixture)
client.async_get_devices.return_value = AqvifyDevices(device_fixture)
client.async_get_device_latest_data.return_value = AqvifyDeviceData(
device_data_fixture
)
client.async_get_hour_aggregation.return_value = AqvifyHourAggregatedValueList(
device_aggregated_data_fixture
)
yield client
@pytest.fixture(scope="package")
def load_device_file() -> str:
"""Fixture for loading device file."""
return "default_devices.json"
@pytest.fixture(scope="package")
def load_device_data_file() -> str:
"""Fixture for loading device data file."""
return "default_device_data.json"
@pytest.fixture(scope="package")
def load_account_file() -> str:
"""Fixture for loading account file."""
return "default_account.json"
@pytest.fixture(scope="package")
def load_aggr_data_file() -> str:
"""Fixture for loading aggregated data file."""
return "default_aggregated.json"
@pytest.fixture
async def device_fixture(
hass: HomeAssistant, load_device_file: str
) -> list[dict[str, Any]]:
"""Fixture for device."""
return await async_load_json_array_fixture(hass, load_device_file, DOMAIN)
@pytest.fixture
async def device_data_fixture(
hass: HomeAssistant, load_device_data_file: str
) -> dict[str, Any]:
"""Fixture for device data."""
return await async_load_json_object_fixture(hass, load_device_data_file, DOMAIN)
@pytest.fixture
async def account_fixture(
hass: HomeAssistant, load_account_file: str
) -> dict[str, Any]:
"""Fixture for account data."""
return await async_load_json_object_fixture(hass, load_account_file, DOMAIN)
@pytest.fixture
async def device_aggregated_data_fixture(
hass: HomeAssistant, load_aggr_data_file: str
) -> list[dict[str, Any]]:
"""Fixture for aggregated datapoint."""
return await async_load_json_array_fixture(hass, load_aggr_data_file, DOMAIN)