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 <farmio@alphart.net>
This commit is contained in:
Erik Montnemery 2023-10-17 22:25:35 +02:00 committed by GitHub
parent 60c1a8d56f
commit e6895b5738
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 28 deletions

View file

@ -237,10 +237,7 @@ class KNXCommonFlow(ABC, FlowHandler):
tunnel_endpoint_ia=None, tunnel_endpoint_ia=None,
) )
if connection_type == CONF_KNX_TUNNELING_TCP_SECURE: if connection_type == CONF_KNX_TUNNELING_TCP_SECURE:
return self.async_show_menu( return await self.async_step_secure_key_source_menu_tunnel()
step_id="secure_key_source",
menu_options=["secure_knxkeys", "secure_tunnel_manual"],
)
self.new_title = f"Tunneling @ {self._selected_tunnel}" self.new_title = f"Tunneling @ {self._selected_tunnel}"
return self.finish_flow() return self.finish_flow()
@ -317,10 +314,7 @@ class KNXCommonFlow(ABC, FlowHandler):
) )
if selected_tunnelling_type == CONF_KNX_TUNNELING_TCP_SECURE: if selected_tunnelling_type == CONF_KNX_TUNNELING_TCP_SECURE:
return self.async_show_menu( return await self.async_step_secure_key_source_menu_tunnel()
step_id="secure_key_source",
menu_options=["secure_knxkeys", "secure_tunnel_manual"],
)
self.new_title = ( self.new_title = (
"Tunneling " "Tunneling "
f"{'UDP' if selected_tunnelling_type == CONF_KNX_TUNNELING else 'TCP'} " 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: if connection_type == CONF_KNX_ROUTING_SECURE:
self.new_title = f"Secure Routing as {_individual_address}" self.new_title = f"Secure Routing as {_individual_address}"
return self.async_show_menu( return await self.async_step_secure_key_source_menu_routing()
step_id="secure_key_source",
menu_options=["secure_knxkeys", "secure_routing_manual"],
)
self.new_title = f"Routing as {_individual_address}" self.new_title = f"Routing as {_individual_address}"
return self.finish_flow() return self.finish_flow()
@ -712,6 +703,24 @@ class KNXCommonFlow(ABC, FlowHandler):
step_id="routing", data_schema=vol.Schema(fields), errors=errors 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): class KNXConfigFlow(KNXCommonFlow, ConfigFlow, domain=DOMAIN):
"""Handle a KNX config flow.""" """Handle a KNX config flow."""
@ -770,7 +779,7 @@ class KNXOptionsFlow(KNXCommonFlow, OptionsFlow):
) -> FlowResult: ) -> FlowResult:
"""Manage KNX options.""" """Manage KNX options."""
return self.async_show_menu( return self.async_show_menu(
step_id="options_init", step_id="init",
menu_options=[ menu_options=[
"connection_type", "connection_type",
"communication_settings", "communication_settings",

View file

@ -32,12 +32,19 @@
"local_ip": "Local IP or interface name used for the connection from Home Assistant. Leave blank to use auto-discovery." "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", "title": "KNX IP-Secure",
"description": "Select how you want to configure KNX/IP Secure.", "description": "Select how you want to configure KNX/IP Secure.",
"menu_options": { "menu_options": {
"secure_knxkeys": "Use a `.knxkeys` file containing IP secure keys", "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" "secure_routing_manual": "Configure IP secure backbone key manually"
} }
}, },
@ -121,7 +128,7 @@
}, },
"options": { "options": {
"step": { "step": {
"options_init": { "init": {
"title": "KNX Settings", "title": "KNX Settings",
"menu_options": { "menu_options": {
"connection_type": "Configure KNX interface", "connection_type": "Configure KNX interface",
@ -130,7 +137,7 @@
} }
}, },
"communication_settings": { "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": { "data": {
"state_updater": "State updater", "state_updater": "State updater",
"rate_limit": "Rate limit", "rate_limit": "Rate limit",
@ -173,13 +180,20 @@
"local_ip": "[%key:component::knx::config::step::manual_tunnel::data_description::local_ip%]" "local_ip": "[%key:component::knx::config::step::manual_tunnel::data_description::local_ip%]"
} }
}, },
"secure_key_source": { "secure_key_source_menu_tunnel": {
"title": "[%key:component::knx::config::step::secure_key_source::title%]", "title": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::title%]",
"description": "[%key:component::knx::config::step::secure_key_source::description%]", "description": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::description%]",
"menu_options": { "menu_options": {
"secure_knxkeys": "[%key:component::knx::config::step::secure_key_source::menu_options::secure_knxkeys%]", "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_options::secure_tunnel_manual%]", "secure_tunnel_manual": "[%key:component::knx::config::step::secure_key_source_menu_tunnel::menu_options::secure_tunnel_manual%]"
"secure_routing_manual": "[%key:component::knx::config::step::secure_key_source::menu_options::secure_routing_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": { "secure_knxkeys": {

View file

@ -302,7 +302,7 @@ async def test_routing_secure_manual_setup(
}, },
) )
assert result3["type"] == FlowResultType.MENU 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( result4 = await hass.config_entries.flow.async_configure(
result3["flow_id"], result3["flow_id"],
@ -392,7 +392,7 @@ async def test_routing_secure_keyfile(
}, },
) )
assert result3["type"] == FlowResultType.MENU 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( result4 = await hass.config_entries.flow.async_configure(
result3["flow_id"], result3["flow_id"],
@ -948,7 +948,7 @@ async def _get_menu_step_secure_tunnel(hass: HomeAssistant) -> FlowResult:
{CONF_KNX_GATEWAY: str(gateway)}, {CONF_KNX_GATEWAY: str(gateway)},
) )
assert result3["type"] == FlowResultType.MENU assert result3["type"] == FlowResultType.MENU
assert result3["step_id"] == "secure_key_source" assert result3["step_id"] == "secure_key_source_menu_tunnel"
return result3 return result3
@ -1008,7 +1008,7 @@ async def test_get_secure_menu_step_manual_tunnelling(
}, },
) )
assert result3["type"] == FlowResultType.MENU 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: 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)}, {CONF_KNX_GATEWAY: str(gateway)},
) )
assert result3["type"] == FlowResultType.MENU 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( result4 = await hass.config_entries.options.async_configure(
result3["flow_id"], result3["flow_id"],