Skip to content

Commit

Permalink
Fix menu in knx config flow (home-assistant#102168)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
emontnemery and farmio committed Oct 17, 2023
1 parent 60c1a8d commit e6895b5
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 28 deletions.
35 changes: 22 additions & 13 deletions homeassistant/components/knx/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,10 +237,7 @@ async def async_step_tunnel(self, user_input: dict | None = None) -> FlowResult:
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()

Expand Down Expand Up @@ -317,10 +314,7 @@ async def async_step_manual_tunnel(
)

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'} "
Expand Down Expand Up @@ -680,10 +674,7 @@ async def async_step_routing(self, user_input: dict | None = None) -> FlowResult
)
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()

Expand Down Expand Up @@ -712,6 +703,24 @@ async def async_step_routing(self, user_input: dict | None = None) -> FlowResult
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."""
Expand Down Expand Up @@ -770,7 +779,7 @@ async def async_step_init(
) -> FlowResult:
"""Manage KNX options."""
return self.async_show_menu(
step_id="options_init",
step_id="init",
menu_options=[
"connection_type",
"communication_settings",
Expand Down
34 changes: 24 additions & 10 deletions homeassistant/components/knx/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
},
Expand Down Expand Up @@ -121,7 +128,7 @@
},
"options": {
"step": {
"options_init": {
"init": {
"title": "KNX Settings",
"menu_options": {
"connection_type": "Configure KNX interface",
Expand All @@ -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",
Expand Down Expand Up @@ -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_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_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_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": {
Expand Down
10 changes: 5 additions & 5 deletions tests/components/knx/test_config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"],
Expand Down Expand Up @@ -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"],
Expand Down Expand Up @@ -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


Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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"],
Expand Down

0 comments on commit e6895b5

Please sign in to comment.