async def test_browse_media_path( device_source_mock: DmsDeviceSource, dms_device_mock: Mock ) -> None: """Test async_browse_media with a path.""" title = "folder" con_id = "123" container = didl_lite.Container(id=con_id, restricted="false", title=title) dms_device_mock.async_search_directory.return_value = DmsDevice.BrowseResult( [container], 1, 1, 0 ) dms_device_mock.async_browse_metadata.return_value = container dms_device_mock.async_browse_direct_children.return_value = DmsDevice.BrowseResult( [], 0, 0, 0 ) result = await device_source_mock.async_browse_media(f"{title}") assert result.identifier == f"{MOCK_SOURCE_ID}/:{con_id}" assert result.title == title dms_device_mock.async_search_directory.assert_awaited_once_with( "0", search_criteria=f'@parentID="0" and dc:title="{title}"', metadata_filter=ANY, requested_count=1, ) dms_device_mock.async_browse_metadata.assert_awaited_once_with( con_id, metadata_filter=ANY ) dms_device_mock.async_browse_direct_children.assert_awaited_once_with( con_id, metadata_filter=ANY, sort_criteria=ANY )
async def test_browse_object_sort_superset( hass: HomeAssistant, dms_device_mock: Mock ) -> None: """Test sorting where device allows superset of integration's criteria.""" dms_device_mock.sort_capabilities = [ "dc:title", "upnp:originalTrackNumber", "upnp:class", "upnp:artist", "dc:creator", "upnp:genre", ] object_id = "0" dms_device_mock.async_browse_metadata.return_value = didl_lite.Container( id="0", restricted="false", title="root" ) dms_device_mock.async_browse_direct_children.return_value = DmsDevice.BrowseResult( [], 0, 0, 0 ) await async_browse_media(hass, ":0") # Sort criteria should be dlna_dms's default dms_device_mock.async_browse_direct_children.assert_awaited_once_with( object_id, metadata_filter=ANY, sort_criteria=DLNA_SORT_CRITERIA )
async def test_browse_object_sort_anything(hass: HomeAssistant, dms_device_mock: Mock) -> None: """Test sort criteria for children where device allows anything.""" dms_device_mock.sort_capabilities = ["*"] object_id = "0" dms_device_mock.async_browse_metadata.return_value = didl_lite.Container( id="0", restricted="false", title="root") dms_device_mock.async_browse_direct_children.return_value = DmsDevice.BrowseResult( [], 0, 0, 0) await async_browse_media(hass, ":0") # Sort criteria should be dlna_dms's default dms_device_mock.async_browse_direct_children.assert_awaited_once_with( object_id, metadata_filter=ANY, sort_criteria=DLNA_SORT_CRITERIA)
async def test_browse_media_object( device_source_mock: DmsDeviceSource, dms_device_mock: Mock ) -> None: """Test async_browse_object via async_browse_media.""" object_id = "1234" child_titles = ("Item 1", "Thing", "Item 2") dms_device_mock.async_browse_metadata.return_value = didl_lite.Container( id=object_id, restricted="false", title="subcontainer" ) children_result = DmsDevice.BrowseResult([], 3, 3, 0) for title in child_titles: children_result.result.append( didl_lite.Item( id=title + "_id", restricted="false", title=title, res=[ didl_lite.Resource( uri=title + "_url", protocol_info="http-get:*:audio/mpeg:" ) ], ), ) dms_device_mock.async_browse_direct_children.return_value = children_result result = await device_source_mock.async_browse_media(f":{object_id}") dms_device_mock.async_browse_metadata.assert_awaited_once_with( object_id, metadata_filter=ANY ) dms_device_mock.async_browse_direct_children.assert_awaited_once_with( object_id, metadata_filter=ANY, sort_criteria=ANY ) assert result.domain == DOMAIN assert result.identifier == f"{MOCK_SOURCE_ID}/:{object_id}" assert result.title == "subcontainer" assert not result.can_play assert result.can_expand assert result.children for child, title in zip(result.children, child_titles): assert isinstance(child, BrowseMediaSource) assert child.identifier == f"{MOCK_SOURCE_ID}/:{title}_id" assert child.title == title assert child.can_play assert not child.can_expand assert not child.children
async def test_browse_object_sort_subset(hass: HomeAssistant, dms_device_mock: Mock) -> None: """Test sorting where device allows subset of integration's criteria.""" dms_device_mock.sort_capabilities = [ "dc:title", "upnp:class", ] object_id = "0" dms_device_mock.async_browse_metadata.return_value = didl_lite.Container( id="0", restricted="false", title="root") dms_device_mock.async_browse_direct_children.return_value = DmsDevice.BrowseResult( [], 0, 0, 0) await async_browse_media(hass, ":0") # Sort criteria should be reduced to only those allowed, # and in the order specified by DLNA_SORT_CRITERIA expected_criteria = ["+upnp:class", "+dc:title"] dms_device_mock.async_browse_direct_children.assert_awaited_once_with( object_id, metadata_filter=ANY, sort_criteria=expected_criteria)