"""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 )