/
/
/
1"""Tests for the filesystem provider parsers."""
2
3import uuid
4
5from music_assistant_models.enums import ExternalID
6from music_assistant_models.media_items import Album, Artist
7from music_assistant_models.unique_list import UniqueList
8
9from music_assistant.providers.filesystem_local.parsers import parse_album_nfo, parse_artist_nfo
10
11
12def test_parse_album_nfo() -> None:
13 """Test parsing of an album NFO file."""
14 album = Album(
15 item_id="test",
16 provider="test",
17 name="",
18 artists=UniqueList(
19 [Artist(item_id="test", provider="test", name="test", provider_mappings=set())]
20 ),
21 provider_mappings=set(),
22 )
23
24 mb_releasegroup = str(uuid.uuid4())
25 mb_album = str(uuid.uuid4())
26 mb_artist = str(uuid.uuid4())
27
28 def _asserts(res: Album) -> None:
29 assert res.name == "Test Album"
30 assert res.version == "Test Version"
31 assert res.sort_name == "Test Sortname"
32 assert res.external_ids == {
33 (ExternalID.MB_RELEASEGROUP, mb_releasegroup),
34 (ExternalID.MB_ALBUM, mb_album),
35 }
36 assert res.artists[0].mbid == mb_artist
37 assert res.metadata.description == "Test Description"
38 assert res.year == 1967
39 assert res.metadata.genres == {"Test Genre"}
40
41 parse_album_nfo(
42 album,
43 {
44 "title": "Test Album (Test Version)",
45 "sortname": "Test Sortname",
46 "musicbrainzreleasegroupid": mb_releasegroup,
47 "musicbrainzalbumid": mb_album,
48 "musicbrainzalbumartistid": mb_artist,
49 "review": "Test Description",
50 "year": "1967",
51 "genre": "Test Genre",
52 },
53 )
54 _asserts(album)
55
56 parse_album_nfo(album, {}) # empty dict or missing keys should not change anything
57 _asserts(album)
58
59 parse_album_nfo(
60 album,
61 { # None and empty string should not erase existing values
62 "title": None,
63 "sortname": "",
64 },
65 )
66 _asserts(album)
67
68
69def test_parse_artist_nfo() -> None:
70 """Test parsing of an artist NFO file."""
71 artist = Artist(item_id="test", provider="test", name="", provider_mappings=set())
72
73 mb_artist = str(uuid.uuid4())
74
75 def _asserts(res: Artist) -> None:
76 assert res.name == "Test Artist"
77 assert res.sort_name == "Test Sortname"
78 assert res.mbid == mb_artist
79 assert res.metadata.description == "Test Biography"
80 assert res.metadata.genres == {"Test Genre"}
81
82 parse_artist_nfo(
83 artist,
84 {
85 "title": "Test Artist",
86 "sortname": "Test Sortname",
87 "musicbrainzartistid": mb_artist,
88 "biography": "Test Biography",
89 "genre": "Test Genre",
90 },
91 )
92 _asserts(artist)
93
94 parse_artist_nfo(artist, {}) # empty dict or missing keys should not change anything
95 _asserts(artist)
96
97 parse_artist_nfo(
98 artist,
99 { # None and empty string should not erase existing values
100 "title": None,
101 "sortname": "",
102 },
103 )
104 _asserts(artist)
105