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
    )
Esempio n. 2
0
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
    )
Esempio n. 3
0
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
Esempio n. 5
0
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)