Support unique_id for Universal Media Player (#77461)

* support unique id

* tests for unique_id

* use unique_id attribute
This commit is contained in:
holysoles 2022-09-09 04:50:39 -05:00 committed by GitHub
parent b369c2f54c
commit c3b2e03ce8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 0 deletions

View file

@ -53,6 +53,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
CONF_STATE, CONF_STATE,
CONF_STATE_TEMPLATE, CONF_STATE_TEMPLATE,
CONF_UNIQUE_ID,
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_NEXT_TRACK,
SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_PAUSE,
@ -124,6 +125,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
vol.Optional(CONF_ATTRS, default={}): vol.Or( vol.Optional(CONF_ATTRS, default={}): vol.Or(
cv.ensure_list(ATTRS_SCHEMA), ATTRS_SCHEMA cv.ensure_list(ATTRS_SCHEMA), ATTRS_SCHEMA
), ),
vol.Optional(CONF_UNIQUE_ID): cv.string,
vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,
vol.Optional(CONF_STATE_TEMPLATE): cv.template, vol.Optional(CONF_STATE_TEMPLATE): cv.template,
}, },
@ -146,6 +148,7 @@ async def async_setup_platform(
config.get(CONF_CHILDREN), config.get(CONF_CHILDREN),
config.get(CONF_COMMANDS), config.get(CONF_COMMANDS),
config.get(CONF_ATTRS), config.get(CONF_ATTRS),
config.get(CONF_UNIQUE_ID),
config.get(CONF_DEVICE_CLASS), config.get(CONF_DEVICE_CLASS),
config.get(CONF_STATE_TEMPLATE), config.get(CONF_STATE_TEMPLATE),
) )
@ -165,6 +168,7 @@ class UniversalMediaPlayer(MediaPlayerEntity):
children, children,
commands, commands,
attributes, attributes,
unique_id=None,
device_class=None, device_class=None,
state_template=None, state_template=None,
): ):
@ -183,6 +187,7 @@ class UniversalMediaPlayer(MediaPlayerEntity):
self._state_template_result = None self._state_template_result = None
self._state_template = state_template self._state_template = state_template
self._device_class = device_class self._device_class = device_class
self._attr_unique_id = unique_id
async def async_added_to_hass(self) -> None: async def async_added_to_hass(self) -> None:
"""Subscribe to children and template state changes.""" """Subscribe to children and template state changes."""

View file

@ -21,6 +21,7 @@ from homeassistant.const import (
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import Context, callback from homeassistant.core import Context, callback
from homeassistant.helpers import entity_registry
from homeassistant.helpers.event import async_track_state_change_event from homeassistant.helpers.event import async_track_state_change_event
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -1092,6 +1093,26 @@ async def test_device_class(hass):
assert hass.states.get("media_player.tv").attributes["device_class"] == "tv" assert hass.states.get("media_player.tv").attributes["device_class"] == "tv"
async def test_unique_id(hass):
"""Test unique_id property."""
hass.states.async_set("sensor.test_sensor", "on")
await async_setup_component(
hass,
"media_player",
{
"media_player": {
"platform": "universal",
"name": "tv",
"unique_id": "universal_master_bed_tv",
}
},
)
await hass.async_block_till_done()
er = entity_registry.async_get(hass)
assert er.async_get("media_player.tv").unique_id == "universal_master_bed_tv"
async def test_invalid_state_template(hass): async def test_invalid_state_template(hass):
"""Test invalid state template sets state to None.""" """Test invalid state template sets state to None."""
hass.states.async_set("sensor.test_sensor", "on") hass.states.async_set("sensor.test_sensor", "on")
@ -1220,3 +1241,4 @@ async def test_reload(hass):
assert ( assert (
"device_class" not in hass.states.get("media_player.master_bed_tv").attributes "device_class" not in hass.states.get("media_player.master_bed_tv").attributes
) )
assert "unique_id" not in hass.states.get("media_player.master_bed_tv").attributes