Use local Sonos API for Plex music playback (#63357)

This commit is contained in:
jjlawren 2022-01-25 23:10:11 -06:00 committed by GitHub
parent cf7148c3f8
commit cdad1a9f27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 164 additions and 104 deletions

View file

@ -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