From 3f88c518a5ee63ae169a126c4ec977e108e0426c Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sun, 22 Oct 2023 21:39:01 +0200 Subject: [PATCH] Use translated name for entity id for Picnic (#97230) --- homeassistant/components/picnic/sensor.py | 2 - tests/components/picnic/test_sensor.py | 188 +++++++++++++++------- 2 files changed, 128 insertions(+), 62 deletions(-) diff --git a/homeassistant/components/picnic/sensor.py b/homeassistant/components/picnic/sensor.py index fb4e756b1be..e7a69e0bf02 100644 --- a/homeassistant/components/picnic/sensor.py +++ b/homeassistant/components/picnic/sensor.py @@ -254,8 +254,6 @@ class PicnicSensor(SensorEntity, CoordinatorEntity): super().__init__(coordinator) self.entity_description = description - self.entity_id = f"sensor.picnic_{description.key}" - self._attr_unique_id = f"{config_entry.unique_id}.{description.key}" self._attr_device_info = DeviceInfo( entry_type=DeviceEntryType.SERVICE, diff --git a/tests/components/picnic/test_sensor.py b/tests/components/picnic/test_sensor.py index 6d5a56499b9..cae10320fb9 100644 --- a/tests/components/picnic/test_sensor.py +++ b/tests/components/picnic/test_sensor.py @@ -9,7 +9,7 @@ import requests from homeassistant import config_entries from homeassistant.components.picnic import const -from homeassistant.components.picnic.const import CONF_COUNTRY_CODE +from homeassistant.components.picnic.const import CONF_COUNTRY_CODE, DOMAIN from homeassistant.components.picnic.sensor import SENSOR_TYPES from homeassistant.components.sensor import SensorDeviceClass from homeassistant.const import ( @@ -17,6 +17,7 @@ from homeassistant.const import ( CURRENCY_EURO, STATE_UNAVAILABLE, STATE_UNKNOWN, + Platform, ) from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.util import dt as dt_util @@ -168,8 +169,11 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): """Enable all sensors of the Picnic integration.""" # Enable the sensors for sensor_type in SENSOR_KEYS: + entry = self.entity_registry.async_get_or_create( + Platform.SENSOR, DOMAIN, f"{self.config_entry.unique_id}.{sensor_type}" + ) updated_entry = self.entity_registry.async_update_entity( - f"sensor.picnic_{sensor_type}", disabled_by=None + entry.entity_id, disabled_by=None ) assert updated_entry.disabled is False await self.hass.async_block_till_done() @@ -197,76 +201,86 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): # Assert that sensors are not set up assert ( - self.hass.states.get("sensor.picnic_selected_slot_max_order_time") is None + self.hass.states.get("sensor.mock_title_max_order_time_of_selected_slot") + is None + ) + assert self.hass.states.get("sensor.mock_title_status_of_last_order") is None + assert ( + self.hass.states.get("sensor.mock_title_total_price_of_last_order") is None ) - assert self.hass.states.get("sensor.picnic_last_order_status") is None - assert self.hass.states.get("sensor.picnic_last_order_total_price") is None async def test_sensors_setup(self): """Test the default sensor setup behaviour.""" await self._setup_platform(use_default_responses=True) - self._assert_sensor("sensor.picnic_cart_items_count", "10") + self._assert_sensor("sensor.mock_title_cart_items_count", "10") self._assert_sensor( - "sensor.picnic_cart_total_price", "25.35", unit=CURRENCY_EURO + "sensor.mock_title_cart_total_price", + "25.35", + unit=CURRENCY_EURO, ) self._assert_sensor( - "sensor.picnic_selected_slot_start", + "sensor.mock_title_start_of_selected_slot", "2021-03-03T13:45:00+00:00", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_selected_slot_end", + "sensor.mock_title_end_of_selected_slot", "2021-03-03T14:45:00+00:00", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_selected_slot_max_order_time", + "sensor.mock_title_max_order_time_of_selected_slot", "2021-03-02T21:00:00+00:00", cls=SensorDeviceClass.TIMESTAMP, ) - self._assert_sensor("sensor.picnic_selected_slot_min_order_value", "35.0") self._assert_sensor( - "sensor.picnic_last_order_slot_start", + "sensor.mock_title_minimum_order_value_for_selected_slot", + "35.0", + ) + self._assert_sensor( + "sensor.mock_title_start_of_last_order_s_slot", "2021-02-26T19:15:00+00:00", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_last_order_slot_end", + "sensor.mock_title_end_of_last_order_s_slot", "2021-02-26T20:15:00+00:00", cls=SensorDeviceClass.TIMESTAMP, ) - self._assert_sensor("sensor.picnic_last_order_status", "COMPLETED") + self._assert_sensor("sensor.mock_title_status_of_last_order", "COMPLETED") self._assert_sensor( - "sensor.picnic_last_order_max_order_time", + "sensor.mock_title_max_order_time_of_last_order", "2021-02-25T21:00:00+00:00", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_last_order_delivery_time", + "sensor.mock_title_last_order_delivery_time", "2021-02-26T19:54:05+00:00", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_last_order_total_price", "41.33", unit=CURRENCY_EURO + "sensor.mock_title_total_price_of_last_order", + "41.33", + unit=CURRENCY_EURO, ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_start", + "sensor.mock_title_expected_start_of_next_delivery", "unknown", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_end", + "sensor.mock_title_expected_end_of_next_delivery", "unknown", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_next_delivery_slot_start", + "sensor.mock_title_start_of_next_delivery_s_slot", "unknown", cls=SensorDeviceClass.TIMESTAMP, ) self._assert_sensor( - "sensor.picnic_next_delivery_slot_end", + "sensor.mock_title_end_of_next_delivery_s_slot", "unknown", cls=SensorDeviceClass.TIMESTAMP, ) @@ -275,13 +289,22 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): """Test that some sensors are disabled by default.""" await self._setup_platform(use_default_responses=True, enable_all_sensors=False) - self._assert_sensor("sensor.picnic_cart_items_count", disabled=True) - self._assert_sensor("sensor.picnic_last_order_slot_start", disabled=True) - self._assert_sensor("sensor.picnic_last_order_slot_end", disabled=True) - self._assert_sensor("sensor.picnic_last_order_status", disabled=True) - self._assert_sensor("sensor.picnic_last_order_total_price", disabled=True) - self._assert_sensor("sensor.picnic_next_delivery_slot_start", disabled=True) - self._assert_sensor("sensor.picnic_next_delivery_slot_end", disabled=True) + self._assert_sensor("sensor.mock_title_cart_items_count", disabled=True) + self._assert_sensor( + "sensor.mock_title_start_of_last_order_s_slot", disabled=True + ) + self._assert_sensor("sensor.mock_title_end_of_last_order_s_slot", disabled=True) + self._assert_sensor("sensor.mock_title_status_of_last_order", disabled=True) + self._assert_sensor( + "sensor.mock_title_total_price_of_last_order", disabled=True + ) + self._assert_sensor( + "sensor.mock_title_start_of_next_delivery_s_slot", + disabled=True, + ) + self._assert_sensor( + "sensor.mock_title_end_of_next_delivery_s_slot", disabled=True + ) async def test_sensors_no_selected_time_slot(self): """Test sensor states with no explicit selected time slot.""" @@ -299,11 +322,15 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): await self._setup_platform() # Assert sensors are unknown - self._assert_sensor("sensor.picnic_selected_slot_start", STATE_UNKNOWN) - self._assert_sensor("sensor.picnic_selected_slot_end", STATE_UNKNOWN) - self._assert_sensor("sensor.picnic_selected_slot_max_order_time", STATE_UNKNOWN) + self._assert_sensor("sensor.mock_title_start_of_selected_slot", STATE_UNKNOWN) + self._assert_sensor("sensor.mock_title_end_of_selected_slot", STATE_UNKNOWN) self._assert_sensor( - "sensor.picnic_selected_slot_min_order_value", STATE_UNKNOWN + "sensor.mock_title_max_order_time_of_selected_slot", + STATE_UNKNOWN, + ) + self._assert_sensor( + "sensor.mock_title_minimum_order_value_for_selected_slot", + STATE_UNKNOWN, ) async def test_next_delivery_sensors(self): @@ -321,18 +348,22 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): await self._setup_platform() # Assert delivery time is not available, but eta is - self._assert_sensor("sensor.picnic_last_order_delivery_time", STATE_UNKNOWN) + self._assert_sensor("sensor.mock_title_last_order_delivery_time", STATE_UNKNOWN) self._assert_sensor( - "sensor.picnic_next_delivery_eta_start", "2021-02-26T19:54:00+00:00" + "sensor.mock_title_expected_start_of_next_delivery", + "2021-02-26T19:54:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_end", "2021-02-26T20:14:00+00:00" + "sensor.mock_title_expected_end_of_next_delivery", + "2021-02-26T20:14:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_slot_start", "2021-02-26T19:15:00+00:00" + "sensor.mock_title_start_of_next_delivery_s_slot", + "2021-02-26T19:15:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_slot_end", "2021-02-26T20:15:00+00:00" + "sensor.mock_title_end_of_next_delivery_s_slot", + "2021-02-26T20:15:00+00:00", ) async def test_sensors_eta_date_malformed(self): @@ -352,8 +383,14 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): await self._coordinator.async_refresh() # Assert eta times are not available due to malformed date strings - self._assert_sensor("sensor.picnic_next_delivery_eta_start", STATE_UNKNOWN) - self._assert_sensor("sensor.picnic_next_delivery_eta_end", STATE_UNKNOWN) + self._assert_sensor( + "sensor.mock_title_expected_start_of_next_delivery", + STATE_UNKNOWN, + ) + self._assert_sensor( + "sensor.mock_title_expected_end_of_next_delivery", + STATE_UNKNOWN, + ) async def test_sensors_use_detailed_eta_if_available(self): """Test sensor states when last order is not yet delivered.""" @@ -378,10 +415,12 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): delivery_response["delivery_id"] ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_start", "2021-03-05T10:19:20+00:00" + "sensor.mock_title_expected_start_of_next_delivery", + "2021-03-05T10:19:20+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_end", "2021-03-05T10:39:20+00:00" + "sensor.mock_title_expected_end_of_next_delivery", + "2021-03-05T10:39:20+00:00", ) async def test_sensors_no_data(self): @@ -398,21 +437,35 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): # Assert all default-enabled sensors have STATE_UNAVAILABLE because the last update failed assert self._coordinator.last_update_success is False - self._assert_sensor("sensor.picnic_cart_total_price", STATE_UNAVAILABLE) - self._assert_sensor("sensor.picnic_selected_slot_start", STATE_UNAVAILABLE) - self._assert_sensor("sensor.picnic_selected_slot_end", STATE_UNAVAILABLE) + self._assert_sensor("sensor.mock_title_cart_total_price", STATE_UNAVAILABLE) self._assert_sensor( - "sensor.picnic_selected_slot_max_order_time", STATE_UNAVAILABLE + "sensor.mock_title_start_of_selected_slot", STATE_UNAVAILABLE + ) + self._assert_sensor("sensor.mock_title_end_of_selected_slot", STATE_UNAVAILABLE) + self._assert_sensor( + "sensor.mock_title_max_order_time_of_selected_slot", + STATE_UNAVAILABLE, ) self._assert_sensor( - "sensor.picnic_selected_slot_min_order_value", STATE_UNAVAILABLE + "sensor.mock_title_minimum_order_value_for_selected_slot", + STATE_UNAVAILABLE, ) self._assert_sensor( - "sensor.picnic_last_order_max_order_time", STATE_UNAVAILABLE + "sensor.mock_title_max_order_time_of_last_order", + STATE_UNAVAILABLE, + ) + self._assert_sensor( + "sensor.mock_title_last_order_delivery_time", + STATE_UNAVAILABLE, + ) + self._assert_sensor( + "sensor.mock_title_expected_start_of_next_delivery", + STATE_UNAVAILABLE, + ) + self._assert_sensor( + "sensor.mock_title_expected_end_of_next_delivery", + STATE_UNAVAILABLE, ) - self._assert_sensor("sensor.picnic_last_order_delivery_time", STATE_UNAVAILABLE) - self._assert_sensor("sensor.picnic_next_delivery_eta_start", STATE_UNAVAILABLE) - self._assert_sensor("sensor.picnic_next_delivery_eta_end", STATE_UNAVAILABLE) async def test_sensors_malformed_delivery_data(self): """Test sensor states when the delivery api returns not a list.""" @@ -425,10 +478,19 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): # Assert all last-order sensors have STATE_UNAVAILABLE because the delivery info fetch failed assert self._coordinator.last_update_success is True - self._assert_sensor("sensor.picnic_last_order_max_order_time", STATE_UNKNOWN) - self._assert_sensor("sensor.picnic_last_order_delivery_time", STATE_UNKNOWN) - self._assert_sensor("sensor.picnic_next_delivery_eta_start", STATE_UNKNOWN) - self._assert_sensor("sensor.picnic_next_delivery_eta_end", STATE_UNKNOWN) + self._assert_sensor( + "sensor.mock_title_max_order_time_of_last_order", + STATE_UNKNOWN, + ) + self._assert_sensor("sensor.mock_title_last_order_delivery_time", STATE_UNKNOWN) + self._assert_sensor( + "sensor.mock_title_expected_start_of_next_delivery", + STATE_UNKNOWN, + ) + self._assert_sensor( + "sensor.mock_title_expected_end_of_next_delivery", + STATE_UNKNOWN, + ) async def test_sensors_malformed_response(self): """Test coordinator update fails when API yields ValueError.""" @@ -474,22 +536,28 @@ class TestPicnicSensor(unittest.IsolatedAsyncioTestCase): await self._setup_platform() self._assert_sensor( - "sensor.picnic_last_order_slot_start", "2022-03-08T12:15:00+00:00" + "sensor.mock_title_start_of_last_order_s_slot", + "2022-03-08T12:15:00+00:00", ) self._assert_sensor( - "sensor.picnic_last_order_slot_end", "2022-03-08T13:15:00+00:00" + "sensor.mock_title_end_of_last_order_s_slot", + "2022-03-08T13:15:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_slot_start", "2022-03-01T08:15:00+00:00" + "sensor.mock_title_start_of_next_delivery_s_slot", + "2022-03-01T08:15:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_slot_end", "2022-03-01T09:15:00+00:00" + "sensor.mock_title_end_of_next_delivery_s_slot", + "2022-03-01T09:15:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_start", "2022-03-01T08:30:00+00:00" + "sensor.mock_title_expected_start_of_next_delivery", + "2022-03-01T08:30:00+00:00", ) self._assert_sensor( - "sensor.picnic_next_delivery_eta_end", "2022-03-01T08:45:00+00:00" + "sensor.mock_title_expected_end_of_next_delivery", + "2022-03-01T08:45:00+00:00", ) async def test_device_registry_entry(self):