mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Use translated name for entity id for Picnic (#97230)
This commit is contained in:
parent
4bf0d6e536
commit
3f88c518a5
@ -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,
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user