/
/
/
1"""Test Tidal Page Parser."""
2
3import json
4import pathlib
5from unittest.mock import Mock
6
7import pytest
8from music_assistant_models.enums import MediaType
9
10from music_assistant.providers.tidal.tidal_page_parser import TidalPageParser
11
12FIXTURES_DIR = pathlib.Path(__file__).parent / "fixtures"
13PAGE_FIXTURES = list(FIXTURES_DIR.glob("pages/*.json"))
14
15
16@pytest.fixture
17def provider_mock() -> Mock:
18 """Return a mock provider."""
19 provider = Mock()
20 provider.domain = "tidal"
21 provider.instance_id = "tidal_instance"
22 provider.auth.user_id = "12345"
23 provider.logger = Mock()
24 return provider
25
26
27@pytest.mark.parametrize("example", PAGE_FIXTURES, ids=lambda val: str(val.stem))
28def test_page_parser(example: pathlib.Path, provider_mock: Mock) -> None:
29 """Test page parser with fixtures."""
30 with open(example) as f:
31 data = json.load(f)
32
33 parser = TidalPageParser(provider_mock)
34 parser.parse_page_structure(data, "pages/home")
35
36 assert len(parser._module_map) == 3
37
38 # Test first module (Playlists)
39 module_info = parser._module_map[0]
40 items, content_type = parser.get_module_items(module_info)
41 assert content_type == MediaType.PLAYLIST
42 assert len(items) == 1
43 assert items[0].name == "Test Playlist"
44
45 # Test second module (Albums)
46 module_info = parser._module_map[1]
47 items, content_type = parser.get_module_items(module_info)
48 assert content_type == MediaType.ALBUM
49 assert len(items) == 1
50 assert items[0].name == "Test Album"
51
52 # Test third module (Mixes)
53 module_info = parser._module_map[2]
54 items, content_type = parser.get_module_items(module_info)
55 assert content_type == MediaType.PLAYLIST
56 assert len(items) == 1
57 assert items[0].name == "My Mix"
58