/
/
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
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