hass-core/tests/components/number/test_significant_change.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

96 lines
3.5 KiB
Python
Raw Normal View History

"""Test the Number significant change platform."""
import pytest
from homeassistant.components.number import NumberDeviceClass
from homeassistant.components.number.significant_change import (
async_check_significant_change,
)
from homeassistant.const import (
ATTR_DEVICE_CLASS,
ATTR_UNIT_OF_MEASUREMENT,
PERCENTAGE,
UnitOfTemperature,
)
AQI_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.AQI}
BATTERY_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.BATTERY}
CO_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.CO}
CO2_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.CO2}
HUMIDITY_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.HUMIDITY}
MOISTURE_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.MOISTURE}
PM1_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.PM1}
PM10_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.PM10}
PM25_ATTRS = {ATTR_DEVICE_CLASS: NumberDeviceClass.PM25}
POWER_FACTOR_ATTRS = {
ATTR_DEVICE_CLASS: NumberDeviceClass.POWER_FACTOR,
}
POWER_FACTOR_ATTRS_PERCENTAGE = {
ATTR_DEVICE_CLASS: NumberDeviceClass.POWER_FACTOR,
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
}
TEMP_CELSIUS_ATTRS = {
ATTR_DEVICE_CLASS: NumberDeviceClass.TEMPERATURE,
ATTR_UNIT_OF_MEASUREMENT: UnitOfTemperature.CELSIUS,
}
TEMP_FREEDOM_ATTRS = {
ATTR_DEVICE_CLASS: NumberDeviceClass.TEMPERATURE,
ATTR_UNIT_OF_MEASUREMENT: UnitOfTemperature.FAHRENHEIT,
}
VOLATILE_ORGANIC_COMPOUNDS_ATTRS = {
ATTR_DEVICE_CLASS: NumberDeviceClass.VOLATILE_ORGANIC_COMPOUNDS
}
@pytest.mark.parametrize(
("old_state", "new_state", "attrs", "result"),
[
("0", "0.9", {}, None),
("0", "1", AQI_ATTRS, True),
("1", "0", AQI_ATTRS, True),
("0.1", "0.5", AQI_ATTRS, False),
("0.5", "0.1", AQI_ATTRS, False),
("99", "100", AQI_ATTRS, False),
("100", "99", AQI_ATTRS, False),
("101", "99", AQI_ATTRS, False),
("99", "101", AQI_ATTRS, True),
("100", "100", BATTERY_ATTRS, False),
("100", "99", BATTERY_ATTRS, True),
("0", "1", CO_ATTRS, True),
("0.1", "0.5", CO_ATTRS, False),
("0", "1", CO2_ATTRS, True),
("0.1", "0.5", CO2_ATTRS, False),
("100", "100", HUMIDITY_ATTRS, False),
("100", "99", HUMIDITY_ATTRS, True),
("100", "100", MOISTURE_ATTRS, False),
("100", "99", MOISTURE_ATTRS, True),
("0", "1", PM1_ATTRS, True),
("0.1", "0.5", PM1_ATTRS, False),
("0", "1", PM10_ATTRS, True),
("0.1", "0.5", PM10_ATTRS, False),
("0", "1", PM25_ATTRS, True),
("0.1", "0.5", PM25_ATTRS, False),
("0.1", "0.2", POWER_FACTOR_ATTRS, True),
("0.1", "0.19", POWER_FACTOR_ATTRS, False),
("1", "2", POWER_FACTOR_ATTRS_PERCENTAGE, True),
("1", "1.9", POWER_FACTOR_ATTRS_PERCENTAGE, False),
("12", "12", TEMP_CELSIUS_ATTRS, False),
("12", "13", TEMP_CELSIUS_ATTRS, True),
("12.1", "12.2", TEMP_CELSIUS_ATTRS, False),
("70", "71", TEMP_FREEDOM_ATTRS, True),
("70", "70.5", TEMP_FREEDOM_ATTRS, False),
("fail", "70", TEMP_FREEDOM_ATTRS, True),
("70", "fail", TEMP_FREEDOM_ATTRS, False),
("0", "1", VOLATILE_ORGANIC_COMPOUNDS_ATTRS, True),
("0.1", "0.5", VOLATILE_ORGANIC_COMPOUNDS_ATTRS, False),
],
)
async def test_significant_change_temperature(
old_state, new_state, attrs, result
) -> None:
"""Detect temperature significant changes."""
assert (
async_check_significant_change(None, old_state, attrs, new_state, attrs)
is result
)