diff --git a/homeassistant/components/tts/__init__.py b/homeassistant/components/tts/__init__.py index 88504e7953d..64efc308dcf 100644 --- a/homeassistant/components/tts/__init__.py +++ b/homeassistant/components/tts/__init__.py @@ -715,6 +715,7 @@ def get_base_url(hass: HomeAssistant) -> str: @websocket_api.websocket_command( { "type": "tts/engine/list", + vol.Optional("country"): str, vol.Optional("language"): str, } ) @@ -725,13 +726,17 @@ def websocket_list_engines( """List text to speech engines and, optionally, if they support a given language.""" manager: SpeechManager = hass.data[DOMAIN] + country = msg.get("country") language = msg.get("language") providers = [] for engine_id, provider in manager.providers.items(): - provider_info: dict[str, Any] = {"engine_id": engine_id} + provider_info: dict[str, Any] = { + "engine_id": engine_id, + "supported_languages": provider.supported_languages, + } if language: - provider_info["language_supported"] = bool( - language_util.matches(language, provider.supported_languages) + provider_info["supported_languages"] = language_util.matches( + language, provider.supported_languages, country ) providers.append(provider_info) diff --git a/tests/components/tts/common.py b/tests/components/tts/common.py index 6e77c89177e..cd0840947c9 100644 --- a/tests/components/tts/common.py +++ b/tests/components/tts/common.py @@ -16,7 +16,7 @@ from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from tests.common import MockPlatform -SUPPORT_LANGUAGES = ["de_DE", "en_GB", "en_US"] +SUPPORT_LANGUAGES = ["de_CH", "de_DE", "en_GB", "en_US"] TEST_LANGUAGES = ["de", "en"] DEFAULT_LANG = "en_US" diff --git a/tests/components/tts/test_init.py b/tests/components/tts/test_init.py index 9ab71f2512f..1ac6a053440 100644 --- a/tests/components/tts/test_init.py +++ b/tests/components/tts/test_init.py @@ -1041,14 +1041,21 @@ async def test_ws_list_engines( msg = await client.receive_json() assert msg["success"] - assert msg["result"] == {"providers": [{"engine_id": "test"}]} + assert msg["result"] == { + "providers": [ + { + "engine_id": "test", + "supported_languages": ["de_CH", "de_DE", "en_GB", "en_US"], + } + ] + } await client.send_json_auto_id({"type": "tts/engine/list", "language": "smurfish"}) msg = await client.receive_json() assert msg["success"] assert msg["result"] == { - "providers": [{"engine_id": "test", "language_supported": False}] + "providers": [{"engine_id": "test", "supported_languages": []}] } await client.send_json_auto_id({"type": "tts/engine/list", "language": "en"}) @@ -1056,7 +1063,7 @@ async def test_ws_list_engines( msg = await client.receive_json() assert msg["success"] assert msg["result"] == { - "providers": [{"engine_id": "test", "language_supported": True}] + "providers": [{"engine_id": "test", "supported_languages": ["en_US", "en_GB"]}] } await client.send_json_auto_id({"type": "tts/engine/list", "language": "en-UK"}) @@ -1064,7 +1071,25 @@ async def test_ws_list_engines( msg = await client.receive_json() assert msg["success"] assert msg["result"] == { - "providers": [{"engine_id": "test", "language_supported": True}] + "providers": [{"engine_id": "test", "supported_languages": ["en_GB", "en_US"]}] + } + + await client.send_json_auto_id({"type": "tts/engine/list", "language": "de"}) + msg = await client.receive_json() + assert msg["type"] == "result" + assert msg["success"] + assert msg["result"] == { + "providers": [{"engine_id": "test", "supported_languages": ["de_DE", "de_CH"]}] + } + + await client.send_json_auto_id( + {"type": "tts/engine/list", "language": "de", "country": "ch"} + ) + msg = await client.receive_json() + assert msg["type"] == "result" + assert msg["success"] + assert msg["result"] == { + "providers": [{"engine_id": "test", "supported_languages": ["de_CH", "de_DE"]}] }