From 88039597e56260f5dde24a9aeab4608d3c8433d9 Mon Sep 17 00:00:00 2001 From: Pete Sage <76050312+PeteRager@users.noreply.github.com> Date: Sat, 22 Jun 2024 03:09:38 -0400 Subject: [PATCH] Sonos add tests for media_player.play_media library track (#120119) --- tests/components/sonos/conftest.py | 1 + tests/components/sonos/test_media_player.py | 110 ++++++++++++++++++++ 2 files changed, 111 insertions(+) diff --git a/tests/components/sonos/conftest.py b/tests/components/sonos/conftest.py index c7f5cfb7223..378989c58fa 100644 --- a/tests/components/sonos/conftest.py +++ b/tests/components/sonos/conftest.py @@ -205,6 +205,7 @@ class SoCoMockFactory: my_speaker_info["uid"] = mock_soco.uid mock_soco.get_speaker_info = Mock(return_value=my_speaker_info) mock_soco.add_to_queue = Mock(return_value=10) + mock_soco.add_uri_to_queue = Mock(return_value=10) mock_soco.avTransport = SonosMockService("AVTransport", ip_address) mock_soco.renderingControl = SonosMockService("RenderingControl", ip_address) diff --git a/tests/components/sonos/test_media_player.py b/tests/components/sonos/test_media_player.py index b84dd419578..a975538cdec 100644 --- a/tests/components/sonos/test_media_player.py +++ b/tests/components/sonos/test_media_player.py @@ -192,6 +192,116 @@ async def test_play_media_library( ) +_track_url = "S://192.168.42.100/music/iTunes/The%20Beatles/A%20Hard%20Day%2fs%I%20Should%20Have%20Known%20Better.mp3" + + +async def test_play_media_lib_track_play( + hass: HomeAssistant, + soco_factory: SoCoMockFactory, + async_autosetup_sonos, +) -> None: + """Tests playing media track with enqueue mode play.""" + soco_mock = soco_factory.mock_list.get("192.168.42.2") + await hass.services.async_call( + MP_DOMAIN, + SERVICE_PLAY_MEDIA, + { + "entity_id": "media_player.zone_a", + "media_content_type": "track", + "media_content_id": _track_url, + ATTR_MEDIA_ENQUEUE: MediaPlayerEnqueue.PLAY, + }, + blocking=True, + ) + assert soco_mock.add_uri_to_queue.call_count == 1 + assert soco_mock.add_uri_to_queue.call_args_list[0].args[0] == _track_url + assert soco_mock.add_uri_to_queue.call_args_list[0].kwargs["position"] == 1 + assert ( + soco_mock.add_uri_to_queue.call_args_list[0].kwargs["timeout"] + == LONG_SERVICE_TIMEOUT + ) + assert soco_mock.play_from_queue.call_count == 1 + assert soco_mock.play_from_queue.call_args_list[0].args[0] == 9 + + +async def test_play_media_lib_track_next( + hass: HomeAssistant, + soco_factory: SoCoMockFactory, + async_autosetup_sonos, +) -> None: + """Tests playing media track with enqueue mode next.""" + soco_mock = soco_factory.mock_list.get("192.168.42.2") + await hass.services.async_call( + MP_DOMAIN, + SERVICE_PLAY_MEDIA, + { + "entity_id": "media_player.zone_a", + "media_content_type": "track", + "media_content_id": _track_url, + ATTR_MEDIA_ENQUEUE: MediaPlayerEnqueue.NEXT, + }, + blocking=True, + ) + assert soco_mock.add_uri_to_queue.call_count == 1 + assert soco_mock.add_uri_to_queue.call_args_list[0].args[0] == _track_url + assert soco_mock.add_uri_to_queue.call_args_list[0].kwargs["position"] == 1 + assert ( + soco_mock.add_uri_to_queue.call_args_list[0].kwargs["timeout"] + == LONG_SERVICE_TIMEOUT + ) + assert soco_mock.play_from_queue.call_count == 0 + + +async def test_play_media_lib_track_replace( + hass: HomeAssistant, + soco_factory: SoCoMockFactory, + async_autosetup_sonos, +) -> None: + """Tests playing media track with enqueue mode replace.""" + soco_mock = soco_factory.mock_list.get("192.168.42.2") + await hass.services.async_call( + MP_DOMAIN, + SERVICE_PLAY_MEDIA, + { + "entity_id": "media_player.zone_a", + "media_content_type": "track", + "media_content_id": _track_url, + ATTR_MEDIA_ENQUEUE: MediaPlayerEnqueue.REPLACE, + }, + blocking=True, + ) + assert soco_mock.play_uri.call_count == 1 + assert soco_mock.play_uri.call_args_list[0].args[0] == _track_url + assert soco_mock.play_uri.call_args_list[0].kwargs["force_radio"] is False + + +async def test_play_media_lib_track_add( + hass: HomeAssistant, + soco_factory: SoCoMockFactory, + async_autosetup_sonos, +) -> None: + """Tests playing media track with enqueue mode add.""" + soco_mock = soco_factory.mock_list.get("192.168.42.2") + await hass.services.async_call( + MP_DOMAIN, + SERVICE_PLAY_MEDIA, + { + "entity_id": "media_player.zone_a", + "media_content_type": "track", + "media_content_id": _track_url, + ATTR_MEDIA_ENQUEUE: MediaPlayerEnqueue.ADD, + }, + blocking=True, + ) + assert soco_mock.add_uri_to_queue.call_count == 1 + assert soco_mock.add_uri_to_queue.call_args_list[0].args[0] == _track_url + assert ( + soco_mock.add_uri_to_queue.call_args_list[0].kwargs["timeout"] + == LONG_SERVICE_TIMEOUT + ) + assert soco_mock.play_from_queue.call_count == 0 + + _mock_playlists = [ MockMusicServiceItem( "playlist1",