From bd5892f2a660befae4f2c8cc2d39da5858d1632e Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Tue, 10 Sep 2024 01:22:14 -0500 Subject: [PATCH] Set responding state in assist satellite announcements (#125632) Set responding state in announcements --- .../components/assist_satellite/entity.py | 2 ++ .../assist_satellite/test_entity.py | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/assist_satellite/entity.py b/homeassistant/components/assist_satellite/entity.py index 38973f15f55..6f0e588052a 100644 --- a/homeassistant/components/assist_satellite/entity.py +++ b/homeassistant/components/assist_satellite/entity.py @@ -169,12 +169,14 @@ class AssistSatelliteEntity(entity.Entity): raise SatelliteBusyError self._is_announcing = True + self._set_state(AssistSatelliteState.RESPONDING) try: # Block until announcement is finished await self.async_announce(message, media_id) finally: self._is_announcing = False + self.tts_response_finished() async def async_announce(self, message: str, media_id: str) -> None: """Announce media on the satellite. diff --git a/tests/components/assist_satellite/test_entity.py b/tests/components/assist_satellite/test_entity.py index ec52d8abff4..a46f754dd4e 100644 --- a/tests/components/assist_satellite/test_entity.py +++ b/tests/components/assist_satellite/test_entity.py @@ -129,10 +129,33 @@ async def test_announce( tts_voice="test-voice", ) + entity._attr_tts_options = {"test-option": "test-value"} + + original_announce = entity.async_announce + announce_started = asyncio.Event() + + async def async_announce(message, media_id): + # Verify state change + assert entity.state == AssistSatelliteState.RESPONDING + await original_announce(message, media_id) + announce_started.set() + + def tts_generate_media_source_id( + hass: HomeAssistant, + message: str, + engine: str | None = None, + language: str | None = None, + options: dict | None = None, + cache: bool | None = None, + ): + # Check that TTS options are passed here + assert options == {"test-option": "test-value", "voice": "test-voice"} + return "media-source://bla" + with ( patch( "homeassistant.components.assist_satellite.entity.tts_generate_media_source_id", - return_value="media-source://bla", + new=tts_generate_media_source_id, ), patch( "homeassistant.components.media_source.async_resolve_media", @@ -141,6 +164,7 @@ async def test_announce( mime_type="audio/mp3", ), ), + patch.object(entity, "async_announce", new=async_announce), ): await hass.services.async_call( "assist_satellite", @@ -149,6 +173,7 @@ async def test_announce( target={"entity_id": "assist_satellite.test_entity"}, blocking=True, ) + assert entity.state == AssistSatelliteState.LISTENING_WAKE_WORD assert entity.announcements[0] == expected_params