/
/
/
1"""Test the iTunes Podcasts config entries."""
2
3from unittest.mock import Mock
4
5import pytest
6
7from music_assistant.providers.itunes_podcasts import (
8 CONF_LOCALE,
9 DEFAULT_LOCALE,
10 SUPPORTED_FEATURES,
11 ITunesPodcastsProvider,
12)
13
14
15def _provider(server_locale: str) -> ITunesPodcastsProvider:
16 """Return a provider whose server is configured with the given metadata locale."""
17 mass = Mock()
18 mass.metadata.locale = server_locale
19 manifest = Mock(domain="itunes_podcasts")
20 config = Mock(instance_id="itunes_podcasts", enabled=True)
21 config.get_value.side_effect = lambda key, default=None: (
22 "INFO" if key == "log_level" else default
23 )
24 return ITunesPodcastsProvider(mass, manifest, config, SUPPORTED_FEATURES)
25
26
27async def _locale_entry_default(server_locale: str) -> str:
28 """Return the default value of the locale entry for the given server locale."""
29 entries = await _provider(server_locale).get_config_entries()
30 entry = next(entry for entry in entries if entry.key == CONF_LOCALE)
31 assert isinstance(entry.default_value, str)
32 return entry.default_value
33
34
35@pytest.mark.parametrize(
36 ("server_locale", "expected"),
37 [("nl_NL", "nl"), ("en_GB", "gb"), ("de_DE", "de")],
38)
39async def test_locale_defaults_to_server_region(server_locale: str, expected: str) -> None:
40 """The store to search defaults to the region of the server's configured language."""
41 assert await _locale_entry_default(server_locale) == expected
42
43
44@pytest.mark.parametrize("server_locale", ["en", "en_XX"])
45async def test_locale_falls_back_when_region_has_no_storefront(server_locale: str) -> None:
46 """A language without a matching iTunes storefront falls back to the default store."""
47 assert await _locale_entry_default(server_locale) == DEFAULT_LOCALE
48
49
50async def test_locale_default_is_a_selectable_option() -> None:
51 """The resolved default is one of the offered options, so the picker shows it selected."""
52 entries = await _provider("nl_NL").get_config_entries()
53 entry = next(entry for entry in entries if entry.key == CONF_LOCALE)
54 assert entry.default_value in [option.value for option in entry.options]
55