mirror of
https://github.com/home-assistant/core.git
synced 2026-02-06 07:15:43 +01:00
Signed-off-by: JP-Ellis <josh@jpellis.me> Co-authored-by: Joostlek <joostlek@outlook.com>
120 lines
3.3 KiB
Python
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,
|
|
)
|