From 8bbbbb00d5df3acb0650df86b9b4f7f974d6d1ec Mon Sep 17 00:00:00 2001 From: Richard Kroegel <42204099+rikroe@users.noreply.github.com> Date: Tue, 17 Dec 2024 20:43:09 +0100 Subject: [PATCH] Limit unique_id migration to platform for BMW (#131582) --- .../bmw_connected_drive/__init__.py | 38 +++++++++++-------- .../bmw_connected_drive/test_init.py | 27 ++++++++++++- 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/bmw_connected_drive/__init__.py b/homeassistant/components/bmw_connected_drive/__init__.py index 7b6fb4119db..05fa3e3cab0 100644 --- a/homeassistant/components/bmw_connected_drive/__init__.py +++ b/homeassistant/components/bmw_connected_drive/__init__.py @@ -73,23 +73,29 @@ async def _async_migrate_entries( @callback def update_unique_id(entry: er.RegistryEntry) -> dict[str, str] | None: replacements = { - "charging_level_hv": "fuel_and_battery.remaining_battery_percent", - "fuel_percent": "fuel_and_battery.remaining_fuel_percent", - "ac_current_limit": "charging_profile.ac_current_limit", - "charging_start_time": "fuel_and_battery.charging_start_time", - "charging_end_time": "fuel_and_battery.charging_end_time", - "charging_status": "fuel_and_battery.charging_status", - "charging_target": "fuel_and_battery.charging_target", - "remaining_battery_percent": "fuel_and_battery.remaining_battery_percent", - "remaining_range_total": "fuel_and_battery.remaining_range_total", - "remaining_range_electric": "fuel_and_battery.remaining_range_electric", - "remaining_range_fuel": "fuel_and_battery.remaining_range_fuel", - "remaining_fuel": "fuel_and_battery.remaining_fuel", - "remaining_fuel_percent": "fuel_and_battery.remaining_fuel_percent", - "activity": "climate.activity", + Platform.SENSOR.value: { + "charging_level_hv": "fuel_and_battery.remaining_battery_percent", + "fuel_percent": "fuel_and_battery.remaining_fuel_percent", + "ac_current_limit": "charging_profile.ac_current_limit", + "charging_start_time": "fuel_and_battery.charging_start_time", + "charging_end_time": "fuel_and_battery.charging_end_time", + "charging_status": "fuel_and_battery.charging_status", + "charging_target": "fuel_and_battery.charging_target", + "remaining_battery_percent": "fuel_and_battery.remaining_battery_percent", + "remaining_range_total": "fuel_and_battery.remaining_range_total", + "remaining_range_electric": "fuel_and_battery.remaining_range_electric", + "remaining_range_fuel": "fuel_and_battery.remaining_range_fuel", + "remaining_fuel": "fuel_and_battery.remaining_fuel", + "remaining_fuel_percent": "fuel_and_battery.remaining_fuel_percent", + "activity": "climate.activity", + } } - if (key := entry.unique_id.split("-")[-1]) in replacements: - new_unique_id = entry.unique_id.replace(key, replacements[key]) + if (key := entry.unique_id.split("-")[-1]) in replacements.get( + entry.domain, [] + ): + new_unique_id = entry.unique_id.replace( + key, replacements[entry.domain][key] + ) _LOGGER.debug( "Migrating entity '%s' unique_id from '%s' to '%s'", entry.entity_id, diff --git a/tests/components/bmw_connected_drive/test_init.py b/tests/components/bmw_connected_drive/test_init.py index e523b2b3d02..8507cacc376 100644 --- a/tests/components/bmw_connected_drive/test_init.py +++ b/tests/components/bmw_connected_drive/test_init.py @@ -10,7 +10,7 @@ from homeassistant.components.bmw_connected_drive.const import ( CONF_READ_ONLY, DOMAIN as BMW_DOMAIN, ) -from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN +from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr, entity_registry as er @@ -18,6 +18,9 @@ from . import FIXTURE_CONFIG_ENTRY from tests.common import MockConfigEntry +BINARY_SENSOR_DOMAIN = Platform.BINARY_SENSOR.value +SENSOR_DOMAIN = Platform.SENSOR.value + VIN = "WBYYYYYYYYYYYYYYY" VEHICLE_NAME = "i3 (+ REX)" VEHICLE_NAME_SLUG = "i3_rex" @@ -109,6 +112,28 @@ async def test_migrate_options_from_data(hass: HomeAssistant) -> None: f"{VIN}-mileage", f"{VIN}-mileage", ), + ( + { + "domain": SENSOR_DOMAIN, + "platform": BMW_DOMAIN, + "unique_id": f"{VIN}-charging_status", + "suggested_object_id": f"{VEHICLE_NAME} Charging Status", + "disabled_by": None, + }, + f"{VIN}-charging_status", + f"{VIN}-fuel_and_battery.charging_status", + ), + ( + { + "domain": BINARY_SENSOR_DOMAIN, + "platform": BMW_DOMAIN, + "unique_id": f"{VIN}-charging_status", + "suggested_object_id": f"{VEHICLE_NAME} Charging Status", + "disabled_by": None, + }, + f"{VIN}-charging_status", + f"{VIN}-charging_status", + ), ], ) async def test_migrate_unique_ids(