135 lines
4.3 KiB
Python
135 lines
4.3 KiB
Python
"""The test for the ecobee thermostat humidifier module."""
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.ecobee.humidifier import MODE_MANUAL, MODE_OFF
|
|
from homeassistant.components.humidifier import (
|
|
ATTR_AVAILABLE_MODES,
|
|
ATTR_HUMIDITY,
|
|
ATTR_MAX_HUMIDITY,
|
|
ATTR_MIN_HUMIDITY,
|
|
DEFAULT_MAX_HUMIDITY,
|
|
DEFAULT_MIN_HUMIDITY,
|
|
DOMAIN as HUMIDIFIER_DOMAIN,
|
|
MODE_AUTO,
|
|
SERVICE_SET_HUMIDITY,
|
|
SERVICE_SET_MODE,
|
|
HumidifierDeviceClass,
|
|
HumidifierEntityFeature,
|
|
)
|
|
from homeassistant.const import (
|
|
ATTR_DEVICE_CLASS,
|
|
ATTR_ENTITY_ID,
|
|
ATTR_FRIENDLY_NAME,
|
|
ATTR_MODE,
|
|
ATTR_SUPPORTED_FEATURES,
|
|
SERVICE_TURN_OFF,
|
|
SERVICE_TURN_ON,
|
|
STATE_OFF,
|
|
STATE_ON,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .common import setup_platform
|
|
|
|
DEVICE_ID = "humidifier.ecobee"
|
|
|
|
|
|
async def test_attributes(hass: HomeAssistant) -> None:
|
|
"""Test the humidifier attributes are correct."""
|
|
await setup_platform(hass, HUMIDIFIER_DOMAIN)
|
|
|
|
state = hass.states.get(DEVICE_ID)
|
|
assert state.state == STATE_ON
|
|
assert state.attributes.get(ATTR_MIN_HUMIDITY) == DEFAULT_MIN_HUMIDITY
|
|
assert state.attributes.get(ATTR_MAX_HUMIDITY) == DEFAULT_MAX_HUMIDITY
|
|
assert state.attributes.get(ATTR_HUMIDITY) == 40
|
|
assert state.attributes.get(ATTR_AVAILABLE_MODES) == [
|
|
MODE_OFF,
|
|
MODE_AUTO,
|
|
MODE_MANUAL,
|
|
]
|
|
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "ecobee"
|
|
assert state.attributes.get(ATTR_DEVICE_CLASS) == HumidifierDeviceClass.HUMIDIFIER
|
|
assert (
|
|
state.attributes.get(ATTR_SUPPORTED_FEATURES) == HumidifierEntityFeature.MODES
|
|
)
|
|
|
|
|
|
async def test_turn_on(hass: HomeAssistant) -> None:
|
|
"""Test the humidifier can be turned on."""
|
|
with patch("pyecobee.Ecobee.set_humidifier_mode") as mock_turn_on:
|
|
await setup_platform(hass, HUMIDIFIER_DOMAIN)
|
|
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
SERVICE_TURN_ON,
|
|
{ATTR_ENTITY_ID: DEVICE_ID},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
mock_turn_on.assert_called_once_with(0, "manual")
|
|
|
|
|
|
async def test_turn_off(hass: HomeAssistant) -> None:
|
|
"""Test the humidifier can be turned off."""
|
|
with patch("pyecobee.Ecobee.set_humidifier_mode") as mock_turn_off:
|
|
await setup_platform(hass, HUMIDIFIER_DOMAIN)
|
|
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
SERVICE_TURN_OFF,
|
|
{ATTR_ENTITY_ID: DEVICE_ID},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
mock_turn_off.assert_called_once_with(0, STATE_OFF)
|
|
|
|
|
|
async def test_set_mode(hass: HomeAssistant) -> None:
|
|
"""Test the humidifier can change modes."""
|
|
with patch("pyecobee.Ecobee.set_humidifier_mode") as mock_set_mode:
|
|
await setup_platform(hass, HUMIDIFIER_DOMAIN)
|
|
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
SERVICE_SET_MODE,
|
|
{ATTR_ENTITY_ID: DEVICE_ID, ATTR_MODE: MODE_AUTO},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
mock_set_mode.assert_called_once_with(0, MODE_AUTO)
|
|
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
SERVICE_SET_MODE,
|
|
{ATTR_ENTITY_ID: DEVICE_ID, ATTR_MODE: MODE_MANUAL},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
mock_set_mode.assert_called_with(0, MODE_MANUAL)
|
|
|
|
with pytest.raises(ValueError):
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
SERVICE_SET_MODE,
|
|
{ATTR_ENTITY_ID: DEVICE_ID, ATTR_MODE: "ModeThatDoesntExist"},
|
|
blocking=True,
|
|
)
|
|
|
|
|
|
async def test_set_humidity(hass: HomeAssistant) -> None:
|
|
"""Test the humidifier can set humidity level."""
|
|
with patch("pyecobee.Ecobee.set_humidity") as mock_set_humidity:
|
|
await setup_platform(hass, HUMIDIFIER_DOMAIN)
|
|
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
SERVICE_SET_HUMIDITY,
|
|
{ATTR_ENTITY_ID: DEVICE_ID, ATTR_HUMIDITY: 60},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
mock_set_humidity.assert_called_once_with(0, 60)
|