1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-01 03:36:05 +01:00
Files
core/tests/components/hypontech/conftest.py
T
Hai-Nam Nguyen 70a54d333c Add OEM support to Hypontech (#173472)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2026-06-12 11:59:07 +02:00

115 lines
3.6 KiB
Python

"""Common fixtures for the Hypontech Cloud tests."""
from collections.abc import Generator
from typing import Any, cast
from unittest.mock import AsyncMock, patch
from hyponcloud import (
AdminInfo,
InverterData,
OverviewData,
PlantData,
PlantMonitorData,
)
import pytest
from homeassistant.components.hypontech.const import DOMAIN
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.hypontech.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return a mock config entry."""
return MockConfigEntry(
domain=DOMAIN,
data={
CONF_USERNAME: "test@example.com",
CONF_PASSWORD: "test-password",
},
unique_id="2123456789123456789",
)
@pytest.fixture
def load_overview_fixture() -> OverviewData:
"""Load overview fixture data."""
data = load_json_object_fixture("overview.json", DOMAIN)
return OverviewData.from_dict(data["data"])
@pytest.fixture
def load_plant_list_fixture() -> list[PlantData]:
"""Load plant list fixture data."""
data = load_json_object_fixture("plant_list.json", DOMAIN)
return [PlantData.from_dict(item) for item in data["data"]]
@pytest.fixture
def load_inverters_fixture() -> list[InverterData]:
"""Load inverters fixture data."""
data = load_json_object_fixture("inverters.json", DOMAIN)
return [InverterData.from_dict(item) for item in data["data"]]
@pytest.fixture
def load_monitor_fixture() -> dict[str, PlantMonitorData]:
"""Load plant monitor fixture data."""
data = load_json_object_fixture("monitor.json", DOMAIN)
return {
plant_id: PlantMonitorData.from_dict(cast(dict[str, Any], monitor))
for plant_id, monitor in data.items()
}
@pytest.fixture
def load_admin_info_fixture() -> AdminInfo:
"""Load admin info fixture data."""
data = load_json_object_fixture("admin_info.json", DOMAIN)
admin_data = data["data"]
# Flatten nested "info" object into the main data dict
if "info" in admin_data and isinstance(admin_data["info"], dict):
info_data = admin_data.pop("info")
admin_data.update(info_data)
return AdminInfo.from_dict(admin_data)
@pytest.fixture
def mock_hyponcloud(
load_overview_fixture: OverviewData,
load_plant_list_fixture: list[PlantData],
load_inverters_fixture: list[InverterData],
load_admin_info_fixture: AdminInfo,
load_monitor_fixture: dict[str, PlantMonitorData],
) -> Generator[AsyncMock]:
"""Mock HyponCloud."""
with (
patch(
"homeassistant.components.hypontech.HyponCloud", autospec=True
) as mock_hyponcloud,
patch(
"homeassistant.components.hypontech.config_flow.HyponCloud",
new=mock_hyponcloud,
),
):
mock_client = mock_hyponcloud.return_value
mock_client.get_admin_info.return_value = load_admin_info_fixture
mock_client.get_list.return_value = load_plant_list_fixture
mock_client.get_overview.return_value = load_overview_fixture
mock_client.get_inverters.return_value = load_inverters_fixture
mock_client.get_monitor.side_effect = lambda plant_id, *args, **kwargs: (
load_monitor_fixture[plant_id]
)
mock_client.hyponcloud_class = mock_hyponcloud
yield mock_client