music-assistant-server
2.6 KB•PY
test_preferred_language.py
2.6 KB • 73 lines • python
1"""Tests for the preferred language handling of the MetaDataController."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING
6
7import pytest
8
9from music_assistant.constants import CONF_CORE, CONF_LANGUAGE
10from music_assistant.controllers.metadata.constants import (
11 CONF_THUMB_CACHE_MAX_SIZE,
12 DEFAULT_LANGUAGE,
13)
14
15if TYPE_CHECKING:
16 from music_assistant.controllers.metadata import MetaDataController
17 from music_assistant.mass import MusicAssistant
18
19
20async def test_locale_falls_back_to_the_default_language(
21 metadata_controller: MetaDataController,
22) -> None:
23 """With nothing stored the locale reads as the default language."""
24 assert metadata_controller.locale == DEFAULT_LANGUAGE
25 assert metadata_controller.preferred_language == "en"
26
27
28async def test_set_default_preferred_language_seeds_an_unset_language(
29 metadata_controller: MetaDataController,
30) -> None:
31 """An external source can still seed the language while none has been chosen."""
32 metadata_controller.set_default_preferred_language("nl-NL")
33
34 assert metadata_controller.locale == "nl_NL"
35
36
37@pytest.mark.parametrize("language", [DEFAULT_LANGUAGE, "nl_NL"])
38async def test_chosen_language_survives_a_config_save(
39 metadata_controller: MetaDataController, language: str
40) -> None:
41 """
42 A chosen language stays stored when another metadata setting is saved.
43
44 Only values differing from their config entry default are persisted, so a language
45 equal to the default must not be dropped from storage by an unrelated save.
46 """
47 mass = metadata_controller.mass
48 metadata_controller.set_preferred_language(language)
49
50 await _save_unrelated_metadata_setting(mass)
51
52 assert mass.config.get(f"{CONF_CORE}/metadata/values/{CONF_LANGUAGE}") == language
53 assert metadata_controller.locale == language
54
55
56@pytest.mark.parametrize("language", [DEFAULT_LANGUAGE, "nl_NL"])
57async def test_set_default_preferred_language_never_overrides_a_chosen_language(
58 metadata_controller: MetaDataController, language: str
59) -> None:
60 """A chosen language is not overwritten by a seeded default after a config save."""
61 mass = metadata_controller.mass
62 metadata_controller.set_preferred_language(language)
63 await _save_unrelated_metadata_setting(mass)
64
65 metadata_controller.set_default_preferred_language("de-DE")
66
67 assert metadata_controller.locale == language
68
69
70async def _save_unrelated_metadata_setting(mass: MusicAssistant) -> None:
71 """Save the metadata core config the way the settings UI does."""
72 await mass.config.save_core_config("metadata", {CONF_THUMB_CACHE_MAX_SIZE: 1000})
73