1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-25 12:27:07 +00:00
Files
core/tests/components/hypontech/conftest.py
Hai-Nam Nguyen 52d645e4bf Hypontech micro invertors support via Hyponcloud (#159442)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-16 23:38:44 +01:00

93 lines
2.9 KiB
Python

"""Common fixtures for the Hypontech Cloud tests."""
from collections.abc import Generator
from unittest.mock import AsyncMock, patch
from hyponcloud import AdminInfo, InverterData, OverviewData, PlantData
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_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,
) -> 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
yield mock_client