Use local Sonos API for Plex music playback (#63357)
This commit is contained in:
parent
cf7148c3f8
commit
cdad1a9f27
8 changed files with 164 additions and 104 deletions
|
@ -23,8 +23,12 @@ async def test_plex_play_media(hass, async_autosetup_sonos):
|
|||
)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.sonos.media_player.play_on_sonos"
|
||||
) as mock_play:
|
||||
"homeassistant.components.sonos.media_player.lookup_plex_media"
|
||||
) as mock_lookup, patch(
|
||||
"soco.plugins.plex.PlexPlugin.play_now"
|
||||
) as mock_play_now, patch(
|
||||
"homeassistant.components.sonos.media_player.SonosMediaPlayerEntity.set_shuffle"
|
||||
) as mock_shuffle:
|
||||
# Test successful Plex service call
|
||||
assert await hass.services.async_call(
|
||||
MP_DOMAIN,
|
||||
|
@ -37,14 +41,38 @@ async def test_plex_play_media(hass, async_autosetup_sonos):
|
|||
blocking=True,
|
||||
)
|
||||
|
||||
assert len(mock_play.mock_calls) == 1
|
||||
assert mock_play.mock_calls[0][1][1] == MEDIA_TYPE_MUSIC
|
||||
assert mock_play.mock_calls[0][1][2] == media_content_id
|
||||
assert mock_play.mock_calls[0][1][3] == "Zone A"
|
||||
assert len(mock_lookup.mock_calls) == 1
|
||||
assert len(mock_play_now.mock_calls) == 1
|
||||
assert not mock_shuffle.called
|
||||
assert mock_lookup.mock_calls[0][1][1] == MEDIA_TYPE_MUSIC
|
||||
assert mock_lookup.mock_calls[0][1][2] == media_content_id
|
||||
|
||||
# Test handling shuffle in payload
|
||||
mock_lookup.reset_mock()
|
||||
mock_play_now.reset_mock()
|
||||
shuffle_media_content_id = '{"library_name": "Music", "artist_name": "Artist", "album_name": "Album", "shuffle": 1}'
|
||||
|
||||
assert await hass.services.async_call(
|
||||
MP_DOMAIN,
|
||||
SERVICE_PLAY_MEDIA,
|
||||
{
|
||||
ATTR_ENTITY_ID: media_player,
|
||||
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC,
|
||||
ATTR_MEDIA_CONTENT_ID: f"{PLEX_URI_SCHEME}{shuffle_media_content_id}",
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
assert mock_shuffle.called
|
||||
assert len(mock_lookup.mock_calls) == 1
|
||||
assert len(mock_play_now.mock_calls) == 1
|
||||
assert mock_lookup.mock_calls[0][1][1] == MEDIA_TYPE_MUSIC
|
||||
assert mock_lookup.mock_calls[0][1][2] == media_content_id
|
||||
|
||||
# Test failed Plex service call
|
||||
mock_play.reset_mock()
|
||||
mock_play.side_effect = HomeAssistantError
|
||||
mock_lookup.reset_mock()
|
||||
mock_lookup.side_effect = HomeAssistantError
|
||||
mock_play_now.reset_mock()
|
||||
|
||||
with pytest.raises(HomeAssistantError):
|
||||
await hass.services.async_call(
|
||||
|
@ -57,4 +85,5 @@ async def test_plex_play_media(hass, async_autosetup_sonos):
|
|||
},
|
||||
blocking=True,
|
||||
)
|
||||
assert mock_play.called
|
||||
assert mock_lookup.called
|
||||
assert not mock_play_now.called
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue