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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user