Files
core/tests/components/izone/conftest.py
JP-Ellis 2830221820 Allow control on missing izone thermometer (#155826)
Signed-off-by: JP-Ellis <josh@jpellis.me>
Co-authored-by: Joostlek <joostlek@outlook.com>
2026-01-26 18:34:56 +01:00

120 lines
3.3 KiB
Python

"""Fixtures for iZone integration tests."""
from collections.abc import AsyncGenerator
from unittest.mock import AsyncMock, Mock, patch
from pizone import Controller, Zone
import pytest
from homeassistant.components.izone.const import IZONE
from tests.common import MockConfigEntry
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Create a mock config entry for iZone."""
return MockConfigEntry(
domain=IZONE,
title="iZone",
data={},
entry_id="test_entry_id",
)
@pytest.fixture
def mock_pizone_discovery_service() -> Mock:
"""Create a mock pizone discovery service."""
disco = Mock()
disco.controllers = {}
disco.start_discovery = AsyncMock()
disco.close = AsyncMock()
return disco
def create_mock_controller(
device_uid: str = "test_controller_123",
sys_type: str = "iZone310",
zones_total: int = 4,
zone_ctrl: int = 1,
ras_mode: str = "master",
free_air_enabled: bool = False,
) -> Mock:
"""Create a mock Controller with configurable parameters."""
controller = Mock(spec=Controller)
controller.device_uid = device_uid
controller.sys_type = sys_type
controller.zones_total = zones_total
controller.zone_ctrl = zone_ctrl
controller.ras_mode = ras_mode
controller.free_air_enabled = free_air_enabled
controller.free_air = False
controller.is_on = True
controller.mode = Controller.Mode.COOL
controller.temp_setpoint = 24.0
controller.temp_return = 22.0
controller.temp_supply = 16.0
controller.temp_min = 15.0
controller.temp_max = 30.0
controller.fan = Controller.Fan.MED
controller.fan_modes = [
Controller.Fan.LOW,
Controller.Fan.MED,
Controller.Fan.HIGH,
Controller.Fan.AUTO,
]
return controller
def create_mock_zone(
index: int = 0,
name: str = "Zone",
temp_current: float | None = 22.5,
temp_setpoint: float = 24.0,
) -> Mock:
"""Create a mock Zone with configurable parameters."""
zone = Mock(spec=Zone)
zone.index = index
zone.name = name
zone.type = Zone.Type.AUTO
zone.mode = Zone.Mode.AUTO
zone.temp_current = temp_current
zone.temp_setpoint = temp_setpoint
zone.airflow_min = 0
zone.airflow_max = 100
zone.is_on = True
return zone
@pytest.fixture
async def mock_discovery(
mock_controller: AsyncMock, mock_zones: list[AsyncMock]
) -> AsyncGenerator[AsyncMock]:
"""Create a mock discovery service with one controller and zones."""
mock_controller.zones = mock_zones
with patch(
"homeassistant.components.izone.discovery.pizone.discovery", autospec=True
) as mock_disco:
mock_disco.return_value.start_discovery = AsyncMock()
mock_disco.return_value.controllers = {
mock_controller.device_uid: mock_controller
}
yield mock_disco
@pytest.fixture
async def mock_zones() -> list[AsyncMock]:
"""Create a list of mock zones."""
return [create_mock_zone(index=0, name="Living Room")]
@pytest.fixture
async def mock_controller(mock_zones: list[AsyncMock]) -> AsyncMock:
"""Create a mock controller."""
return create_mock_controller(
device_uid="test_controller_123",
ras_mode="master",
zone_ctrl=1,
zones_total=1,
)