185 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
"""Test const module."""
 | 
						|
 | 
						|
from enum import Enum
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
from homeassistant import const
 | 
						|
from homeassistant.components import sensor
 | 
						|
 | 
						|
from .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",
 | 
						|
    )
 |