hass-core/tests/test_const.py

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

185 lines
5.8 KiB
Python
Raw Normal View History

"""Test const module."""
from enum import Enum
import pytest
from homeassistant import const
from homeassistant.components import sensor
from tests.common import (
help_test_all,
import_and_test_deprecated_constant,
import_and_test_deprecated_constant_enum,
)
def _create_tuples(
value: Enum | list[Enum], constant_prefix: str
) -> list[tuple[Enum, str]]:
return [(enum, constant_prefix) for enum in value]
def test_all() -> None:
"""Test module.__all__ is correctly set."""
help_test_all(const)
@pytest.mark.parametrize(
("enum", "constant_prefix"),
_create_tuples(const.EntityCategory, "ENTITY_CATEGORY_")
+ _create_tuples(
[
sensor.SensorDeviceClass.AQI,
sensor.SensorDeviceClass.BATTERY,
sensor.SensorDeviceClass.CO,
sensor.SensorDeviceClass.CO2,
sensor.SensorDeviceClass.CURRENT,
sensor.SensorDeviceClass.DATE,
sensor.SensorDeviceClass.ENERGY,
sensor.SensorDeviceClass.FREQUENCY,
sensor.SensorDeviceClass.GAS,
sensor.SensorDeviceClass.HUMIDITY,
sensor.SensorDeviceClass.ILLUMINANCE,
sensor.SensorDeviceClass.MONETARY,
sensor.SensorDeviceClass.NITROGEN_DIOXIDE,
sensor.SensorDeviceClass.NITROGEN_MONOXIDE,
sensor.SensorDeviceClass.NITROUS_OXIDE,
sensor.SensorDeviceClass.OZONE,
sensor.SensorDeviceClass.PM1,
sensor.SensorDeviceClass.PM10,
sensor.SensorDeviceClass.PM25,
sensor.SensorDeviceClass.POWER_FACTOR,
sensor.SensorDeviceClass.POWER,
sensor.SensorDeviceClass.PRESSURE,
sensor.SensorDeviceClass.SIGNAL_STRENGTH,
sensor.SensorDeviceClass.SULPHUR_DIOXIDE,
sensor.SensorDeviceClass.TEMPERATURE,
sensor.SensorDeviceClass.TIMESTAMP,
sensor.SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
sensor.SensorDeviceClass.VOLTAGE,
],
"DEVICE_CLASS_",
)
+ _create_tuples(const.UnitOfApparentPower, "POWER_")
+ _create_tuples(const.UnitOfPower, "POWER_")
+ _create_tuples(
[
const.UnitOfEnergy.KILO_WATT_HOUR,
const.UnitOfEnergy.MEGA_WATT_HOUR,
const.UnitOfEnergy.WATT_HOUR,
],
"ENERGY_",
)
+ _create_tuples(const.UnitOfElectricCurrent, "ELECTRIC_CURRENT_")
+ _create_tuples(const.UnitOfElectricPotential, "ELECTRIC_POTENTIAL_")
+ _create_tuples(const.UnitOfTemperature, "TEMP_")
+ _create_tuples(const.UnitOfTime, "TIME_")
+ _create_tuples(
[
const.UnitOfLength.MILLIMETERS,
const.UnitOfLength.CENTIMETERS,
const.UnitOfLength.METERS,
const.UnitOfLength.KILOMETERS,
const.UnitOfLength.INCHES,
const.UnitOfLength.FEET,
const.UnitOfLength.MILES,
],
"LENGTH_",
)
+ _create_tuples(const.UnitOfFrequency, "FREQUENCY_")
+ _create_tuples(const.UnitOfPressure, "PRESSURE_")
+ _create_tuples(
[
const.UnitOfVolume.CUBIC_FEET,
const.UnitOfVolume.CUBIC_METERS,
const.UnitOfVolume.LITERS,
const.UnitOfVolume.MILLILITERS,
const.UnitOfVolume.GALLONS,
],
"VOLUME_",
)
+ _create_tuples(
[
const.UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
const.UnitOfVolumeFlowRate.CUBIC_FEET_PER_MINUTE,
],
"VOLUME_FLOW_RATE_",
)
+ _create_tuples(
[
const.UnitOfMass.GRAMS,
const.UnitOfMass.KILOGRAMS,
const.UnitOfMass.MILLIGRAMS,
const.UnitOfMass.MICROGRAMS,
const.UnitOfMass.OUNCES,
const.UnitOfMass.POUNDS,
],
"MASS_",
)
+ _create_tuples(const.UnitOfIrradiance, "IRRADIATION_")
+ _create_tuples(
[
const.UnitOfPrecipitationDepth.INCHES,
const.UnitOfPrecipitationDepth.MILLIMETERS,
const.UnitOfVolumetricFlux.MILLIMETERS_PER_HOUR,
const.UnitOfVolumetricFlux.INCHES_PER_HOUR,
],
"PRECIPITATION_",
)
+ _create_tuples(
[
const.UnitOfSpeed.FEET_PER_SECOND,
const.UnitOfSpeed.METERS_PER_SECOND,
const.UnitOfSpeed.KILOMETERS_PER_HOUR,
const.UnitOfSpeed.KNOTS,
const.UnitOfSpeed.MILES_PER_HOUR,
],
"SPEED_",
)
+ _create_tuples(
[
const.UnitOfVolumetricFlux.MILLIMETERS_PER_DAY,
const.UnitOfVolumetricFlux.INCHES_PER_DAY,
const.UnitOfVolumetricFlux.INCHES_PER_HOUR,
],
"SPEED_",
)
+ _create_tuples(const.UnitOfInformation, "DATA_")
+ _create_tuples(const.UnitOfDataRate, "DATA_RATE_"),
)
def test_deprecated_constants(
caplog: pytest.LogCaptureFixture,
enum: Enum,
constant_prefix: str,
) -> None:
"""Test deprecated constants."""
import_and_test_deprecated_constant_enum(
caplog, const, enum, constant_prefix, "2025.1"
)
@pytest.mark.parametrize(
("replacement", "constant_name"),
[
(const.UnitOfLength.YARDS, "LENGTH_YARD"),
(const.UnitOfSoundPressure.DECIBEL, "SOUND_PRESSURE_DB"),
(const.UnitOfSoundPressure.WEIGHTED_DECIBEL_A, "SOUND_PRESSURE_WEIGHTED_DBA"),
(const.UnitOfVolume.FLUID_OUNCES, "VOLUME_FLUID_OUNCE"),
],
)
def test_deprecated_constant_name_changes(
caplog: pytest.LogCaptureFixture,
replacement: Enum,
constant_name: str,
) -> None:
"""Test deprecated constants, where the name is not the same as the enum value."""
import_and_test_deprecated_constant(
caplog,
const,
constant_name,
f"{replacement.__class__.__name__}.{replacement.name}",
replacement,
"2025.1",
)