mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Sensibo test data adjustment from late review (#71482)
* Sensibo test data * Separate pytest fixture for json load * Scope to session
This commit is contained in:
parent
554f079b02
commit
49491bcda5
@ -1,8 +1,12 @@
|
|||||||
"""Fixtures for the Sensibo integration."""
|
"""Fixtures for the Sensibo integration."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
from typing import Any
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pysensibo import SensiboClient
|
||||||
|
from pysensibo.model import SensiboData
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.sensibo.const import DOMAIN
|
from homeassistant.components.sensibo.const import DOMAIN
|
||||||
@ -10,13 +14,13 @@ from homeassistant.config_entries import SOURCE_USER
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from . import ENTRY_CONFIG
|
from . import ENTRY_CONFIG
|
||||||
from .response import DATA_FROM_API
|
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry, load_fixture
|
||||||
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
async def load_int(hass: HomeAssistant) -> MockConfigEntry:
|
async def load_int(hass: HomeAssistant, get_data: SensiboData) -> MockConfigEntry:
|
||||||
"""Set up the Sensibo integration in Home Assistant."""
|
"""Set up the Sensibo integration in Home Assistant."""
|
||||||
config_entry = MockConfigEntry(
|
config_entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -31,7 +35,7 @@ async def load_int(hass: HomeAssistant) -> MockConfigEntry:
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
||||||
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
||||||
@ -43,3 +47,25 @@ async def load_int(hass: HomeAssistant) -> MockConfigEntry:
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
return config_entry
|
return config_entry
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="get_data")
|
||||||
|
async def get_data_from_library(
|
||||||
|
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, load_json: dict[str, Any]
|
||||||
|
) -> SensiboData:
|
||||||
|
"""Retrieve data from upstream Sensibo library."""
|
||||||
|
|
||||||
|
client = SensiboClient("123467890", aioclient_mock.create_session(hass.loop))
|
||||||
|
with patch("pysensibo.SensiboClient.async_get_devices", return_value=load_json):
|
||||||
|
output = await client.async_get_devices_data()
|
||||||
|
await client._session.close() # pylint: disable=protected-access
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="load_json", scope="session")
|
||||||
|
def load_json_from_fixture() -> SensiboData:
|
||||||
|
"""Load fixture with json data and return."""
|
||||||
|
|
||||||
|
data_fixture = load_fixture("data.json", "sensibo")
|
||||||
|
json_data: dict[str, Any] = json.loads(data_fixture)
|
||||||
|
return json_data
|
||||||
|
551
tests/components/sensibo/fixtures/data.json
Normal file
551
tests/components/sensibo/fixtures/data.json
Normal file
@ -0,0 +1,551 @@
|
|||||||
|
{
|
||||||
|
"status": "success",
|
||||||
|
"result": [
|
||||||
|
{
|
||||||
|
"isGeofenceOnEnterEnabledForThisUser": false,
|
||||||
|
"isClimateReactGeofenceOnEnterEnabledForThisUser": false,
|
||||||
|
"isMotionGeofenceOnEnterEnabled": false,
|
||||||
|
"isOwner": true,
|
||||||
|
"id": "ABC999111",
|
||||||
|
"qrId": "AAAAAAAAAA",
|
||||||
|
"temperatureUnit": "C",
|
||||||
|
"room": {
|
||||||
|
"uid": "99TT99TT",
|
||||||
|
"name": "Hallway",
|
||||||
|
"icon": "Lounge"
|
||||||
|
},
|
||||||
|
"acState": {
|
||||||
|
"timestamp": {
|
||||||
|
"time": "2022-04-30T11:23:30.019722Z",
|
||||||
|
"secondsAgo": -1
|
||||||
|
},
|
||||||
|
"on": true,
|
||||||
|
"mode": "heat",
|
||||||
|
"fanLevel": "high",
|
||||||
|
"targetTemperature": 25,
|
||||||
|
"swing": "stopped",
|
||||||
|
"horizontalSwing": "stopped",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"lastStateChange": {
|
||||||
|
"time": "2022-04-30T11:21:30Z",
|
||||||
|
"secondsAgo": 119
|
||||||
|
},
|
||||||
|
"lastStateChangeToOn": {
|
||||||
|
"time": "2022-04-30T11:20:28Z",
|
||||||
|
"secondsAgo": 181
|
||||||
|
},
|
||||||
|
"lastStateChangeToOff": {
|
||||||
|
"time": "2022-04-30T11:21:30Z",
|
||||||
|
"secondsAgo": 119
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"id": "ZZZZZZZZZZZZ",
|
||||||
|
"name": "Home",
|
||||||
|
"latLon": [58.9806976, 20.5864297],
|
||||||
|
"address": ["Sealand 99", "Some county"],
|
||||||
|
"country": "United Country",
|
||||||
|
"createTime": {
|
||||||
|
"time": "2020-03-21T15:44:15Z",
|
||||||
|
"secondsAgo": 66543240
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectionStatus": {
|
||||||
|
"isAlive": true,
|
||||||
|
"lastSeen": {
|
||||||
|
"time": "2022-04-30T11:22:57.894846Z",
|
||||||
|
"secondsAgo": 32
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firmwareVersion": "SKY30046",
|
||||||
|
"firmwareType": "esp8266ex",
|
||||||
|
"productModel": "skyv2",
|
||||||
|
"configGroup": "stable",
|
||||||
|
"currentlyAvailableFirmwareVersion": "SKY30046",
|
||||||
|
"cleanFiltersNotificationEnabled": false,
|
||||||
|
"shouldShowFilterCleaningNotification": false,
|
||||||
|
"isGeofenceOnExitEnabled": false,
|
||||||
|
"isClimateReactGeofenceOnExitEnabled": false,
|
||||||
|
"isMotionGeofenceOnExitEnabled": false,
|
||||||
|
"serial": "1234567890",
|
||||||
|
"sensorsCalibration": {
|
||||||
|
"temperature": 0.1,
|
||||||
|
"humidity": 0.0
|
||||||
|
},
|
||||||
|
"motionSensors": [
|
||||||
|
{
|
||||||
|
"configGroup": "stable",
|
||||||
|
"connectionStatus": {
|
||||||
|
"isAlive": true,
|
||||||
|
"lastSeen": {
|
||||||
|
"secondsAgo": 86,
|
||||||
|
"time": "2022-01-01T18:59:48.665878Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firmwareType": "nrf52",
|
||||||
|
"firmwareVersion": "V17",
|
||||||
|
"id": "AABBCC",
|
||||||
|
"isMainSensor": true,
|
||||||
|
"macAddress": "00:04:00:B6:00:00",
|
||||||
|
"measurements": {
|
||||||
|
"batteryVoltage": 3000,
|
||||||
|
"humidity": 57,
|
||||||
|
"motion": true,
|
||||||
|
"rssi": -72,
|
||||||
|
"temperature": 23.9,
|
||||||
|
"time": {
|
||||||
|
"secondsAgo": 86,
|
||||||
|
"time": "2022-01-01T18:59:48.665878Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parentDeviceUid": "ABC999111",
|
||||||
|
"productModel": "motion_sensor",
|
||||||
|
"qrId": "AAZZAAZZ",
|
||||||
|
"serial": "12123434"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [],
|
||||||
|
"timer": null,
|
||||||
|
"schedules": [
|
||||||
|
{
|
||||||
|
"id": "11",
|
||||||
|
"isEnabled": false,
|
||||||
|
"acState": {
|
||||||
|
"on": false,
|
||||||
|
"targetTemperature": 21,
|
||||||
|
"temperatureUnit": "C",
|
||||||
|
"mode": "heat",
|
||||||
|
"fanLevel": "low",
|
||||||
|
"swing": "stopped",
|
||||||
|
"extra": {
|
||||||
|
"scheduler": {
|
||||||
|
"climate_react": null,
|
||||||
|
"motion": null,
|
||||||
|
"on": false,
|
||||||
|
"climate_react_settings": null,
|
||||||
|
"pure_boost": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"horizontalSwing": "stopped",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"createTime": "2022-04-17T15:41:05",
|
||||||
|
"createTimeSecondsAgo": 1107745,
|
||||||
|
"recurringDays": ["Wednesday", "Thursday"],
|
||||||
|
"targetTimeLocal": "17:40",
|
||||||
|
"timezone": "Europe/Stockholm",
|
||||||
|
"podUid": "ABC999111",
|
||||||
|
"nextTime": "2022-05-04T15:40:00",
|
||||||
|
"nextTimeSecondsFromNow": 360989
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"motionConfig": {
|
||||||
|
"enabled": true,
|
||||||
|
"onEnterACChange": false,
|
||||||
|
"onEnterACState": null,
|
||||||
|
"onEnterCRChange": true,
|
||||||
|
"onExitACChange": true,
|
||||||
|
"onExitACState": null,
|
||||||
|
"onExitCRChange": true,
|
||||||
|
"onExitDelayMinutes": 20
|
||||||
|
},
|
||||||
|
"filtersCleaning": {
|
||||||
|
"acOnSecondsSinceLastFiltersClean": 667991,
|
||||||
|
"filtersCleanSecondsThreshold": 1080000,
|
||||||
|
"lastFiltersCleanTime": {
|
||||||
|
"time": "2022-03-12T15:24:26Z",
|
||||||
|
"secondsAgo": 4219143
|
||||||
|
},
|
||||||
|
"shouldCleanFilters": false
|
||||||
|
},
|
||||||
|
"serviceSubscriptions": [],
|
||||||
|
"roomIsOccupied": true,
|
||||||
|
"mainMeasurementsSensor": {
|
||||||
|
"configGroup": "stable",
|
||||||
|
"connectionStatus": {
|
||||||
|
"isAlive": true,
|
||||||
|
"lastSeen": {
|
||||||
|
"secondsAgo": 86,
|
||||||
|
"time": "2022-01-01T18:59:48.665878Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firmwareType": "nrf52",
|
||||||
|
"firmwareVersion": "V17",
|
||||||
|
"id": "AABBCC",
|
||||||
|
"isMainSensor": true,
|
||||||
|
"macAddress": "00:04:00:B6:00:00",
|
||||||
|
"measurements": {
|
||||||
|
"batteryVoltage": 3000,
|
||||||
|
"humidity": 32.9,
|
||||||
|
"motion": false,
|
||||||
|
"rssi": -72,
|
||||||
|
"temperature": 21.2,
|
||||||
|
"time": {
|
||||||
|
"secondsAgo": 86,
|
||||||
|
"time": "2022-01-01T18:59:48.665878Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parentDeviceUid": "ABC999111",
|
||||||
|
"productModel": "motion_sensor",
|
||||||
|
"qrId": "AAZZAAZZ",
|
||||||
|
"serial": "12123434"
|
||||||
|
},
|
||||||
|
"pureBoostConfig": null,
|
||||||
|
"warrantyEligible": "no",
|
||||||
|
"warrantyEligibleUntil": {
|
||||||
|
"time": "2020-04-18T15:43:08Z",
|
||||||
|
"secondsAgo": 64093221
|
||||||
|
},
|
||||||
|
"features": ["softShowPlus", "optimusTrial"],
|
||||||
|
"runningHealthcheck": null,
|
||||||
|
"lastHealthcheck": null,
|
||||||
|
"lastACStateChange": {
|
||||||
|
"id": "11",
|
||||||
|
"time": {
|
||||||
|
"time": "2022-04-30T11:21:29Z",
|
||||||
|
"secondsAgo": 120
|
||||||
|
},
|
||||||
|
"status": "Success",
|
||||||
|
"acState": {
|
||||||
|
"timestamp": {
|
||||||
|
"time": "2022-04-30T11:23:30.062645Z",
|
||||||
|
"secondsAgo": -1
|
||||||
|
},
|
||||||
|
"on": false,
|
||||||
|
"mode": "fan",
|
||||||
|
"fanLevel": "high",
|
||||||
|
"swing": "stopped",
|
||||||
|
"horizontalSwing": "stopped",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"resultingAcState": {
|
||||||
|
"timestamp": {
|
||||||
|
"time": "2022-04-30T11:23:30.062688Z",
|
||||||
|
"secondsAgo": -1
|
||||||
|
},
|
||||||
|
"on": false,
|
||||||
|
"mode": "fan",
|
||||||
|
"fanLevel": "high",
|
||||||
|
"swing": "stopped",
|
||||||
|
"horizontalSwing": "stopped",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"changedProperties": ["on"],
|
||||||
|
"reason": "UserRequest",
|
||||||
|
"failureReason": null,
|
||||||
|
"resolveTime": {
|
||||||
|
"time": "2022-04-30T11:21:30Z",
|
||||||
|
"secondsAgo": 119
|
||||||
|
},
|
||||||
|
"causedByScheduleId": null,
|
||||||
|
"causedByScheduleType": null
|
||||||
|
},
|
||||||
|
"homekitSupported": false,
|
||||||
|
"remoteCapabilities": {
|
||||||
|
"modes": {
|
||||||
|
"cool": {
|
||||||
|
"temperatures": {
|
||||||
|
"F": {
|
||||||
|
"isNative": false,
|
||||||
|
"values": [64, 66, 68]
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"isNative": true,
|
||||||
|
"values": [18, 19, 20]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fanLevels": ["quiet", "low", "medium"],
|
||||||
|
"swing": ["stopped", "fixedTop", "fixedMiddleTop"],
|
||||||
|
"horizontalSwing": ["stopped", "fixedLeft", "fixedCenterLeft"],
|
||||||
|
"light": ["on", "off"]
|
||||||
|
},
|
||||||
|
"heat": {
|
||||||
|
"temperatures": {
|
||||||
|
"F": {
|
||||||
|
"isNative": false,
|
||||||
|
"values": [63, 64, 66]
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"isNative": true,
|
||||||
|
"values": [17, 18, 19, 20]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fanLevels": ["quiet", "low", "medium"],
|
||||||
|
"swing": ["stopped", "fixedTop", "fixedMiddleTop"],
|
||||||
|
"horizontalSwing": ["stopped", "fixedLeft", "fixedCenterLeft"],
|
||||||
|
"light": ["on", "off"]
|
||||||
|
},
|
||||||
|
"dry": {
|
||||||
|
"temperatures": {
|
||||||
|
"F": {
|
||||||
|
"isNative": false,
|
||||||
|
"values": [64, 66, 68]
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"isNative": true,
|
||||||
|
"values": [18, 19, 20]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"swing": ["stopped", "fixedTop", "fixedMiddleTop"],
|
||||||
|
"horizontalSwing": ["stopped", "fixedLeft", "fixedCenterLeft"],
|
||||||
|
"light": ["on", "off"]
|
||||||
|
},
|
||||||
|
"auto": {
|
||||||
|
"temperatures": {
|
||||||
|
"F": {
|
||||||
|
"isNative": false,
|
||||||
|
"values": [64, 66, 68]
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"isNative": true,
|
||||||
|
"values": [18, 19, 20, 21]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fanLevels": ["quiet", "low", "medium"],
|
||||||
|
"swing": ["stopped", "fixedTop", "fixedMiddleTop"],
|
||||||
|
"horizontalSwing": ["stopped", "fixedLeft", "fixedCenterLeft"],
|
||||||
|
"light": ["on", "off"]
|
||||||
|
},
|
||||||
|
"fan": {
|
||||||
|
"temperatures": {},
|
||||||
|
"fanLevels": ["quiet", "low", "medium"],
|
||||||
|
"swing": ["stopped", "fixedTop", "fixedMiddleTop"],
|
||||||
|
"horizontalSwing": ["stopped", "fixedLeft", "fixedCenterLeft"],
|
||||||
|
"light": ["on", "off"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"remote": {
|
||||||
|
"toggle": false,
|
||||||
|
"window": false
|
||||||
|
},
|
||||||
|
"remoteFlavor": "Curious Sea Cucumber",
|
||||||
|
"remoteAlternatives": ["_mitsubishi2_night_heat"],
|
||||||
|
"smartMode": {
|
||||||
|
"enabled": false,
|
||||||
|
"type": "temperature",
|
||||||
|
"deviceUid": "ABC999111",
|
||||||
|
"lowTemperatureThreshold": 0.0,
|
||||||
|
"highTemperatureThreshold": 27.5,
|
||||||
|
"lowTemperatureState": {
|
||||||
|
"on": true,
|
||||||
|
"targetTemperature": 21,
|
||||||
|
"temperatureUnit": "C",
|
||||||
|
"mode": "heat",
|
||||||
|
"fanLevel": "low",
|
||||||
|
"swing": "stopped",
|
||||||
|
"horizontalSwing": "stopped",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"highTemperatureState": {
|
||||||
|
"on": true,
|
||||||
|
"targetTemperature": 21,
|
||||||
|
"temperatureUnit": "C",
|
||||||
|
"mode": "cool",
|
||||||
|
"fanLevel": "high",
|
||||||
|
"swing": "stopped",
|
||||||
|
"horizontalSwing": "stopped",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"lowTemperatureWebhook": null,
|
||||||
|
"highTemperatureWebhook": null
|
||||||
|
},
|
||||||
|
"measurements": {
|
||||||
|
"time": {
|
||||||
|
"time": "2022-04-30T11:22:57.894846Z",
|
||||||
|
"secondsAgo": 32
|
||||||
|
},
|
||||||
|
"temperature": 21.2,
|
||||||
|
"humidity": 32.9,
|
||||||
|
"motion": true,
|
||||||
|
"roomIsOccupied": true,
|
||||||
|
"feelsLike": 21.2,
|
||||||
|
"rssi": -45
|
||||||
|
},
|
||||||
|
"accessPoint": {
|
||||||
|
"ssid": "Sensibo-1234567890",
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"macAddress": "00:02:00:B6:00:00",
|
||||||
|
"autoOffMinutes": null,
|
||||||
|
"autoOffEnabled": false,
|
||||||
|
"antiMoldTimer": null,
|
||||||
|
"antiMoldConfig": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isGeofenceOnEnterEnabledForThisUser": false,
|
||||||
|
"isClimateReactGeofenceOnEnterEnabledForThisUser": false,
|
||||||
|
"isMotionGeofenceOnEnterEnabled": false,
|
||||||
|
"isOwner": true,
|
||||||
|
"id": "AAZZAAZZ",
|
||||||
|
"qrId": "AAAAAAAABB",
|
||||||
|
"temperatureUnit": "C",
|
||||||
|
"room": {
|
||||||
|
"uid": "99TT99ZZ",
|
||||||
|
"name": "Kitchen",
|
||||||
|
"icon": "Diningroom"
|
||||||
|
},
|
||||||
|
"acState": {
|
||||||
|
"timestamp": {
|
||||||
|
"time": "2022-04-30T11:23:30.067312Z",
|
||||||
|
"secondsAgo": -1
|
||||||
|
},
|
||||||
|
"on": false,
|
||||||
|
"mode": "fan",
|
||||||
|
"fanLevel": "low",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"lastStateChange": {
|
||||||
|
"time": "2022-04-30T11:21:41Z",
|
||||||
|
"secondsAgo": 108
|
||||||
|
},
|
||||||
|
"lastStateChangeToOn": {
|
||||||
|
"time": "2022-04-30T09:43:26Z",
|
||||||
|
"secondsAgo": 6003
|
||||||
|
},
|
||||||
|
"lastStateChangeToOff": {
|
||||||
|
"time": "2022-04-30T11:21:37Z",
|
||||||
|
"secondsAgo": 112
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"id": "ZZZZZZZZZZZZ",
|
||||||
|
"name": "Home",
|
||||||
|
"latLon": [58.9806976, 20.5864297],
|
||||||
|
"address": ["Sealand 99", "Some county"],
|
||||||
|
"country": "United Country",
|
||||||
|
"createTime": {
|
||||||
|
"time": "2020-03-21T15:44:15Z",
|
||||||
|
"secondsAgo": 66543240
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"connectionStatus": {
|
||||||
|
"isAlive": true,
|
||||||
|
"lastSeen": {
|
||||||
|
"time": "2022-04-30T11:23:20.642798Z",
|
||||||
|
"secondsAgo": 9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firmwareVersion": "PUR00111",
|
||||||
|
"firmwareType": "pure-esp32",
|
||||||
|
"productModel": "pure",
|
||||||
|
"configGroup": "stable",
|
||||||
|
"currentlyAvailableFirmwareVersion": "PUR00111",
|
||||||
|
"cleanFiltersNotificationEnabled": false,
|
||||||
|
"shouldShowFilterCleaningNotification": false,
|
||||||
|
"isGeofenceOnExitEnabled": false,
|
||||||
|
"isClimateReactGeofenceOnExitEnabled": false,
|
||||||
|
"isMotionGeofenceOnExitEnabled": false,
|
||||||
|
"serial": "0987654321",
|
||||||
|
"sensorsCalibration": {
|
||||||
|
"temperature": 0.0,
|
||||||
|
"humidity": 0.0
|
||||||
|
},
|
||||||
|
"motionSensors": [],
|
||||||
|
"tags": [],
|
||||||
|
"timer": null,
|
||||||
|
"schedules": [],
|
||||||
|
"motionConfig": null,
|
||||||
|
"filtersCleaning": {
|
||||||
|
"acOnSecondsSinceLastFiltersClean": 415560,
|
||||||
|
"filtersCleanSecondsThreshold": 14256000,
|
||||||
|
"lastFiltersCleanTime": {
|
||||||
|
"time": "2022-04-23T15:58:45Z",
|
||||||
|
"secondsAgo": 588284
|
||||||
|
},
|
||||||
|
"shouldCleanFilters": false
|
||||||
|
},
|
||||||
|
"serviceSubscriptions": [],
|
||||||
|
"roomIsOccupied": null,
|
||||||
|
"mainMeasurementsSensor": null,
|
||||||
|
"pureBoostConfig": {
|
||||||
|
"enabled": false,
|
||||||
|
"sensitivity": "N",
|
||||||
|
"measurements_integration": true,
|
||||||
|
"ac_integration": false,
|
||||||
|
"geo_integration": false,
|
||||||
|
"prime_integration": false
|
||||||
|
},
|
||||||
|
"warrantyEligible": "no",
|
||||||
|
"warrantyEligibleUntil": {
|
||||||
|
"time": "2022-04-10T09:58:58Z",
|
||||||
|
"secondsAgo": 1733071
|
||||||
|
},
|
||||||
|
"features": ["optimusTrial", "softShowPlus"],
|
||||||
|
"runningHealthcheck": null,
|
||||||
|
"lastHealthcheck": null,
|
||||||
|
"lastACStateChange": {
|
||||||
|
"id": "AA22",
|
||||||
|
"time": {
|
||||||
|
"time": "2022-04-30T11:21:37Z",
|
||||||
|
"secondsAgo": 112
|
||||||
|
},
|
||||||
|
"status": "Success",
|
||||||
|
"acState": {
|
||||||
|
"timestamp": {
|
||||||
|
"time": "2022-04-30T11:23:30.090144Z",
|
||||||
|
"secondsAgo": -1
|
||||||
|
},
|
||||||
|
"on": false,
|
||||||
|
"mode": "fan",
|
||||||
|
"fanLevel": "low",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"resultingAcState": {
|
||||||
|
"timestamp": {
|
||||||
|
"time": "2022-04-30T11:23:30.090185Z",
|
||||||
|
"secondsAgo": -1
|
||||||
|
},
|
||||||
|
"on": false,
|
||||||
|
"mode": "fan",
|
||||||
|
"fanLevel": "low",
|
||||||
|
"light": "on"
|
||||||
|
},
|
||||||
|
"changedProperties": ["on"],
|
||||||
|
"reason": "UserRequest",
|
||||||
|
"failureReason": null,
|
||||||
|
"resolveTime": {
|
||||||
|
"time": "2022-04-30T11:21:37Z",
|
||||||
|
"secondsAgo": 112
|
||||||
|
},
|
||||||
|
"causedByScheduleId": null,
|
||||||
|
"causedByScheduleType": null
|
||||||
|
},
|
||||||
|
"homekitSupported": true,
|
||||||
|
"remoteCapabilities": {
|
||||||
|
"modes": {
|
||||||
|
"fan": {
|
||||||
|
"temperatures": {},
|
||||||
|
"fanLevels": ["low", "high"],
|
||||||
|
"light": ["on", "dim", "off"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"remote": {
|
||||||
|
"toggle": false,
|
||||||
|
"window": false
|
||||||
|
},
|
||||||
|
"remoteFlavor": "Eccentric Eagle",
|
||||||
|
"remoteAlternatives": [],
|
||||||
|
"smartMode": null,
|
||||||
|
"measurements": {
|
||||||
|
"time": {
|
||||||
|
"time": "2022-04-30T11:23:20.642798Z",
|
||||||
|
"secondsAgo": 9
|
||||||
|
},
|
||||||
|
"rssi": -58,
|
||||||
|
"pm25": 1,
|
||||||
|
"motion": false,
|
||||||
|
"roomIsOccupied": null
|
||||||
|
},
|
||||||
|
"accessPoint": {
|
||||||
|
"ssid": "Sensibo-09876",
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"macAddress": "00:01:00:01:00:01",
|
||||||
|
"autoOffMinutes": null,
|
||||||
|
"autoOffEnabled": false,
|
||||||
|
"antiMoldTimer": null,
|
||||||
|
"antiMoldConfig": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -4,19 +4,21 @@ from __future__ import annotations
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pysensibo.model import SensiboData
|
||||||
from pytest import MonkeyPatch
|
from pytest import MonkeyPatch
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.util import dt
|
from homeassistant.util import dt
|
||||||
|
|
||||||
from .response import DATA_FROM_API
|
|
||||||
|
|
||||||
from tests.common import async_fire_time_changed
|
from tests.common import async_fire_time_changed
|
||||||
|
|
||||||
|
|
||||||
async def test_binary_sensor(
|
async def test_binary_sensor(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo binary sensor."""
|
"""Test the Sensibo binary sensor."""
|
||||||
|
|
||||||
@ -30,15 +32,15 @@ async def test_binary_sensor(
|
|||||||
assert state4.state == "on"
|
assert state4.state == "on"
|
||||||
|
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"].motion_sensors["AABBCC"], "alive", False
|
get_data.parsed["ABC999111"].motion_sensors["AABBCC"], "alive", False
|
||||||
)
|
)
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"].motion_sensors["AABBCC"], "motion", False
|
get_data.parsed["ABC999111"].motion_sensors["AABBCC"], "motion", False
|
||||||
)
|
)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
|
@ -4,6 +4,7 @@ from __future__ import annotations
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pysensibo.model import SensiboData
|
||||||
import pytest
|
import pytest
|
||||||
from voluptuous import MultipleInvalid
|
from voluptuous import MultipleInvalid
|
||||||
|
|
||||||
@ -33,12 +34,12 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.util import dt
|
from homeassistant.util import dt
|
||||||
|
|
||||||
from .response import DATA_FROM_API
|
|
||||||
|
|
||||||
from tests.common import async_fire_time_changed
|
from tests.common import async_fire_time_changed
|
||||||
|
|
||||||
|
|
||||||
async def test_climate(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
async def test_climate(
|
||||||
|
hass: HomeAssistant, load_int: ConfigEntry, get_data: SensiboData
|
||||||
|
) -> None:
|
||||||
"""Test the Sensibo climate."""
|
"""Test the Sensibo climate."""
|
||||||
|
|
||||||
state1 = hass.states.get("climate.hallway")
|
state1 = hass.states.get("climate.hallway")
|
||||||
@ -54,7 +55,7 @@ async def test_climate(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
|||||||
"fan_only",
|
"fan_only",
|
||||||
"off",
|
"off",
|
||||||
],
|
],
|
||||||
"min_temp": 18,
|
"min_temp": 17,
|
||||||
"max_temp": 20,
|
"max_temp": 20,
|
||||||
"target_temp_step": 1,
|
"target_temp_step": 1,
|
||||||
"fan_modes": ["quiet", "low", "medium"],
|
"fan_modes": ["quiet", "low", "medium"],
|
||||||
@ -63,9 +64,9 @@ async def test_climate(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
|||||||
"fixedTop",
|
"fixedTop",
|
||||||
"fixedMiddleTop",
|
"fixedMiddleTop",
|
||||||
],
|
],
|
||||||
"current_temperature": 22.4,
|
"current_temperature": 21.2,
|
||||||
"temperature": 25,
|
"temperature": 25,
|
||||||
"current_humidity": 38,
|
"current_humidity": 32.9,
|
||||||
"fan_mode": "high",
|
"fan_mode": "high",
|
||||||
"swing_mode": "stopped",
|
"swing_mode": "stopped",
|
||||||
"friendly_name": "Hallway",
|
"friendly_name": "Hallway",
|
||||||
@ -76,7 +77,10 @@ async def test_climate(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_fan(
|
async def test_climate_fan(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate fan service."""
|
"""Test the Sensibo climate fan service."""
|
||||||
|
|
||||||
@ -99,7 +103,7 @@ async def test_climate_fan(
|
|||||||
assert state2.attributes["fan_mode"] == "low"
|
assert state2.attributes["fan_mode"] == "low"
|
||||||
|
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"],
|
get_data.parsed["ABC999111"],
|
||||||
"active_features",
|
"active_features",
|
||||||
[
|
[
|
||||||
"timestamp",
|
"timestamp",
|
||||||
@ -113,7 +117,7 @@ async def test_climate_fan(
|
|||||||
)
|
)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -138,7 +142,10 @@ async def test_climate_fan(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_swing(
|
async def test_climate_swing(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate swing service."""
|
"""Test the Sensibo climate swing service."""
|
||||||
|
|
||||||
@ -161,7 +168,7 @@ async def test_climate_swing(
|
|||||||
assert state2.attributes["swing_mode"] == "fixedTop"
|
assert state2.attributes["swing_mode"] == "fixedTop"
|
||||||
|
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"],
|
get_data.parsed["ABC999111"],
|
||||||
"active_features",
|
"active_features",
|
||||||
[
|
[
|
||||||
"timestamp",
|
"timestamp",
|
||||||
@ -174,7 +181,7 @@ async def test_climate_swing(
|
|||||||
)
|
)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -199,7 +206,10 @@ async def test_climate_swing(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_temperatures(
|
async def test_climate_temperatures(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate temperature service."""
|
"""Test the Sensibo climate temperature service."""
|
||||||
|
|
||||||
@ -234,7 +244,7 @@ async def test_climate_temperatures(
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
state2 = hass.states.get("climate.hallway")
|
state2 = hass.states.get("climate.hallway")
|
||||||
assert state2.attributes["temperature"] == 18
|
assert state2.attributes["temperature"] == 17
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
||||||
@ -250,7 +260,7 @@ async def test_climate_temperatures(
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
state2 = hass.states.get("climate.hallway")
|
state2 = hass.states.get("climate.hallway")
|
||||||
assert state2.attributes["temperature"] == 18
|
assert state2.attributes["temperature"] == 17
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
||||||
@ -299,7 +309,7 @@ async def test_climate_temperatures(
|
|||||||
assert state2.attributes["temperature"] == 20
|
assert state2.attributes["temperature"] == 20
|
||||||
|
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"],
|
get_data.parsed["ABC999111"],
|
||||||
"active_features",
|
"active_features",
|
||||||
[
|
[
|
||||||
"timestamp",
|
"timestamp",
|
||||||
@ -312,7 +322,7 @@ async def test_climate_temperatures(
|
|||||||
)
|
)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -338,12 +348,15 @@ async def test_climate_temperatures(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_temperature_is_none(
|
async def test_climate_temperature_is_none(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate temperature service no temperature provided."""
|
"""Test the Sensibo climate temperature service no temperature provided."""
|
||||||
|
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"],
|
get_data.parsed["ABC999111"],
|
||||||
"active_features",
|
"active_features",
|
||||||
[
|
[
|
||||||
"timestamp",
|
"timestamp",
|
||||||
@ -357,13 +370,13 @@ async def test_climate_temperature_is_none(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"],
|
get_data.parsed["ABC999111"],
|
||||||
"target_temp",
|
"target_temp",
|
||||||
25,
|
25,
|
||||||
)
|
)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -395,12 +408,15 @@ async def test_climate_temperature_is_none(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_hvac_mode(
|
async def test_climate_hvac_mode(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate hvac mode service."""
|
"""Test the Sensibo climate hvac mode service."""
|
||||||
|
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
DATA_FROM_API.parsed["ABC999111"],
|
get_data.parsed["ABC999111"],
|
||||||
"active_features",
|
"active_features",
|
||||||
[
|
[
|
||||||
"timestamp",
|
"timestamp",
|
||||||
@ -415,7 +431,7 @@ async def test_climate_hvac_mode(
|
|||||||
)
|
)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -428,7 +444,7 @@ async def test_climate_hvac_mode(
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
||||||
return_value={"result": {"status": "Success"}},
|
return_value={"result": {"status": "Success"}},
|
||||||
@ -444,10 +460,10 @@ async def test_climate_hvac_mode(
|
|||||||
state2 = hass.states.get("climate.hallway")
|
state2 = hass.states.get("climate.hallway")
|
||||||
assert state2.state == "off"
|
assert state2.state == "off"
|
||||||
|
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "device_on", False)
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "device_on", False)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -457,7 +473,7 @@ async def test_climate_hvac_mode(
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
||||||
return_value={"result": {"status": "Success"}},
|
return_value={"result": {"status": "Success"}},
|
||||||
@ -475,15 +491,18 @@ async def test_climate_hvac_mode(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_on_off(
|
async def test_climate_on_off(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate on/off service."""
|
"""Test the Sensibo climate on/off service."""
|
||||||
|
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "hvac_mode", "heat")
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "hvac_mode", "heat")
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "device_on", True)
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "device_on", True)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -526,15 +545,18 @@ async def test_climate_on_off(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_service_failed(
|
async def test_climate_service_failed(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate service failed."""
|
"""Test the Sensibo climate service failed."""
|
||||||
|
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "hvac_mode", "heat")
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "hvac_mode", "heat")
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "device_on", True)
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "device_on", True)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -563,15 +585,18 @@ async def test_climate_service_failed(
|
|||||||
|
|
||||||
|
|
||||||
async def test_climate_assumed_state(
|
async def test_climate_assumed_state(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo climate assumed state service."""
|
"""Test the Sensibo climate assumed state service."""
|
||||||
|
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "hvac_mode", "heat")
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "hvac_mode", "heat")
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "device_on", True)
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "device_on", True)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
@ -584,7 +609,7 @@ async def test_climate_assumed_state(
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
"homeassistant.components.sensibo.util.SensiboClient.async_set_ac_state_property",
|
||||||
return_value={"result": {"status": "Success"}},
|
return_value={"result": {"status": "Success"}},
|
||||||
|
@ -15,13 +15,12 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.util import dt
|
from homeassistant.util import dt
|
||||||
|
|
||||||
from . import ENTRY_CONFIG
|
from . import ENTRY_CONFIG
|
||||||
from .response import DATA_FROM_API
|
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||||
|
|
||||||
|
|
||||||
async def test_coordinator(
|
async def test_coordinator(
|
||||||
hass: HomeAssistant, monkeypatch: pytest.MonkeyPatch
|
hass: HomeAssistant, monkeypatch: pytest.MonkeyPatch, get_data: SensiboData
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo coordinator with errors."""
|
"""Test the Sensibo coordinator with errors."""
|
||||||
config_entry = MockConfigEntry(
|
config_entry = MockConfigEntry(
|
||||||
@ -44,9 +43,9 @@ async def test_coordinator(
|
|||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_me",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_me",
|
||||||
return_value={"result": {"username": "username"}},
|
return_value={"result": {"username": "username"}},
|
||||||
):
|
):
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "hvac_mode", "heat")
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "hvac_mode", "heat")
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "device_on", True)
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "device_on", True)
|
||||||
mock_data.return_value = DATA_FROM_API
|
mock_data.return_value = get_data
|
||||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
mock_data.assert_called_once()
|
mock_data.assert_called_once()
|
||||||
@ -71,10 +70,10 @@ async def test_coordinator(
|
|||||||
assert state.state == STATE_UNAVAILABLE
|
assert state.state == STATE_UNAVAILABLE
|
||||||
mock_data.reset_mock()
|
mock_data.reset_mock()
|
||||||
|
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "hvac_mode", "heat")
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "hvac_mode", "heat")
|
||||||
monkeypatch.setattr(DATA_FROM_API.parsed["ABC999111"], "device_on", True)
|
monkeypatch.setattr(get_data.parsed["ABC999111"], "device_on", True)
|
||||||
|
|
||||||
mock_data.return_value = DATA_FROM_API
|
mock_data.return_value = get_data
|
||||||
mock_data.side_effect = None
|
mock_data.side_effect = None
|
||||||
async_fire_time_changed(hass, dt.utcnow() + timedelta(minutes=5))
|
async_fire_time_changed(hass, dt.utcnow() + timedelta(minutes=5))
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -17,32 +17,10 @@ async def test_diagnostics(
|
|||||||
|
|
||||||
diag = await get_diagnostics_for_config_entry(hass, hass_client, entry)
|
diag = await get_diagnostics_for_config_entry(hass, hass_client, entry)
|
||||||
|
|
||||||
assert diag == {
|
assert diag["status"] == "success"
|
||||||
"status": "success",
|
for device in diag["result"]:
|
||||||
"result": [
|
assert device["id"] == "**REDACTED**"
|
||||||
{
|
assert device["qrId"] == "**REDACTED**"
|
||||||
"id": "**REDACTED**",
|
assert device["macAddress"] == "**REDACTED**"
|
||||||
"qrId": "**REDACTED**",
|
assert device["location"] == "**REDACTED**"
|
||||||
"room": {"uid": "**REDACTED**", "name": "Hallway", "icon": "Lounge"},
|
assert device["productModel"] in ["skyv2", "pure"]
|
||||||
"acState": {
|
|
||||||
"timestamp": {
|
|
||||||
"time": "2022-04-30T19:58:15.544787Z",
|
|
||||||
"secondsAgo": 0,
|
|
||||||
},
|
|
||||||
"on": False,
|
|
||||||
"mode": "fan",
|
|
||||||
"fanLevel": "high",
|
|
||||||
"swing": "stopped",
|
|
||||||
"horizontalSwing": "stopped",
|
|
||||||
"light": "on",
|
|
||||||
},
|
|
||||||
"location": "**REDACTED**",
|
|
||||||
"accessPoint": {"ssid": "**REDACTED**", "password": None},
|
|
||||||
"macAddress": "**REDACTED**",
|
|
||||||
"autoOffMinutes": None,
|
|
||||||
"autoOffEnabled": False,
|
|
||||||
"antiMoldTimer": None,
|
|
||||||
"antiMoldConfig": None,
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
@ -4,6 +4,7 @@ from __future__ import annotations
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pysensibo.model import SensiboData
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.climate.const import (
|
from homeassistant.components.climate.const import (
|
||||||
@ -24,12 +25,12 @@ from homeassistant.exceptions import HomeAssistantError
|
|||||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||||
from homeassistant.util import dt
|
from homeassistant.util import dt
|
||||||
|
|
||||||
from .response import DATA_FROM_API
|
|
||||||
|
|
||||||
from tests.common import async_fire_time_changed
|
from tests.common import async_fire_time_changed
|
||||||
|
|
||||||
|
|
||||||
async def test_entity(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
async def test_entity(
|
||||||
|
hass: HomeAssistant, load_int: ConfigEntry, get_data: SensiboData
|
||||||
|
) -> None:
|
||||||
"""Test the Sensibo climate."""
|
"""Test the Sensibo climate."""
|
||||||
|
|
||||||
state1 = hass.states.get("climate.hallway")
|
state1 = hass.states.get("climate.hallway")
|
||||||
@ -55,7 +56,10 @@ async def test_entity(hass: HomeAssistant, load_int: ConfigEntry) -> None:
|
|||||||
|
|
||||||
@pytest.mark.parametrize("p_error", SENSIBO_ERRORS)
|
@pytest.mark.parametrize("p_error", SENSIBO_ERRORS)
|
||||||
async def test_entity_send_command(
|
async def test_entity_send_command(
|
||||||
hass: HomeAssistant, p_error: Exception, load_int: ConfigEntry
|
hass: HomeAssistant,
|
||||||
|
p_error: Exception,
|
||||||
|
load_int: ConfigEntry,
|
||||||
|
get_data: SensiboData,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo send command with error."""
|
"""Test the Sensibo send command with error."""
|
||||||
|
|
||||||
@ -94,7 +98,7 @@ async def test_entity_send_command(
|
|||||||
|
|
||||||
|
|
||||||
async def test_entity_send_command_calibration(
|
async def test_entity_send_command_calibration(
|
||||||
hass: HomeAssistant, load_int: ConfigEntry
|
hass: HomeAssistant, load_int: ConfigEntry, get_data: SensiboData
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Sensibo send command for calibration."""
|
"""Test the Sensibo send command for calibration."""
|
||||||
|
|
||||||
@ -106,7 +110,7 @@ async def test_entity_send_command_calibration(
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
):
|
):
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass,
|
hass,
|
||||||
|
@ -3,6 +3,8 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pysensibo.model import SensiboData
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.sensibo.const import DOMAIN
|
from homeassistant.components.sensibo.const import DOMAIN
|
||||||
from homeassistant.components.sensibo.util import NoUsernameError
|
from homeassistant.components.sensibo.util import NoUsernameError
|
||||||
@ -10,12 +12,11 @@ from homeassistant.config_entries import SOURCE_USER
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from . import ENTRY_CONFIG
|
from . import ENTRY_CONFIG
|
||||||
from .response import DATA_FROM_API
|
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_entry(hass: HomeAssistant) -> None:
|
async def test_setup_entry(hass: HomeAssistant, get_data: SensiboData) -> None:
|
||||||
"""Test setup entry."""
|
"""Test setup entry."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -29,7 +30,7 @@ async def test_setup_entry(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
||||||
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
||||||
@ -43,7 +44,7 @@ async def test_setup_entry(hass: HomeAssistant) -> None:
|
|||||||
assert entry.state == config_entries.ConfigEntryState.LOADED
|
assert entry.state == config_entries.ConfigEntryState.LOADED
|
||||||
|
|
||||||
|
|
||||||
async def test_migrate_entry(hass: HomeAssistant) -> None:
|
async def test_migrate_entry(hass: HomeAssistant, get_data: SensiboData) -> None:
|
||||||
"""Test migrate entry unique id."""
|
"""Test migrate entry unique id."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -57,7 +58,7 @@ async def test_migrate_entry(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
||||||
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
||||||
@ -73,7 +74,7 @@ async def test_migrate_entry(hass: HomeAssistant) -> None:
|
|||||||
assert entry.unique_id == "username"
|
assert entry.unique_id == "username"
|
||||||
|
|
||||||
|
|
||||||
async def test_migrate_entry_fails(hass: HomeAssistant) -> None:
|
async def test_migrate_entry_fails(hass: HomeAssistant, get_data: SensiboData) -> None:
|
||||||
"""Test migrate entry unique id."""
|
"""Test migrate entry unique id."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -101,7 +102,7 @@ async def test_migrate_entry_fails(hass: HomeAssistant) -> None:
|
|||||||
assert entry.unique_id == "12"
|
assert entry.unique_id == "12"
|
||||||
|
|
||||||
|
|
||||||
async def test_unload_entry(hass: HomeAssistant) -> None:
|
async def test_unload_entry(hass: HomeAssistant, get_data: SensiboData) -> None:
|
||||||
"""Test unload an entry."""
|
"""Test unload an entry."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -115,7 +116,7 @@ async def test_unload_entry(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
"homeassistant.components.sensibo.coordinator.SensiboClient.async_get_devices_data",
|
||||||
return_value=DATA_FROM_API,
|
return_value=get_data,
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
"homeassistant.components.sensibo.util.SensiboClient.async_get_devices",
|
||||||
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
return_value={"result": [{"id": "xyzxyz"}, {"id": "abcabc"}]},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user