music-assistant-server

2.1 KBPY
test_config_entries.py
2.1 KB55 lines • python
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