1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-08 09:38:58 +01:00

Add repeat feature to HEOS media player (#136180)

This commit is contained in:
Andrew Sayre
2025-01-22 05:25:56 -06:00
committed by GitHub
parent a3cc68754f
commit f4d6cb45e5
3 changed files with 67 additions and 4 deletions
@@ -19,13 +19,14 @@
'media_station': 'Station Name',
'media_title': 'Song',
'media_type': 'Station',
'repeat': <RepeatMode.OFF: 'off'>,
'shuffle': False,
'source_list': list([
"Today's Hits Radio",
'Classical MPR (Classical Music)',
'HEOS Drive - Line In 1',
]),
'supported_features': <MediaPlayerEntityFeature: 2817597>,
'supported_features': <MediaPlayerEntityFeature: 3079741>,
'volume_level': 0.25,
}),
'entity_id': 'media_player.test_player',
@@ -11,6 +11,7 @@ from pyheos import (
MediaItem,
PlayerUpdateResult,
PlayState,
RepeatType,
SignalHeosEvent,
SignalType,
const,
@@ -30,6 +31,7 @@ from homeassistant.components.media_player import (
ATTR_MEDIA_ENQUEUE,
ATTR_MEDIA_POSITION,
ATTR_MEDIA_POSITION_UPDATED_AT,
ATTR_MEDIA_REPEAT,
ATTR_MEDIA_SHUFFLE,
ATTR_MEDIA_VOLUME_LEVEL,
ATTR_MEDIA_VOLUME_MUTED,
@@ -40,6 +42,7 @@ from homeassistant.components.media_player import (
SERVICE_SELECT_SOURCE,
SERVICE_UNJOIN,
MediaType,
RepeatMode,
)
from homeassistant.const import (
ATTR_ENTITY_ID,
@@ -48,6 +51,7 @@ from homeassistant.const import (
SERVICE_MEDIA_PLAY,
SERVICE_MEDIA_PREVIOUS_TRACK,
SERVICE_MEDIA_STOP,
SERVICE_REPEAT_SET,
SERVICE_SHUFFLE_SET,
SERVICE_VOLUME_MUTE,
SERVICE_VOLUME_SET,
@@ -563,6 +567,46 @@ async def test_shuffle_set_error(
player.set_play_mode.assert_called_once_with(player.repeat, True)
async def test_repeat_set(
hass: HomeAssistant, config_entry: MockConfigEntry, controller: Heos
) -> None:
"""Test the repeat set service."""
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
player = controller.players[1]
await hass.services.async_call(
MEDIA_PLAYER_DOMAIN,
SERVICE_REPEAT_SET,
{ATTR_ENTITY_ID: "media_player.test_player", ATTR_MEDIA_REPEAT: RepeatMode.ONE},
blocking=True,
)
player.set_play_mode.assert_called_once_with(RepeatType.ON_ONE, player.shuffle)
async def test_repeat_set_error(
hass: HomeAssistant, config_entry: MockConfigEntry, controller: Heos
) -> None:
"""Test the repeat set service raises error."""
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
player = controller.players[1]
player.set_play_mode.side_effect = CommandFailedError(None, "Failure", 1)
with pytest.raises(
HomeAssistantError,
match=re.escape("Unable to set repeat: Failure (1)"),
):
await hass.services.async_call(
MEDIA_PLAYER_DOMAIN,
SERVICE_REPEAT_SET,
{
ATTR_ENTITY_ID: "media_player.test_player",
ATTR_MEDIA_REPEAT: RepeatMode.ALL,
},
blocking=True,
)
player.set_play_mode.assert_called_once_with(RepeatType.ON_ALL, player.shuffle)
async def test_volume_set(
hass: HomeAssistant, config_entry: MockConfigEntry, controller: Heos
) -> None: