Fix language selections in workday (#145813)

This commit is contained in:
G Johansson 2025-05-29 15:28:54 +02:00 committed by Bram Kragten
parent 95fb2a7d7f
commit 26586b4514
3 changed files with 89 additions and 18 deletions

View File

@ -94,21 +94,59 @@ def _get_obj_holidays(
language=language,
categories=set_categories,
)
supported_languages = obj_holidays.supported_languages
default_language = obj_holidays.default_language
if default_language and not language:
# If no language is set, use the default language
LOGGER.debug("Changing language from None to %s", default_language)
return country_holidays( # Return default if no language
country,
subdiv=province,
years=year,
language=default_language,
categories=set_categories,
)
if (
(supported_languages := obj_holidays.supported_languages)
default_language
and language
and language not in supported_languages
and language.startswith("en")
):
# If language does not match supported languages, use the first English variant
if default_language.startswith("en"):
LOGGER.debug("Changing language from %s to %s", language, default_language)
return country_holidays( # Return default English if default language
country,
subdiv=province,
years=year,
language=default_language,
categories=set_categories,
)
for lang in supported_languages:
if lang.startswith("en"):
obj_holidays = country_holidays(
LOGGER.debug("Changing language from %s to %s", language, lang)
return country_holidays(
country,
subdiv=province,
years=year,
language=lang,
categories=set_categories,
)
LOGGER.debug("Changing language from %s to %s", language, lang)
if default_language and language and language not in supported_languages:
# If language does not match supported languages, use the default language
LOGGER.debug("Changing language from %s to %s", language, default_language)
return country_holidays( # Return default English if default language
country,
subdiv=province,
years=year,
language=default_language,
categories=set_categories,
)
return obj_holidays

View File

@ -67,8 +67,7 @@ def add_province_and_language_to_schema(
_country = country_holidays(country=country)
if country_default_language := (_country.default_language):
selectable_languages = _country.supported_languages
new_selectable_languages = list(selectable_languages)
new_selectable_languages = list(_country.supported_languages)
language_schema = {
vol.Optional(
CONF_LANGUAGE, default=country_default_language
@ -154,19 +153,7 @@ def validate_custom_dates(user_input: dict[str, Any]) -> None:
years=year,
language=language,
)
if (
(supported_languages := obj_holidays.supported_languages)
and language
and language.startswith("en")
):
for lang in supported_languages:
if lang.startswith("en"):
obj_holidays = country_holidays(
country,
subdiv=province,
years=year,
language=lang,
)
else:
obj_holidays = HolidayBase(years=year)

View File

@ -461,3 +461,49 @@ async def test_only_repairs_for_current_next_year(
assert len(issue_registry.issues) == 2
assert issue_registry.issues == snapshot
async def test_missing_language(
hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test when language exist but is empty."""
config = {
"add_holidays": [],
"country": "AU",
"days_offset": 0,
"excludes": ["sat", "sun", "holiday"],
"language": None,
"name": "Workday Sensor",
"platform": "workday",
"province": "QLD",
"remove_holidays": [
"Labour Day",
],
"workdays": ["mon", "tue", "wed", "thu", "fri"],
}
await init_integration(hass, config)
assert "Changing language from None to en_AU" in caplog.text
async def test_incorrect_english_variant(
hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test when language exist but is empty."""
config = {
"add_holidays": [],
"country": "AU",
"days_offset": 0,
"excludes": ["sat", "sun", "holiday"],
"language": "en_UK", # Incorrect variant
"name": "Workday Sensor",
"platform": "workday",
"province": "QLD",
"remove_holidays": [
"Labour Day",
],
"workdays": ["mon", "tue", "wed", "thu", "fri"],
}
await init_integration(hass, config)
assert "Changing language from en_UK to en_AU" in caplog.text