240 lines
6.1 KiB
Python
240 lines
6.1 KiB
Python
"""Tests for the Airzone integration."""
|
|
|
|
from typing import Any
|
|
from unittest.mock import patch
|
|
|
|
from aioairzone_cloud.const import (
|
|
API_AZ_AIDOO,
|
|
API_AZ_SYSTEM,
|
|
API_AZ_ZONE,
|
|
API_CELSIUS,
|
|
API_CONFIG,
|
|
API_CONNECTION_DATE,
|
|
API_DEVICE_ID,
|
|
API_DEVICES,
|
|
API_DISCONNECTION_DATE,
|
|
API_ERRORS,
|
|
API_FAH,
|
|
API_GROUPS,
|
|
API_HUMIDITY,
|
|
API_INSTALLATION_ID,
|
|
API_INSTALLATIONS,
|
|
API_IS_CONNECTED,
|
|
API_LOCAL_TEMP,
|
|
API_META,
|
|
API_NAME,
|
|
API_STAT_AP_MAC,
|
|
API_STAT_CHANNEL,
|
|
API_STAT_QUALITY,
|
|
API_STAT_RSSI,
|
|
API_STAT_SSID,
|
|
API_STATUS,
|
|
API_SYSTEM_NUMBER,
|
|
API_TYPE,
|
|
API_WARNINGS,
|
|
API_WS_CONNECTED,
|
|
API_WS_FW,
|
|
API_WS_ID,
|
|
API_WS_IDS,
|
|
API_WS_TYPE,
|
|
API_ZONE_NUMBER,
|
|
)
|
|
from aioairzone_cloud.device import Device
|
|
from aioairzone_cloud.webserver import WebServer
|
|
|
|
from homeassistant.components.airzone_cloud import DOMAIN
|
|
from homeassistant.const import CONF_ID, CONF_PASSWORD, CONF_USERNAME
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
WS_ID = "11:22:33:44:55:66"
|
|
WS_ID_AIDOO = "11:22:33:44:55:67"
|
|
|
|
CONFIG = {
|
|
CONF_ID: "inst1",
|
|
CONF_USERNAME: "user",
|
|
CONF_PASSWORD: "pass",
|
|
}
|
|
|
|
GET_INSTALLATION_MOCK = {
|
|
API_GROUPS: [
|
|
{
|
|
API_NAME: "Group",
|
|
API_DEVICES: [
|
|
{
|
|
API_DEVICE_ID: "system1",
|
|
API_TYPE: API_AZ_SYSTEM,
|
|
API_META: {
|
|
API_SYSTEM_NUMBER: 1,
|
|
},
|
|
API_WS_ID: WS_ID,
|
|
},
|
|
{
|
|
API_DEVICE_ID: "zone1",
|
|
API_NAME: "Salon",
|
|
API_TYPE: API_AZ_ZONE,
|
|
API_META: {
|
|
API_SYSTEM_NUMBER: 1,
|
|
API_ZONE_NUMBER: 1,
|
|
},
|
|
API_WS_ID: WS_ID,
|
|
},
|
|
{
|
|
API_DEVICE_ID: "zone2",
|
|
API_NAME: "Dormitorio",
|
|
API_TYPE: API_AZ_ZONE,
|
|
API_META: {
|
|
API_SYSTEM_NUMBER: 1,
|
|
API_ZONE_NUMBER: 2,
|
|
},
|
|
API_WS_ID: WS_ID,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
API_NAME: "Aidoo Group",
|
|
API_DEVICES: [
|
|
{
|
|
API_DEVICE_ID: "aidoo1",
|
|
API_NAME: "Bron",
|
|
API_TYPE: API_AZ_AIDOO,
|
|
API_WS_ID: WS_ID_AIDOO,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
|
|
GET_INSTALLATIONS_MOCK = {
|
|
API_INSTALLATIONS: [
|
|
{
|
|
API_INSTALLATION_ID: CONFIG[CONF_ID],
|
|
API_NAME: "House",
|
|
API_WS_IDS: [
|
|
WS_ID,
|
|
WS_ID_AIDOO,
|
|
],
|
|
},
|
|
],
|
|
}
|
|
|
|
GET_WEBSERVER_MOCK = {
|
|
API_WS_TYPE: "ws_az",
|
|
API_CONFIG: {
|
|
API_WS_FW: "3.44",
|
|
API_STAT_SSID: "Wifi",
|
|
API_STAT_CHANNEL: 36,
|
|
API_STAT_AP_MAC: "00:00:00:00:00:00",
|
|
},
|
|
API_STATUS: {
|
|
API_IS_CONNECTED: True,
|
|
API_STAT_QUALITY: 4,
|
|
API_STAT_RSSI: -56,
|
|
API_CONNECTION_DATE: "2023-05-07T12:55:51.000Z",
|
|
API_DISCONNECTION_DATE: "2023-01-01T22:26:55.376Z",
|
|
},
|
|
}
|
|
|
|
GET_WEBSERVER_MOCK_AIDOO = {
|
|
API_WS_TYPE: "ws_aidoo",
|
|
API_CONFIG: {
|
|
API_WS_FW: "3.13",
|
|
API_STAT_SSID: "Wifi",
|
|
API_STAT_CHANNEL: 1,
|
|
API_STAT_AP_MAC: "00:00:00:00:00:01",
|
|
},
|
|
API_STATUS: {
|
|
API_IS_CONNECTED: True,
|
|
API_STAT_QUALITY: 4,
|
|
API_STAT_RSSI: -77,
|
|
API_CONNECTION_DATE: "2023-05-24 17:00:52 +0200",
|
|
API_DISCONNECTION_DATE: "2023-05-24 17:00:25 +0200",
|
|
},
|
|
}
|
|
|
|
|
|
def mock_get_device_status(device: Device) -> dict[str, Any]:
|
|
"""Mock API device status."""
|
|
|
|
if device.get_id() == "aidoo1":
|
|
return {
|
|
API_ERRORS: [],
|
|
API_IS_CONNECTED: True,
|
|
API_WS_CONNECTED: True,
|
|
API_LOCAL_TEMP: {
|
|
API_CELSIUS: 21,
|
|
API_FAH: 70,
|
|
},
|
|
API_WARNINGS: [],
|
|
}
|
|
if device.get_id() == "system1":
|
|
return {
|
|
API_ERRORS: [],
|
|
API_IS_CONNECTED: True,
|
|
API_WS_CONNECTED: True,
|
|
API_WARNINGS: [],
|
|
}
|
|
if device.get_id() == "zone2":
|
|
return {
|
|
API_HUMIDITY: 24,
|
|
API_IS_CONNECTED: True,
|
|
API_WS_CONNECTED: True,
|
|
API_LOCAL_TEMP: {
|
|
API_FAH: 77,
|
|
API_CELSIUS: 25,
|
|
},
|
|
API_WARNINGS: [],
|
|
}
|
|
return {
|
|
API_HUMIDITY: 30,
|
|
API_IS_CONNECTED: True,
|
|
API_WS_CONNECTED: True,
|
|
API_LOCAL_TEMP: {
|
|
API_FAH: 68,
|
|
API_CELSIUS: 20,
|
|
},
|
|
API_WARNINGS: [],
|
|
}
|
|
|
|
|
|
def mock_get_webserver(webserver: WebServer, devices: bool) -> dict[str, Any]:
|
|
"""Mock API get webserver."""
|
|
|
|
if webserver.get_id() == WS_ID_AIDOO:
|
|
return GET_WEBSERVER_MOCK_AIDOO
|
|
|
|
return GET_WEBSERVER_MOCK
|
|
|
|
|
|
async def async_init_integration(
|
|
hass: HomeAssistant,
|
|
) -> None:
|
|
"""Set up the Airzone integration in Home Assistant."""
|
|
|
|
config_entry = MockConfigEntry(
|
|
data=CONFIG,
|
|
domain=DOMAIN,
|
|
unique_id=CONFIG[CONF_ID],
|
|
)
|
|
config_entry.add_to_hass(hass)
|
|
|
|
with patch(
|
|
"homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_device_status",
|
|
side_effect=mock_get_device_status,
|
|
), patch(
|
|
"homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_installation",
|
|
return_value=GET_INSTALLATION_MOCK,
|
|
), patch(
|
|
"homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_installations",
|
|
return_value=GET_INSTALLATIONS_MOCK,
|
|
), patch(
|
|
"homeassistant.components.airzone_cloud.AirzoneCloudApi.api_get_webserver",
|
|
side_effect=mock_get_webserver,
|
|
), patch(
|
|
"homeassistant.components.airzone_cloud.AirzoneCloudApi.login",
|
|
return_value=None,
|
|
):
|
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|