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>
pull/102179/head
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,
)
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",

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."
}
},
"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": {

View File

@ -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"],