Add support for service translations (#95984)

This commit is contained in:
Franck Nijhof 2023-07-11 15:52:12 +02:00 committed by GitHub
parent f12f8bca03
commit f054de0ad5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 483 additions and 119 deletions

View file

@ -1,6 +1,8 @@
"""Test service helpers."""
from collections import OrderedDict
from collections.abc import Iterable
from copy import deepcopy
from typing import Any
from unittest.mock import AsyncMock, Mock, patch
import pytest
@ -556,13 +558,47 @@ async def test_async_get_all_descriptions(hass: HomeAssistant) -> None:
logger = hass.components.logger
logger_config = {logger.DOMAIN: {}}
await async_setup_component(hass, logger.DOMAIN, logger_config)
descriptions = await service.async_get_all_descriptions(hass)
async def async_get_translations(
hass: HomeAssistant,
language: str,
category: str,
integrations: Iterable[str] | None = None,
config_flow: bool | None = None,
) -> dict[str, Any]:
"""Return all backend translations."""
translation_key_prefix = f"component.{logger.DOMAIN}.services.set_default_level"
return {
f"{translation_key_prefix}.name": "Translated name",
f"{translation_key_prefix}.description": "Translated description",
f"{translation_key_prefix}.fields.level.name": "Field name",
f"{translation_key_prefix}.fields.level.description": "Field description",
}
with patch(
"homeassistant.helpers.service.translation.async_get_translations",
side_effect=async_get_translations,
):
await async_setup_component(hass, logger.DOMAIN, logger_config)
descriptions = await service.async_get_all_descriptions(hass)
assert len(descriptions) == 2
assert "description" in descriptions[logger.DOMAIN]["set_level"]
assert "fields" in descriptions[logger.DOMAIN]["set_level"]
assert descriptions[logger.DOMAIN]["set_default_level"]["name"] == "Translated name"
assert (
descriptions[logger.DOMAIN]["set_default_level"]["description"]
== "Translated description"
)
assert (
descriptions[logger.DOMAIN]["set_default_level"]["fields"]["level"]["name"]
== "Field name"
)
assert (
descriptions[logger.DOMAIN]["set_default_level"]["fields"]["level"][
"description"
]
== "Field description"
)
hass.services.async_register(logger.DOMAIN, "new_service", lambda x: None, None)
service.async_set_service_schema(
@ -602,7 +638,6 @@ async def test_async_get_all_descriptions(hass: HomeAssistant) -> None:
"another_service_with_response",
{"description": "response service"},
)
descriptions = await service.async_get_all_descriptions(hass)
assert "another_new_service" in descriptions[logger.DOMAIN]
assert "service_with_optional_response" in descriptions[logger.DOMAIN]