Fix removing of smarthome templates on startup of AVM Fritz!SmartHome integration (#144506)

This commit is contained in:
Michael 2025-05-08 21:54:49 +02:00 committed by GitHub
parent 5df09c4f13
commit 374b3ac6c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 4 deletions

View File

@ -92,7 +92,7 @@ class FritzboxDataUpdateCoordinator(DataUpdateCoordinator[FritzboxCoordinatorDat
available_main_ains = [
ain
for ain, dev in data.devices.items()
for ain, dev in data.devices.items() | data.templates.items()
if dev.device_and_unit_id[1] is None
]
device_reg = dr.async_get(self.hass)

View File

@ -15,7 +15,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.util.dt import utcnow
from . import FritzDeviceCoverMock, FritzDeviceSwitchMock
from . import FritzDeviceCoverMock, FritzDeviceSwitchMock, FritzEntityBaseMock
from .const import MOCK_CONFIG
from tests.common import MockConfigEntry, async_fire_time_changed
@ -84,6 +84,8 @@ async def test_coordinator_automatic_registry_cleanup(
entity_registry: er.EntityRegistry,
) -> None:
"""Test automatic registry cleanup."""
# init with 2 devices and 1 template
fritz().get_devices.return_value = [
FritzDeviceSwitchMock(
ain="fake ain switch",
@ -96,6 +98,13 @@ async def test_coordinator_automatic_registry_cleanup(
name="fake_cover",
),
]
fritz().get_templates.return_value = [
FritzEntityBaseMock(
ain="fake ain template",
device_and_unit_id=("fake ain template", None),
name="fake_template",
)
]
entry = MockConfigEntry(
domain=FB_DOMAIN,
data=MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0],
@ -105,9 +114,10 @@ async def test_coordinator_automatic_registry_cleanup(
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done(wait_background_tasks=True)
assert len(er.async_entries_for_config_entry(entity_registry, entry.entry_id)) == 19
assert len(dr.async_entries_for_config_entry(device_registry, entry.entry_id)) == 2
assert len(er.async_entries_for_config_entry(entity_registry, entry.entry_id)) == 20
assert len(dr.async_entries_for_config_entry(device_registry, entry.entry_id)) == 3
# remove one device, keep the template
fritz().get_devices.return_value = [
FritzDeviceSwitchMock(
ain="fake ain switch",
@ -119,5 +129,14 @@ async def test_coordinator_automatic_registry_cleanup(
async_fire_time_changed(hass, utcnow() + timedelta(seconds=35))
await hass.async_block_till_done(wait_background_tasks=True)
assert len(er.async_entries_for_config_entry(entity_registry, entry.entry_id)) == 13
assert len(dr.async_entries_for_config_entry(device_registry, entry.entry_id)) == 2
# remove the template, keep the device
fritz().get_templates.return_value = []
async_fire_time_changed(hass, utcnow() + timedelta(seconds=35))
await hass.async_block_till_done(wait_background_tasks=True)
assert len(er.async_entries_for_config_entry(entity_registry, entry.entry_id)) == 12
assert len(dr.async_entries_for_config_entry(device_registry, entry.entry_id)) == 1