Skip to content

Commit

Permalink
Feature: Play preset (#33)
Browse files Browse the repository at this point in the history
Co-authored-by: Philip Vanloo <[email protected]>
  • Loading branch information
daniel-simpson and dukeofphilberg authored Aug 23, 2024
1 parent 80da7e5 commit 0749b24
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/linkplay/bridge.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,12 @@ async def set_play_mode(self, mode: PlayingMode) -> None:
LinkPlayCommand.SWITCH_MODE.format(PLAY_MODE_SEND_MAP[mode])
) # type: ignore[str-format]

async def play_preset(self, preset_number: int) -> None:
"""Play a preset."""
if not 0 < preset_number <= 10:
raise ValueError("Preset must be between 1 and 10.")
await self.bridge.request(LinkPlayCommand.PLAY_PRESET.format(preset_number))

@property
def muted(self) -> bool:
"""Returns if the player is muted."""
Expand Down
1 change: 1 addition & 0 deletions src/linkplay/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ class LinkPlayCommand(StrEnum):
MULTIROOM_MUTE = "setPlayerCmd:slave_mute:mute"
MULTIROOM_UNMUTE = "setPlayerCmd:slave_mute:unmute"
MULTIROOM_JOIN = "ConnectMasterAp:JoinGroupMaster:eth{}:wifi0.0.0.0"
PLAY_PRESET = "MCUKeyShortClick:{}"


class SpeakerType(StrEnum):
Expand Down
29 changes: 29 additions & 0 deletions tests/linkplay/test_bridge.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,35 @@ async def test_player_set_play_mode():
)


@pytest.mark.parametrize("preset_number", range(1, 11))
async def test_player_play_preset(preset_number: int):
"""Tests if a player is able to play a preset."""
bridge = AsyncMock()
player = LinkPlayPlayer(bridge)

await player.play_preset(preset_number)

bridge.request.assert_called_once_with(
LinkPlayCommand.PLAY_PRESET.format(preset_number)
)


@pytest.mark.parametrize(
"preset_number",
[
0,
11,
],
)
async def test_player_play_preset_raises_value_error(preset_number: int):
"""Tests that a player fails in an expected way if play preset input is incorrect."""
bridge = AsyncMock()
player = LinkPlayPlayer(bridge)

with pytest.raises(ValueError):
await player.play_preset(preset_number)


async def test_multiroom_setup():
"""Tests if multiroom sets up correctly."""
leader = AsyncMock()
Expand Down

0 comments on commit 0749b24

Please sign in to comment.