Use translated name for entity id for Picnic (#97230)

This commit is contained in:
Joost Lekkerkerker 2023-10-22 21:39:01 +02:00 committed by GitHub
parent 4bf0d6e536
commit 3f88c518a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 128 additions and 62 deletions

View File

@ -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,

View File

@ -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):