1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 19:09:45 +00:00
Files
core/tests/helpers/template/test_helpers.py

107 lines
3.9 KiB
Python

"""Test template helper functions."""
import pytest
from homeassistant.core import HomeAssistant
from homeassistant.helpers import (
area_registry as ar,
device_registry as dr,
entity_registry as er,
)
from homeassistant.helpers.template.helpers import raise_no_default, resolve_area_id
from tests.common import MockConfigEntry
def test_raise_no_default() -> None:
"""Test raise_no_default raises ValueError with correct message."""
with pytest.raises(
ValueError,
match="Template error: test got invalid input 'invalid' when rendering or compiling template '' but no default was specified",
):
raise_no_default("test", "invalid")
async def test_resolve_area_id(
hass: HomeAssistant,
area_registry: ar.AreaRegistry,
device_registry: dr.DeviceRegistry,
entity_registry: er.EntityRegistry,
) -> None:
"""Test resolve_area_id function."""
config_entry = MockConfigEntry(domain="light")
config_entry.add_to_hass(hass)
# Test non existing entity id
assert resolve_area_id(hass, "sensor.fake") is None
# Test non existing device id (hex value)
assert resolve_area_id(hass, "123abc") is None
# Test non existing area name
assert resolve_area_id(hass, "fake area name") is None
# Test wrong value type
assert resolve_area_id(hass, 56) is None
area_entry_entity_id = area_registry.async_get_or_create("sensor.fake")
# Test device with single entity, which has no area
device_entry = device_registry.async_get_or_create(
config_entry_id=config_entry.entry_id,
connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
)
entity_entry = entity_registry.async_get_or_create(
"light",
"hue",
"5678",
config_entry=config_entry,
device_id=device_entry.id,
)
assert resolve_area_id(hass, device_entry.id) is None
assert resolve_area_id(hass, entity_entry.entity_id) is None
# Test device ID, entity ID and area name as input with area name that looks like
# a device ID
area_entry_hex = area_registry.async_get_or_create("123abc")
device_entry = device_registry.async_update_device(
device_entry.id, area_id=area_entry_hex.id
)
entity_entry = entity_registry.async_update_entity(
entity_entry.entity_id, area_id=area_entry_hex.id
)
assert resolve_area_id(hass, device_entry.id) == area_entry_hex.id
assert resolve_area_id(hass, entity_entry.entity_id) == area_entry_hex.id
assert resolve_area_id(hass, area_entry_hex.name) == area_entry_hex.id
# Test device ID, entity ID and area name as input with area name that looks like an
# entity ID
area_entry_entity_id = area_registry.async_get_or_create("sensor.fake")
device_entry = device_registry.async_update_device(
device_entry.id, area_id=area_entry_entity_id.id
)
entity_entry = entity_registry.async_update_entity(
entity_entry.entity_id, area_id=area_entry_entity_id.id
)
assert resolve_area_id(hass, device_entry.id) == area_entry_entity_id.id
assert resolve_area_id(hass, entity_entry.entity_id) == area_entry_entity_id.id
assert resolve_area_id(hass, area_entry_entity_id.name) == area_entry_entity_id.id
# Make sure that when entity doesn't have an area but its device does, that's what
# gets returned
entity_entry = entity_registry.async_update_entity(
entity_entry.entity_id, area_id=None
)
assert resolve_area_id(hass, entity_entry.entity_id) == area_entry_entity_id.id
# Test area alias
area_with_alias = area_registry.async_get_or_create("Living Room")
area_registry.async_update(area_with_alias.id, aliases={"lounge", "family room"})
assert resolve_area_id(hass, "Living Room") == area_with_alias.id
assert resolve_area_id(hass, "lounge") == area_with_alias.id
assert resolve_area_id(hass, "family room") == area_with_alias.id