mirror of https://github.com/home-assistant/core
98 lines
2.4 KiB
Python
98 lines
2.4 KiB
Python
"""Configuration for iAqualink tests."""
|
|
|
|
import random
|
|
from unittest.mock import AsyncMock, PropertyMock, patch
|
|
|
|
from iaqualink.client import AqualinkClient
|
|
from iaqualink.device import AqualinkDevice
|
|
from iaqualink.system import AqualinkSystem
|
|
import pytest
|
|
|
|
from homeassistant.components.iaqualink import DOMAIN
|
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
MOCK_USERNAME = "test@example.com"
|
|
MOCK_PASSWORD = "password"
|
|
MOCK_DATA = {CONF_USERNAME: MOCK_USERNAME, CONF_PASSWORD: MOCK_PASSWORD}
|
|
|
|
|
|
def async_returns(x):
|
|
"""Return value-returning async mock."""
|
|
return AsyncMock(return_value=x)
|
|
|
|
|
|
def async_raises(x):
|
|
"""Return exception-raising async mock."""
|
|
return AsyncMock(side_effect=x)
|
|
|
|
|
|
@pytest.fixture(name="client")
|
|
def client_fixture():
|
|
"""Create client fixture."""
|
|
return AqualinkClient(username=MOCK_USERNAME, password=MOCK_PASSWORD)
|
|
|
|
|
|
def get_aqualink_system(aqualink, cls=None, data=None):
|
|
"""Create aqualink system."""
|
|
if cls is None:
|
|
cls = AqualinkSystem
|
|
|
|
if data is None:
|
|
data = {}
|
|
|
|
num = random.randint(0, 99999)
|
|
data["serial_number"] = f"SN{num:05}"
|
|
|
|
return cls(aqualink=aqualink, data=data)
|
|
|
|
|
|
def get_aqualink_device(system, name, cls=None, data=None):
|
|
"""Create aqualink device."""
|
|
if cls is None:
|
|
cls = AqualinkDevice
|
|
|
|
# AqualinkDevice doesn't implement some of the properties since it's left to
|
|
# sub-classes for them to do. Provide a basic implementation here for the
|
|
# benefits of the test suite.
|
|
attrs = {
|
|
"name": name,
|
|
"manufacturer": "Jandy",
|
|
"model": "Device",
|
|
"label": name.upper(),
|
|
}
|
|
|
|
for k, v in attrs.items():
|
|
patcher = patch.object(cls, k, new_callable=PropertyMock)
|
|
mock = patcher.start()
|
|
mock.return_value = v
|
|
|
|
if data is None:
|
|
data = {}
|
|
|
|
data["name"] = name
|
|
|
|
return cls(system=system, data=data)
|
|
|
|
|
|
@pytest.fixture(name="config_data")
|
|
def config_data_fixture():
|
|
"""Create hass config fixture."""
|
|
return MOCK_DATA
|
|
|
|
|
|
@pytest.fixture(name="config")
|
|
def config_fixture():
|
|
"""Create hass config fixture."""
|
|
return {DOMAIN: MOCK_DATA}
|
|
|
|
|
|
@pytest.fixture(name="config_entry")
|
|
def config_entry_fixture():
|
|
"""Create a mock config entry."""
|
|
return MockConfigEntry(
|
|
domain=DOMAIN,
|
|
data=MOCK_DATA,
|
|
)
|