108 lines
3.0 KiB
Python
108 lines
3.0 KiB
Python
"""Common fixtures for the Hydrawise tests."""
|
|
|
|
from collections.abc import Generator
|
|
from typing import Any
|
|
from unittest.mock import AsyncMock, Mock, patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.hydrawise.const import DOMAIN
|
|
from homeassistant.const import CONF_API_KEY
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_setup_entry() -> Generator[AsyncMock, None, None]:
|
|
"""Override async_setup_entry."""
|
|
with patch(
|
|
"homeassistant.components.hydrawise.async_setup_entry", return_value=True
|
|
) as mock_setup_entry:
|
|
yield mock_setup_entry
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_pydrawise(
|
|
mock_controller: dict[str, Any],
|
|
mock_zones: list[dict[str, Any]],
|
|
) -> Generator[Mock, None, None]:
|
|
"""Mock LegacyHydrawise."""
|
|
with patch("pydrawise.legacy.LegacyHydrawise", autospec=True) as mock_pydrawise:
|
|
mock_pydrawise.return_value.controller_info = {"controllers": [mock_controller]}
|
|
mock_pydrawise.return_value.current_controller = mock_controller
|
|
mock_pydrawise.return_value.controller_status = {"relays": mock_zones}
|
|
mock_pydrawise.return_value.relays = mock_zones
|
|
mock_pydrawise.return_value.relays_by_zone_number = {
|
|
r["relay"]: r for r in mock_zones
|
|
}
|
|
yield mock_pydrawise.return_value
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_controller() -> dict[str, Any]:
|
|
"""Mock Hydrawise controller."""
|
|
return {
|
|
"name": "Home Controller",
|
|
"last_contact": 1693292420,
|
|
"serial_number": "0310b36090",
|
|
"controller_id": 52496,
|
|
"status": "Unknown",
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_zones() -> list[dict[str, Any]]:
|
|
"""Mock Hydrawise zones."""
|
|
return [
|
|
{
|
|
"name": "Zone One",
|
|
"period": 259200,
|
|
"relay": 1,
|
|
"relay_id": 5965394,
|
|
"run": 1800,
|
|
"stop": 1,
|
|
"time": 330597,
|
|
"timestr": "Sat",
|
|
"type": 1,
|
|
},
|
|
{
|
|
"name": "Zone Two",
|
|
"period": 259200,
|
|
"relay": 2,
|
|
"relay_id": 5965395,
|
|
"run": 1788,
|
|
"stop": 1,
|
|
"time": 1,
|
|
"timestr": "Now",
|
|
"type": 106,
|
|
},
|
|
]
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_config_entry() -> MockConfigEntry:
|
|
"""Mock ConfigEntry."""
|
|
return MockConfigEntry(
|
|
title="Hydrawise",
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_API_KEY: "abc123",
|
|
},
|
|
unique_id="hydrawise-customerid",
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
async def mock_added_config_entry(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
mock_pydrawise: Mock,
|
|
) -> MockConfigEntry:
|
|
"""Mock ConfigEntry that's been added to HA."""
|
|
mock_config_entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
assert DOMAIN in hass.config_entries.async_domains()
|
|
return mock_config_entry
|