mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Handle previously migrated HEOS device identifier (#137596)
This commit is contained in:
parent
600269ad0a
commit
dd82212e45
@ -39,9 +39,22 @@ async def async_setup_entry(hass: HomeAssistant, entry: HeosConfigEntry) -> bool
|
||||
):
|
||||
for domain, player_id in device.identifiers:
|
||||
if domain == DOMAIN and not isinstance(player_id, str):
|
||||
device_registry.async_update_device( # type: ignore[unreachable]
|
||||
device.id, new_identifiers={(DOMAIN, str(player_id))}
|
||||
# Create set of identifiers excluding this integration
|
||||
identifiers = { # type: ignore[unreachable]
|
||||
(domain, identifier)
|
||||
for domain, identifier in device.identifiers
|
||||
if domain != DOMAIN
|
||||
}
|
||||
migrated_identifiers = {(DOMAIN, str(player_id))}
|
||||
# Add migrated if not already present in another device, which occurs if the user downgraded and then upgraded
|
||||
if not device_registry.async_get_device(migrated_identifiers):
|
||||
identifiers.update(migrated_identifiers)
|
||||
if len(identifiers) > 0:
|
||||
device_registry.async_update_device(
|
||||
device.id, new_identifiers=identifiers
|
||||
)
|
||||
else:
|
||||
device_registry.async_remove_device(device.id)
|
||||
break
|
||||
|
||||
coordinator = HeosCoordinator(hass, entry)
|
||||
|
@ -193,13 +193,36 @@ async def test_device_id_migration(
|
||||
# Create a device with a legacy identifier
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=config_entry.entry_id,
|
||||
identifiers={(DOMAIN, 1)}, # type: ignore[arg-type]
|
||||
identifiers={(DOMAIN, 1), ("Other", "1")}, # type: ignore[arg-type]
|
||||
)
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=config_entry.entry_id,
|
||||
identifiers={("Other", 1)}, # type: ignore[arg-type]
|
||||
)
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert device_registry.async_get_device({("Other", 1)}) is not None # type: ignore[arg-type]
|
||||
assert device_registry.async_get_device({(DOMAIN, 1)}) is None # type: ignore[arg-type]
|
||||
assert device_registry.async_get_device({(DOMAIN, "1")}) is not None
|
||||
assert device_registry.async_get_device({("Other", "1")}) is not None
|
||||
|
||||
|
||||
async def test_device_id_migration_both_present(
|
||||
hass: HomeAssistant,
|
||||
device_registry: dr.DeviceRegistry,
|
||||
config_entry: MockConfigEntry,
|
||||
) -> None:
|
||||
"""Test that legacy non-string devices are removed when both devices present."""
|
||||
config_entry.add_to_hass(hass)
|
||||
# Create a device with a legacy identifier AND a new identifier
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=config_entry.entry_id,
|
||||
identifiers={(DOMAIN, 1)}, # type: ignore[arg-type]
|
||||
)
|
||||
device_registry.async_get_or_create(
|
||||
config_entry_id=config_entry.entry_id, identifiers={(DOMAIN, "1")}
|
||||
)
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done(wait_background_tasks=True)
|
||||
assert device_registry.async_get_device({(DOMAIN, 1)}) is None # type: ignore[arg-type]
|
||||
assert device_registry.async_get_device({(DOMAIN, "1")}) is not None
|
||||
|
Loading…
x
Reference in New Issue
Block a user