diff --git a/homeassistant/components/music_assistant/media_browser.py b/homeassistant/components/music_assistant/media_browser.py index 65df5a443e2e..7c5cae47c973 100644 --- a/homeassistant/components/music_assistant/media_browser.py +++ b/homeassistant/components/music_assistant/media_browser.py @@ -109,6 +109,13 @@ SEARCHABLE_MASS_MEDIA_TYPES = [ # an artist holds nothing else we can search or browse ARTIST_MASS_MEDIA_TYPES = [MASSMediaType.ALBUM, MASSMediaType.TRACK] +# the items that async_search_media can search inside +SEARCH_WITHIN_MASS_MEDIA_TYPES = ( + MASSMediaType.ALBUM, + MASSMediaType.ARTIST, + MASSMediaType.PLAYLIST, +) + MEDIA_CONTENT_TYPE_FLAC = "audio/flac" THUMB_SIZE = 200 SORT_NAME = "sort_name" @@ -474,6 +481,7 @@ def build_item( title=title, can_play=True, can_expand=can_expand, + can_search=item.media_type in SEARCH_WITHIN_MASS_MEDIA_TYPES, thumbnail=img_url, ) diff --git a/tests/components/music_assistant/test_media_browser.py b/tests/components/music_assistant/test_media_browser.py index 90ddac684a92..0d4597d16ea2 100644 --- a/tests/components/music_assistant/test_media_browser.py +++ b/tests/components/music_assistant/test_media_browser.py @@ -676,6 +676,44 @@ async def test_search_media_results_are_browsable( ) +async def test_search_media_results_can_search( + hass: HomeAssistant, + music_assistant_client: MagicMock, +) -> None: + """Test that only artist, album and playlist results can be searched inside.""" + await setup_integration_from_fixtures(hass, music_assistant_client) + + mock = MockSearchResults( + ["artist", "album", "track", "playlist", "radio", "podcast", "audiobook"] + ) + for items in ( + mock.artists, + mock.albums, + mock.tracks, + mock.playlists, + mock.radio, + mock.podcasts, + mock.audiobooks, + ): + for item in items: + # The search inside check needs the real media type. + item.media_type = MASSMediaType(item.media_type.value) + + with patch.object(music_assistant_client.music, "search", return_value=mock): + search_results = await async_search_media( + music_assistant_client, SearchMediaQuery(search_query="test") + ) + + assert len(search_results.result) == 35 + assert { + item.media_content_id for item in search_results.result if item.can_search + } == { + f"library://{media_type}/{index}" + for media_type in ("artist", "album", "playlist") + for index in range(5) + } + + async def test_search_media_websocket_from_library_listing( hass: HomeAssistant, music_assistant_client: MagicMock,