Fix group media player play_media not passing kwargs (#122258)

This commit is contained in:
Pete Sage 2024-07-22 08:30:23 -04:00 committed by GitHub
parent 243a68fb1f
commit 186ca49b16
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 62 additions and 2 deletions

View file

@ -365,6 +365,8 @@ class MediaPlayerGroup(MediaPlayerEntity):
ATTR_MEDIA_CONTENT_ID: media_id, ATTR_MEDIA_CONTENT_ID: media_id,
ATTR_MEDIA_CONTENT_TYPE: media_type, ATTR_MEDIA_CONTENT_TYPE: media_type,
} }
if kwargs:
data.update(kwargs)
await self.hass.services.async_call( await self.hass.services.async_call(
DOMAIN, DOMAIN,
SERVICE_PLAY_MEDIA, SERVICE_PLAY_MEDIA,

View file

@ -1,14 +1,16 @@
"""The tests for the Media group platform.""" """The tests for the Media group platform."""
import asyncio import asyncio
from unittest.mock import Mock, patch from unittest.mock import MagicMock, Mock, patch
import pytest import pytest
from homeassistant.components.group import DOMAIN from homeassistant.components.group import DOMAIN
from homeassistant.components.media_player import ( from homeassistant.components.media_player import (
ATTR_MEDIA_ANNOUNCE,
ATTR_MEDIA_CONTENT_ID, ATTR_MEDIA_CONTENT_ID,
ATTR_MEDIA_CONTENT_TYPE, ATTR_MEDIA_CONTENT_TYPE,
ATTR_MEDIA_EXTRA,
ATTR_MEDIA_SEEK_POSITION, ATTR_MEDIA_SEEK_POSITION,
ATTR_MEDIA_SHUFFLE, ATTR_MEDIA_SHUFFLE,
ATTR_MEDIA_TRACK, ATTR_MEDIA_TRACK,
@ -45,7 +47,7 @@ from homeassistant.const import (
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_platform, entity_registry as er
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -598,3 +600,59 @@ async def test_nested_group(hass: HomeAssistant) -> None:
assert hass.states.get("media_player.kitchen").state == STATE_OFF assert hass.states.get("media_player.kitchen").state == STATE_OFF
assert hass.states.get("media_player.group_1").state == STATE_OFF assert hass.states.get("media_player.group_1").state == STATE_OFF
assert hass.states.get("media_player.nested_group").state == STATE_OFF assert hass.states.get("media_player.nested_group").state == STATE_OFF
async def test_service_play_media_kwargs(hass: HomeAssistant) -> None:
"""Test that kwargs get passed through on play_media service call."""
await async_setup_component(
hass,
MEDIA_DOMAIN,
{
MEDIA_DOMAIN: [
{"platform": "demo"},
{
"platform": DOMAIN,
"entities": [
"media_player.bedroom",
"media_player.living_room",
],
},
]
},
)
await hass.async_block_till_done()
await hass.async_start()
await hass.async_block_till_done()
platform = entity_platform.async_get_platforms(hass, "media_player")[0]
mp_bedroom = platform.domain_entities["media_player.bedroom"]
mp_bedroom.play_media = MagicMock()
mp_living_room = platform.domain_entities["media_player.living_room"]
mp_living_room.play_media = MagicMock()
await hass.services.async_call(
MEDIA_DOMAIN,
SERVICE_PLAY_MEDIA,
{
ATTR_ENTITY_ID: "media_player.media_group",
ATTR_MEDIA_CONTENT_TYPE: "some_type",
ATTR_MEDIA_CONTENT_ID: "some_id",
ATTR_MEDIA_ANNOUNCE: "true",
ATTR_MEDIA_EXTRA: {
"volume": 20,
},
},
)
await hass.async_block_till_done()
assert mp_bedroom.play_media.call_count == 1
mp_bedroom.play_media.assert_called_with(
"some_type", "some_id", announce=True, extra={"volume": 20}
)
assert mp_living_room.play_media.call_count == 1
mp_living_room.play_media.assert_called_with(
"some_type", "some_id", announce=True, extra={"volume": 20}
)