core/tests/util/test_temperature.py

129 lines
4.4 KiB
Python

"""Test Home Assistant temperature utility functions."""
import pytest
from homeassistant.const import UnitOfTemperature
from homeassistant.exceptions import HomeAssistantError
import homeassistant.util.temperature as temperature_util
INVALID_SYMBOL = "bob"
VALID_SYMBOL = UnitOfTemperature.CELSIUS
def test_raise_deprecation_warning(caplog: pytest.LogCaptureFixture) -> None:
"""Ensure that a warning is raised on use of convert."""
assert (
temperature_util.convert(
2, UnitOfTemperature.CELSIUS, UnitOfTemperature.CELSIUS
)
== 2
)
assert "use unit_conversion.TemperatureConverter instead" in caplog.text
@pytest.mark.parametrize(
("function_name", "value", "expected"),
[
("fahrenheit_to_celsius", 75.2, 24),
("kelvin_to_celsius", 297.65, 24.5),
("celsius_to_fahrenheit", 23, 73.4),
("celsius_to_kelvin", 23, 296.15),
],
)
def test_deprecated_functions(
function_name: str, value: float, expected: float
) -> None:
"""Test that deprecated function still work."""
convert = getattr(temperature_util, function_name)
assert convert(value) == expected
def test_convert_same_unit() -> None:
"""Test conversion from any unit to same unit."""
assert (
temperature_util.convert(
2, UnitOfTemperature.CELSIUS, UnitOfTemperature.CELSIUS
)
== 2
)
assert (
temperature_util.convert(
3, UnitOfTemperature.FAHRENHEIT, UnitOfTemperature.FAHRENHEIT
)
== 3
)
assert (
temperature_util.convert(4, UnitOfTemperature.KELVIN, UnitOfTemperature.KELVIN)
== 4
)
def test_convert_invalid_unit() -> None:
"""Test exception is thrown for invalid units."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
temperature_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL)
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
temperature_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL)
def test_convert_nonnumeric_value() -> None:
"""Test exception is thrown for nonnumeric type."""
with pytest.raises(TypeError):
temperature_util.convert(
"a", UnitOfTemperature.CELSIUS, UnitOfTemperature.FAHRENHEIT
)
def test_convert_from_celsius() -> None:
"""Test conversion from C to other units."""
celsius = 100
assert temperature_util.convert(
celsius, UnitOfTemperature.CELSIUS, UnitOfTemperature.FAHRENHEIT
) == pytest.approx(212.0)
assert temperature_util.convert(
celsius, UnitOfTemperature.CELSIUS, UnitOfTemperature.KELVIN
) == pytest.approx(373.15)
# Interval
assert temperature_util.convert(
celsius, UnitOfTemperature.CELSIUS, UnitOfTemperature.FAHRENHEIT, True
) == pytest.approx(180.0)
assert temperature_util.convert(
celsius, UnitOfTemperature.CELSIUS, UnitOfTemperature.KELVIN, True
) == pytest.approx(100)
def test_convert_from_fahrenheit() -> None:
"""Test conversion from F to other units."""
fahrenheit = 100
assert temperature_util.convert(
fahrenheit, UnitOfTemperature.FAHRENHEIT, UnitOfTemperature.CELSIUS
) == pytest.approx(37.77777777777778)
assert temperature_util.convert(
fahrenheit, UnitOfTemperature.FAHRENHEIT, UnitOfTemperature.KELVIN
) == pytest.approx(310.92777777777775)
# Interval
assert temperature_util.convert(
fahrenheit, UnitOfTemperature.FAHRENHEIT, UnitOfTemperature.CELSIUS, True
) == pytest.approx(55.55555555555556)
assert temperature_util.convert(
fahrenheit, UnitOfTemperature.FAHRENHEIT, UnitOfTemperature.KELVIN, True
) == pytest.approx(55.55555555555556)
def test_convert_from_kelvin() -> None:
"""Test conversion from K to other units."""
kelvin = 100
assert temperature_util.convert(
kelvin, UnitOfTemperature.KELVIN, UnitOfTemperature.CELSIUS
) == pytest.approx(-173.15)
assert temperature_util.convert(
kelvin, UnitOfTemperature.KELVIN, UnitOfTemperature.FAHRENHEIT
) == pytest.approx(-279.66999999999996)
# Interval
assert temperature_util.convert(
kelvin, UnitOfTemperature.KELVIN, UnitOfTemperature.FAHRENHEIT, True
) == pytest.approx(180.0)
assert temperature_util.convert(
kelvin, UnitOfTemperature.KELVIN, UnitOfTemperature.KELVIN, True
) == pytest.approx(100)