Change to language selector in Workday (#104472)

This commit is contained in:
G Johansson 2023-11-25 10:44:15 +01:00 committed by GitHub
parent df37ee4033
commit 8376a6bda9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 77 additions and 8 deletions

View File

@ -83,6 +83,18 @@ async def async_setup_entry(
years=year,
language=language,
)
if (
supported_languages := obj_holidays.supported_languages
) and language == "en":
for lang in supported_languages:
if lang.startswith("en"):
obj_holidays = country_holidays(
country,
subdiv=province,
years=year,
language=lang,
)
LOGGER.debug("Changing language from %s to %s", language, lang)
else:
obj_holidays = HolidayBase()

View File

@ -18,6 +18,8 @@ from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.selector import (
CountrySelector,
CountrySelectorConfig,
LanguageSelector,
LanguageSelectorConfig,
NumberSelector,
NumberSelectorConfig,
NumberSelectorMode,
@ -62,14 +64,14 @@ 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 = []
for lang in selectable_languages:
new_selectable_languages.append(lang[:2])
language_schema = {
vol.Optional(
CONF_LANGUAGE, default=country_default_language
): SelectSelector(
SelectSelectorConfig(
options=list(selectable_languages),
mode=SelectSelectorMode.DROPDOWN,
)
): LanguageSelector(
LanguageSelectorConfig(languages=new_selectable_languages)
)
}
@ -109,12 +111,25 @@ def validate_custom_dates(user_input: dict[str, Any]) -> None:
year: int = dt_util.now().year
if country := user_input.get(CONF_COUNTRY):
language = user_input.get(CONF_LANGUAGE)
province = user_input.get(CONF_PROVINCE)
obj_holidays = country_holidays(
country=country,
subdiv=user_input.get(CONF_PROVINCE),
subdiv=province,
years=year,
language=user_input.get(CONF_LANGUAGE),
language=language,
)
if (
supported_languages := obj_holidays.supported_languages
) and language == "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

@ -277,3 +277,25 @@ TEST_CONFIG_ADD_REMOVE_DATE_RANGE = {
"remove_holidays": ["2022-12-04", "2022-12-24,2022-12-26"],
"language": "de",
}
TEST_LANGUAGE_CHANGE = {
"name": DEFAULT_NAME,
"country": "DE",
"province": "BW",
"excludes": DEFAULT_EXCLUDES,
"days_offset": DEFAULT_OFFSET,
"workdays": DEFAULT_WORKDAYS,
"add_holidays": ["2022-12-01", "2022-12-05,2022-12-15"],
"remove_holidays": ["2022-12-04", "2022-12-24,2022-12-26"],
"language": "en",
}
TEST_LANGUAGE_NO_CHANGE = {
"name": DEFAULT_NAME,
"country": "DE",
"province": "BW",
"excludes": DEFAULT_EXCLUDES,
"days_offset": DEFAULT_OFFSET,
"workdays": DEFAULT_WORKDAYS,
"add_holidays": ["2022-12-01", "2022-12-05,2022-12-15"],
"remove_holidays": ["2022-12-04", "2022-12-24,2022-12-26"],
"language": "de",
}

View File

@ -35,6 +35,8 @@ from . import (
TEST_CONFIG_WITH_PROVINCE,
TEST_CONFIG_WITH_STATE,
TEST_CONFIG_YESTERDAY,
TEST_LANGUAGE_CHANGE,
TEST_LANGUAGE_NO_CHANGE,
init_integration,
)
@ -313,3 +315,21 @@ async def test_check_date_service(
return_response=True,
)
assert response == {"binary_sensor.workday_sensor": {"workday": True}}
async def test_language_difference_english_language(
hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test handling difference in English language naming."""
await init_integration(hass, TEST_LANGUAGE_CHANGE)
assert "Changing language from en to en_US" in caplog.text
async def test_language_difference_no_change_other_language(
hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test skipping if no difference in language naming."""
await init_integration(hass, TEST_LANGUAGE_NO_CHANGE)
assert "Changing language from en to en_US" not in caplog.text

View File

@ -551,7 +551,7 @@ pytestmark = pytest.mark.usefixtures()
("language", "holiday"),
[
("de", "Weihnachtstag"),
("en_US", "Christmas"),
("en", "Christmas"),
],
)
async def test_language(