From 715f4bd2c379424075f80bf25db85ce4a58f73e3 Mon Sep 17 00:00:00 2001 From: Erik Montnemery <erik@montnemery.com> Date: Tue, 27 Aug 2024 10:09:49 +0200 Subject: [PATCH] Set deprecated flag on TTS engines replaced by entities in WS list (#124676) --- homeassistant/components/tts/__init__.py | 5 +++ tests/components/tts/test_init.py | 56 +++++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tts/__init__.py b/homeassistant/components/tts/__init__.py index 583db4472d4..5406b11fccb 100644 --- a/homeassistant/components/tts/__init__.py +++ b/homeassistant/components/tts/__init__.py @@ -1086,6 +1086,7 @@ def websocket_list_engines( language = msg.get("language") providers = [] provider_info: dict[str, Any] + entity_domains: set[str] = set() for entity in component.entities: provider_info = { @@ -1097,6 +1098,8 @@ def websocket_list_engines( language, entity.supported_languages, country ) providers.append(provider_info) + if entity.platform: + entity_domains.add(entity.platform.platform_name) for engine_id, provider in manager.providers.items(): provider_info = { "engine_id": engine_id, @@ -1106,6 +1109,8 @@ def websocket_list_engines( provider_info["supported_languages"] = language_util.matches( language, provider.supported_languages, country ) + if engine_id in entity_domains: + provider_info["deprecated"] = True providers.append(provider_info) connection.send_message( diff --git a/tests/components/tts/test_init.py b/tests/components/tts/test_init.py index 05c19622e84..dbbcdbd40f6 100644 --- a/tests/components/tts/test_init.py +++ b/tests/components/tts/test_init.py @@ -31,6 +31,7 @@ from .common import ( SUPPORT_LANGUAGES, TEST_DOMAIN, MockProvider, + MockTTS, MockTTSEntity, get_media_source_url, mock_config_entry_setup, @@ -38,7 +39,13 @@ from .common import ( retrieve_media, ) -from tests.common import async_mock_service, mock_restore_cache +from tests.common import ( + MockModule, + async_mock_service, + mock_integration, + mock_platform, + mock_restore_cache, +) from tests.typing import ClientSessionGenerator, WebSocketGenerator ORIG_WRITE_TAGS = tts.SpeechManager.write_tags @@ -1635,6 +1642,53 @@ async def test_ws_list_engines( } +async def test_ws_list_engines_deprecated( + hass: HomeAssistant, + hass_ws_client: WebSocketGenerator, + mock_tts_entity: MockTTSEntity, +) -> None: + """Test listing tts engines. + + This test asserts the deprecated flag is set on a legacy engine whose integration + also provides tts entities. + """ + + mock_provider = MockProvider(DEFAULT_LANG) + mock_provider_2 = MockProvider(DEFAULT_LANG) + mock_integration(hass, MockModule(domain="test")) + mock_platform(hass, "test.tts", MockTTS(mock_provider)) + mock_integration(hass, MockModule(domain="test_2")) + mock_platform(hass, "test_2.tts", MockTTS(mock_provider_2)) + await async_setup_component( + hass, "tts", {"tts": [{"platform": "test"}, {"platform": "test_2"}]} + ) + await mock_config_entry_setup(hass, mock_tts_entity) + + client = await hass_ws_client() + + await client.send_json_auto_id({"type": "tts/engine/list"}) + + msg = await client.receive_json() + assert msg["success"] + assert msg["result"] == { + "providers": [ + { + "engine_id": "tts.test", + "supported_languages": ["de_CH", "de_DE", "en_GB", "en_US"], + }, + { + "deprecated": True, + "engine_id": "test", + "supported_languages": ["de_CH", "de_DE", "en_GB", "en_US"], + }, + { + "engine_id": "test_2", + "supported_languages": ["de_CH", "de_DE", "en_GB", "en_US"], + }, + ] + } + + @pytest.mark.parametrize( ("setup", "engine_id"), [ -- GitLab