Initial import
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
"""Tests for DIDL-Lite parsing and domain model mapping."""
|
||||
|
||||
from r36s_dlna_browser.dlna.models import (
|
||||
ItemType,
|
||||
MediaItem,
|
||||
classify_upnp_class,
|
||||
parse_didl_item,
|
||||
)
|
||||
|
||||
|
||||
class TestClassifyUpnpClass:
|
||||
def test_container(self):
|
||||
assert classify_upnp_class("object.container.storageFolder") == ItemType.CONTAINER
|
||||
|
||||
def test_audio(self):
|
||||
assert classify_upnp_class("object.item.audioItem.musicTrack") == ItemType.AUDIO
|
||||
|
||||
def test_video(self):
|
||||
assert classify_upnp_class("object.item.videoItem") == ItemType.VIDEO
|
||||
|
||||
def test_image(self):
|
||||
assert classify_upnp_class("object.item.imageItem.photo") == ItemType.IMAGE
|
||||
|
||||
def test_unknown(self):
|
||||
assert classify_upnp_class("object.item.something") == ItemType.UNKNOWN
|
||||
|
||||
def test_empty(self):
|
||||
assert classify_upnp_class("") == ItemType.UNKNOWN
|
||||
|
||||
|
||||
class TestParseDIDLItem:
|
||||
def test_audio_item(self):
|
||||
didl = {
|
||||
"id": "42",
|
||||
"title": "My Song",
|
||||
"parent_id": "10",
|
||||
"upnp_class": "object.item.audioItem.musicTrack",
|
||||
"resources": [
|
||||
{
|
||||
"url": "http://server/song.mp3",
|
||||
"protocol_info": "http-get:*:audio/mpeg:*",
|
||||
"size": "5000000",
|
||||
"duration": "0:03:45",
|
||||
}
|
||||
],
|
||||
"album_art_uri": "http://server/art.jpg",
|
||||
}
|
||||
item = parse_didl_item(didl)
|
||||
assert item.object_id == "42"
|
||||
assert item.title == "My Song"
|
||||
assert item.item_type == ItemType.AUDIO
|
||||
assert item.resource_url == "http://server/song.mp3"
|
||||
assert item.mime_type == "http-get:*:audio/mpeg:*"
|
||||
assert item.size == 5000000
|
||||
assert item.duration == "0:03:45"
|
||||
assert item.album_art_url == "http://server/art.jpg"
|
||||
assert not item.is_container
|
||||
|
||||
def test_container_item(self):
|
||||
didl = {
|
||||
"id": "5",
|
||||
"title": "Music",
|
||||
"parent_id": "0",
|
||||
"upnp_class": "object.container.storageFolder",
|
||||
"child_count": "12",
|
||||
}
|
||||
item = parse_didl_item(didl)
|
||||
assert item.object_id == "5"
|
||||
assert item.title == "Music"
|
||||
assert item.item_type == ItemType.CONTAINER
|
||||
assert item.child_count == 12
|
||||
assert item.is_container
|
||||
|
||||
def test_missing_resources(self):
|
||||
didl = {"id": "99", "title": "NoRes", "upnp_class": "object.item.audioItem"}
|
||||
item = parse_didl_item(didl)
|
||||
assert item.resource_url == ""
|
||||
assert item.size == 0
|
||||
|
||||
def test_single_resource_dict(self):
|
||||
didl = {
|
||||
"id": "1",
|
||||
"title": "Track",
|
||||
"upnp_class": "object.item.audioItem",
|
||||
"resources": {"url": "http://srv/track.flac", "size": "100"},
|
||||
}
|
||||
item = parse_didl_item(didl)
|
||||
assert item.resource_url == "http://srv/track.flac"
|
||||
assert item.size == 100
|
||||
|
||||
def test_resource_string(self):
|
||||
didl = {
|
||||
"id": "2",
|
||||
"title": "Track2",
|
||||
"upnp_class": "object.item.videoItem",
|
||||
"resources": ["http://srv/vid.mp4"],
|
||||
}
|
||||
item = parse_didl_item(didl)
|
||||
assert item.resource_url == "http://srv/vid.mp4"
|
||||
|
||||
def test_alt_key_names(self):
|
||||
"""Handles alternative key formats (@id, @parentID, class, etc.)."""
|
||||
didl = {
|
||||
"@id": "7",
|
||||
"title": "Alt",
|
||||
"@parentID": "3",
|
||||
"class": "object.container",
|
||||
"@childCount": "5",
|
||||
}
|
||||
item = parse_didl_item(didl)
|
||||
assert item.object_id == "7"
|
||||
assert item.parent_id == "3"
|
||||
assert item.item_type == ItemType.CONTAINER
|
||||
assert item.child_count == 5
|
||||
|
||||
def test_empty_dict(self):
|
||||
item = parse_didl_item({})
|
||||
assert item.object_id == ""
|
||||
assert item.title == ""
|
||||
assert item.item_type == ItemType.UNKNOWN
|
||||
Reference in New Issue
Block a user