1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-14 20:41:24 +01:00
Files
core/tests/components/lutron/test_init.py
T
cdheiser 28e8d7c3eb Add tests to lutron (#162055)
Co-authored-by: Joostlek <joostlek@outlook.com>
2026-02-24 22:30:31 +01:00

102 lines
3.9 KiB
Python

"""Test Lutron integration setup."""
from unittest.mock import MagicMock
from homeassistant.components.lutron.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry
async def test_setup_entry(
hass: HomeAssistant, mock_lutron: MagicMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test setting up the integration."""
mock_config_entry.add_to_hass(hass)
assert await async_setup_component(hass, "lutron", {})
await hass.async_block_till_done()
assert mock_config_entry.runtime_data.client is mock_lutron
assert len(mock_config_entry.runtime_data.lights) == 1
# Verify that the unique ID is generated correctly.
# This prevents regression in unique ID generation which would be a breaking change.
entity_registry = er.async_get(hass)
# The light from mock_lutron has uuid="light_uuid" and guid="12345678901"
expected_unique_id = "12345678901_light_uuid"
entry = entity_registry.async_get("light.test_light")
assert entry.unique_id == expected_unique_id
async def test_unload_entry(
hass: HomeAssistant, mock_lutron: MagicMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test unloading the integration."""
mock_config_entry.add_to_hass(hass)
assert await async_setup_component(hass, "lutron", {})
await hass.async_block_till_done()
assert await hass.config_entries.async_unload(mock_config_entry.entry_id)
await hass.async_block_till_done()
async def test_unique_id_migration(
hass: HomeAssistant, mock_lutron: MagicMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test migration of legacy unique IDs to the newer UUID-based format.
In older versions of the integration, unique IDs were based on a legacy UUID format.
The integration now prefers a newer UUID format when available. This test ensures
that existing entities and devices are automatically migrated to the new format
without losing their registry entries.
"""
mock_config_entry.add_to_hass(hass)
# Setup registries with an entry using the "legacy" unique ID format.
# This simulates a user who had configured the integration in an older version.
entity_registry = er.async_get(hass)
device_registry = dr.async_get(hass)
legacy_unique_id = "12345678901_light_legacy_uuid"
new_unique_id = "12345678901_light_uuid"
# Create a device in the registry using the legacy ID
device = device_registry.async_get_or_create(
config_entry_id=mock_config_entry.entry_id,
identifiers={(DOMAIN, legacy_unique_id)},
manufacturer="Lutron",
name="Test Light",
)
# Create an entity in the registry using the legacy ID
entity = entity_registry.async_get_or_create(
domain="light",
platform="lutron",
unique_id=legacy_unique_id,
config_entry=mock_config_entry,
device_id=device.id,
)
# Verify our starting state: registry holds the legacy ID
assert entity.unique_id == legacy_unique_id
assert (DOMAIN, legacy_unique_id) in device.identifiers
# Trigger the integration setup.
# The async_setup_entry logic will detect the legacy IDs in the registry
# and update them to the new UUIDs provided by the mock_lutron fixture.
assert await async_setup_component(hass, "lutron", {})
await hass.async_block_till_done()
# Verify that the entity's unique ID has been updated to the new format.
entity = entity_registry.async_get(entity.entity_id)
assert entity.unique_id == new_unique_id
# Verify that the device's identifiers have also been migrated.
device = device_registry.async_get(device.id)
assert (DOMAIN, new_unique_id) in device.identifiers
assert (DOMAIN, legacy_unique_id) not in device.identifiers