diff --git a/homeassistant/components/zwave_js/config_flow.py b/homeassistant/components/zwave_js/config_flow.py index 71a349916d3..45b6f0b2a43 100644 --- a/homeassistant/components/zwave_js/config_flow.py +++ b/homeassistant/components/zwave_js/config_flow.py @@ -956,6 +956,9 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN): CONF_ADDON_LR_S2_AUTHENTICATED_KEY: self.lr_s2_authenticated_key, } ) + if self.restart_addon: + manager = get_addon_manager(self.hass) + await manager.async_stop_addon() self._abort_if_unique_id_configured( updates={ @@ -1524,10 +1527,19 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN): # And use the add-on and existing_entry.data.get(CONF_USE_ADDON) ): + manager = get_addon_manager(self.hass) await self._async_set_addon_config( {CONF_ADDON_SOCKET: discovery_info.socket_path} ) - # Reloading will sync add-on options to config entry data + if self.restart_addon: + await manager.async_stop_addon() + self.hass.config_entries.async_update_entry( + existing_entry, + data={ + **existing_entry.data, + CONF_SOCKET_PATH: discovery_info.socket_path, + }, + ) self.hass.config_entries.async_schedule_reload(existing_entry.entry_id) return self.async_abort(reason="already_configured") diff --git a/tests/components/zwave_js/test_config_flow.py b/tests/components/zwave_js/test_config_flow.py index 9b006e008af..30c1de77076 100644 --- a/tests/components/zwave_js/test_config_flow.py +++ b/tests/components/zwave_js/test_config_flow.py @@ -1287,11 +1287,12 @@ async def test_esphome_discovery_intent_custom( assert len(mock_setup_entry.mock_calls) == 1 -@pytest.mark.usefixtures("supervisor", "addon_installed", "addon_running", "addon_info") +@pytest.mark.usefixtures("supervisor", "addon_running", "addon_running", "addon_info") async def test_esphome_discovery_intent_recommended( hass: HomeAssistant, set_addon_options: AsyncMock, addon_options: dict, + stop_addon: AsyncMock, ) -> None: """Test ESPHome discovery success path.""" addon_options.update( @@ -1359,15 +1360,18 @@ async def test_esphome_discovery_intent_recommended( } ), ) + assert stop_addon.call_count == 1 + assert stop_addon.call_args == call("core_zwave_js") assert len(mock_setup.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1 -@pytest.mark.usefixtures("supervisor", "addon_installed", "addon_info") +@pytest.mark.usefixtures("supervisor", "addon_running", "addon_info") async def test_esphome_discovery_already_configured( hass: HomeAssistant, set_addon_options: AsyncMock, addon_options: dict[str, Any], + stop_addon: AsyncMock, ) -> None: """Test ESPHome discovery success path.""" addon_options[CONF_ADDON_SOCKET] = "esphome://existing-device:6053" @@ -1408,6 +1412,13 @@ async def test_esphome_discovery_already_configured( } ), ) + assert entry.data == { + CONF_SOCKET_PATH: "esphome://192.168.1.100:6053", + "use_addon": True, + "integration_created_addon": True, + } + assert stop_addon.call_count == 1 + assert stop_addon.call_args == call("core_zwave_js") @pytest.mark.usefixtures("supervisor", "addon_not_installed", "addon_info")