From e6895b5738dabcdf253c758836a803e20061f87e Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 17 Oct 2023 22:25:35 +0200 Subject: [PATCH] Fix menu in knx config flow (#102168) * Fix menu in knx config flow * Update tests * Fix strings.json * Rename new menu steps for readabiltiy --------- Co-authored-by: Matthias Alphart --- homeassistant/components/knx/config_flow.py | 35 +++++++++++++-------- homeassistant/components/knx/strings.json | 34 ++++++++++++++------ tests/components/knx/test_config_flow.py | 10 +++--- 3 files changed, 51 insertions(+), 28 deletions(-) diff --git a/homeassistant/components/knx/config_flow.py b/homeassistant/components/knx/config_flow.py index 8e5783dc2d1..6e3da8ad523 100644 --- a/homeassistant/components/knx/config_flow.py +++ b/homeassistant/components/knx/config_flow.py @@ -237,10 +237,7 @@ class KNXCommonFlow(ABC, FlowHandler): tunnel_endpoint_ia=None, ) if connection_type == CONF_KNX_TUNNELING_TCP_SECURE: - return self.async_show_menu( - step_id="secure_key_source", - menu_options=["secure_knxkeys", "secure_tunnel_manual"], - ) + return await self.async_step_secure_key_source_menu_tunnel() self.new_title = f"Tunneling @ {self._selected_tunnel}" return self.finish_flow() @@ -317,10 +314,7 @@ class KNXCommonFlow(ABC, FlowHandler): ) if selected_tunnelling_type == CONF_KNX_TUNNELING_TCP_SECURE: - return self.async_show_menu( - step_id="secure_key_source", - menu_options=["secure_knxkeys", "secure_tunnel_manual"], - ) + return await self.async_step_secure_key_source_menu_tunnel() self.new_title = ( "Tunneling " f"{'UDP' if selected_tunnelling_type == CONF_KNX_TUNNELING else 'TCP'} " @@ -680,10 +674,7 @@ class KNXCommonFlow(ABC, FlowHandler): ) if connection_type == CONF_KNX_ROUTING_SECURE: self.new_title = f"Secure Routing as {_individual_address}" - return self.async_show_menu( - step_id="secure_key_source", - menu_options=["secure_knxkeys", "secure_routing_manual"], - ) + return await self.async_step_secure_key_source_menu_routing() self.new_title = f"Routing as {_individual_address}" return self.finish_flow() @@ -712,6 +703,24 @@ class KNXCommonFlow(ABC, FlowHandler): step_id="routing", data_schema=vol.Schema(fields), errors=errors ) + async def async_step_secure_key_source_menu_tunnel( + self, user_input: dict | None = None + ) -> FlowResult: + """Show the key source menu.""" + return self.async_show_menu( + step_id="secure_key_source_menu_tunnel", + menu_options=["secure_knxkeys", "secure_tunnel_manual"], + ) + + async def async_step_secure_key_source_menu_routing( + self, user_input: dict | None = None + ) -> FlowResult: + """Show the key source menu.""" + return self.async_show_menu( + step_id="secure_key_source_menu_routing", + menu_options=["secure_knxkeys", "secure_routing_manual"], + ) + class KNXConfigFlow(KNXCommonFlow, ConfigFlow, domain=DOMAIN): """Handle a KNX config flow.""" @@ -770,7 +779,7 @@ class KNXOptionsFlow(KNXCommonFlow, OptionsFlow): ) -> FlowResult: """Manage KNX options.""" return self.async_show_menu( - step_id="options_init", + step_id="init", menu_options=[ "connection_type", "communication_settings", diff --git a/homeassistant/components/knx/strings.json b/homeassistant/components/knx/strings.json index 1ff008653d4..8ffbcdf0566 100644 --- a/homeassistant/components/knx/strings.json +++ b/homeassistant/components/knx/strings.json @@ -32,12 +32,19 @@ "local_ip": "Local IP or interface name used for the connection from Home Assistant. Leave blank to use auto-discovery." } }, - "secure_key_source": { + "secure_key_source_menu_tunnel": { "title": "KNX IP-Secure", "description": "Select how you want to configure KNX/IP Secure.", "menu_options": { "secure_knxkeys": "Use a `.knxkeys` file containing IP secure keys", - "secure_tunnel_manual": "Configure IP secure credentials manually", + "secure_tunnel_manual": "Configure IP secure credentials manually" + } + }, + "secure_key_source_menu_routing": { + "title": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::title%]", + "description": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::description%]", + "menu_options": { + "secure_knxkeys": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::menu_options::secure_knxkeys%]", "secure_routing_manual": "Configure IP secure backbone key manually" } }, @@ -121,7 +128,7 @@ }, "options": { "step": { - "options_init": { + "init": { "title": "KNX Settings", "menu_options": { "connection_type": "Configure KNX interface", @@ -130,7 +137,7 @@ } }, "communication_settings": { - "title": "[%key:component::knx::options::step::options_init::menu_options::communication_settings%]", + "title": "[%key:component::knx::options::step::init::menu_options::communication_settings%]", "data": { "state_updater": "State updater", "rate_limit": "Rate limit", @@ -173,13 +180,20 @@ "local_ip": "[%key:component::knx::config::step::manual_tunnel::data_description::local_ip%]" } }, - "secure_key_source": { - "title": "[%key:component::knx::config::step::secure_key_source::title%]", - "description": "[%key:component::knx::config::step::secure_key_source::description%]", + "secure_key_source_menu_tunnel": { + "title": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::title%]", + "description": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::description%]", "menu_options": { - "secure_knxkeys": "[%key:component::knx::config::step::secure_key_source::menu_options::secure_knxkeys%]", - "secure_tunnel_manual": "[%key:component::knx::config::step::secure_key_source::menu_options::secure_tunnel_manual%]", - "secure_routing_manual": "[%key:component::knx::config::step::secure_key_source::menu_options::secure_routing_manual%]" + "secure_knxkeys": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::menu_options::secure_knxkeys%]", + "secure_tunnel_manual": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::menu_options::secure_tunnel_manual%]" + } + }, + "secure_key_source_menu_routing": { + "title": "[%key:component::knx::config::step::secure_key_source_menu_routing::title%]", + "description": "[%key:component::knx::config::step::secure_key_source_menu_routing::description%]", + "menu_options": { + "secure_knxkeys": "[%key:component::knx::config::step::secure_key_source_menu_routing::menu_options::secure_knxkeys%]", + "secure_routing_manual": "[%key:component::knx::config::step::secure_key_source_menu_routing::menu_options::secure_routing_manual%]" } }, "secure_knxkeys": { diff --git a/tests/components/knx/test_config_flow.py b/tests/components/knx/test_config_flow.py index f8200214019..5d42ed79542 100644 --- a/tests/components/knx/test_config_flow.py +++ b/tests/components/knx/test_config_flow.py @@ -302,7 +302,7 @@ async def test_routing_secure_manual_setup( }, ) assert result3["type"] == FlowResultType.MENU - assert result3["step_id"] == "secure_key_source" + assert result3["step_id"] == "secure_key_source_menu_routing" result4 = await hass.config_entries.flow.async_configure( result3["flow_id"], @@ -392,7 +392,7 @@ async def test_routing_secure_keyfile( }, ) assert result3["type"] == FlowResultType.MENU - assert result3["step_id"] == "secure_key_source" + assert result3["step_id"] == "secure_key_source_menu_routing" result4 = await hass.config_entries.flow.async_configure( result3["flow_id"], @@ -948,7 +948,7 @@ async def _get_menu_step_secure_tunnel(hass: HomeAssistant) -> FlowResult: {CONF_KNX_GATEWAY: str(gateway)}, ) assert result3["type"] == FlowResultType.MENU - assert result3["step_id"] == "secure_key_source" + assert result3["step_id"] == "secure_key_source_menu_tunnel" return result3 @@ -1008,7 +1008,7 @@ async def test_get_secure_menu_step_manual_tunnelling( }, ) assert result3["type"] == FlowResultType.MENU - assert result3["step_id"] == "secure_key_source" + assert result3["step_id"] == "secure_key_source_menu_tunnel" async def test_configure_secure_tunnel_manual(hass: HomeAssistant, knx_setup) -> None: @@ -1272,7 +1272,7 @@ async def test_options_flow_secure_manual_to_keyfile( {CONF_KNX_GATEWAY: str(gateway)}, ) assert result3["type"] == FlowResultType.MENU - assert result3["step_id"] == "secure_key_source" + assert result3["step_id"] == "secure_key_source_menu_tunnel" result4 = await hass.config_entries.options.async_configure( result3["flow_id"],