mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 23:27:37 +00:00
Simplify AsusWRT config flow (#69800)
This commit is contained in:
parent
a2c74b9786
commit
f6e5e1b167
@ -29,7 +29,6 @@ from .const import (
|
|||||||
CONF_TRACK_UNKNOWN,
|
CONF_TRACK_UNKNOWN,
|
||||||
DEFAULT_DNSMASQ,
|
DEFAULT_DNSMASQ,
|
||||||
DEFAULT_INTERFACE,
|
DEFAULT_INTERFACE,
|
||||||
DEFAULT_SSH_PORT,
|
|
||||||
DEFAULT_TRACK_UNKNOWN,
|
DEFAULT_TRACK_UNKNOWN,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
MODE_AP,
|
MODE_AP,
|
||||||
@ -76,25 +75,28 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
if user_input is None:
|
if user_input is None:
|
||||||
user_input = {}
|
user_input = {}
|
||||||
|
|
||||||
|
schema = {
|
||||||
|
vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str,
|
||||||
|
vol.Required(CONF_USERNAME, default=user_input.get(CONF_USERNAME, "")): str,
|
||||||
|
vol.Optional(CONF_PASSWORD)
|
||||||
|
if self.show_advanced_options
|
||||||
|
else vol.Required(CONF_PASSWORD): str,
|
||||||
|
vol.Required(CONF_PROTOCOL, default=PROTOCOL_SSH): vol.In(
|
||||||
|
{PROTOCOL_SSH: "SSH", PROTOCOL_TELNET: "Telnet"}
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.show_advanced_options:
|
||||||
|
schema[vol.Optional(CONF_PORT)] = cv.port
|
||||||
|
schema[vol.Optional(CONF_SSH_KEY)] = str
|
||||||
|
|
||||||
|
schema[vol.Required(CONF_MODE, default=MODE_ROUTER)] = vol.In(
|
||||||
|
{MODE_ROUTER: "Router", MODE_AP: "Access Point"}
|
||||||
|
)
|
||||||
|
|
||||||
return self.async_show_form(
|
return self.async_show_form(
|
||||||
step_id="user",
|
step_id="user",
|
||||||
data_schema=vol.Schema(
|
data_schema=vol.Schema(schema),
|
||||||
{
|
|
||||||
vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str,
|
|
||||||
vol.Required(
|
|
||||||
CONF_USERNAME, default=user_input.get(CONF_USERNAME, "")
|
|
||||||
): str,
|
|
||||||
vol.Optional(CONF_PASSWORD): str,
|
|
||||||
vol.Optional(CONF_SSH_KEY): str,
|
|
||||||
vol.Required(CONF_PROTOCOL, default=PROTOCOL_SSH): vol.In(
|
|
||||||
{PROTOCOL_SSH: "SSH", PROTOCOL_TELNET: "Telnet"}
|
|
||||||
),
|
|
||||||
vol.Required(CONF_PORT, default=DEFAULT_SSH_PORT): cv.port,
|
|
||||||
vol.Required(CONF_MODE, default=MODE_ROUTER): vol.In(
|
|
||||||
{MODE_ROUTER: "Router", MODE_AP: "Access Point"}
|
|
||||||
),
|
|
||||||
}
|
|
||||||
),
|
|
||||||
errors=errors or {},
|
errors=errors or {},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -134,6 +136,7 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
|
|
||||||
errors = {}
|
errors = {}
|
||||||
self._host = user_input[CONF_HOST]
|
self._host = user_input[CONF_HOST]
|
||||||
|
|
||||||
pwd = user_input.get(CONF_PASSWORD)
|
pwd = user_input.get(CONF_PASSWORD)
|
||||||
ssh = user_input.get(CONF_SSH_KEY)
|
ssh = user_input.get(CONF_SSH_KEY)
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ DATA_ASUSWRT = DOMAIN
|
|||||||
|
|
||||||
DEFAULT_DNSMASQ = "/var/lib/misc"
|
DEFAULT_DNSMASQ = "/var/lib/misc"
|
||||||
DEFAULT_INTERFACE = "eth0"
|
DEFAULT_INTERFACE = "eth0"
|
||||||
DEFAULT_SSH_PORT = 22
|
|
||||||
DEFAULT_TRACK_UNKNOWN = False
|
DEFAULT_TRACK_UNKNOWN = False
|
||||||
|
|
||||||
MODE_AP = "ap"
|
MODE_AP = "ap"
|
||||||
|
@ -492,7 +492,7 @@ def get_api(conf: dict[str, Any], options: dict[str, Any] | None = None) -> Asus
|
|||||||
|
|
||||||
return AsusWrt(
|
return AsusWrt(
|
||||||
conf[CONF_HOST],
|
conf[CONF_HOST],
|
||||||
conf[CONF_PORT],
|
conf.get(CONF_PORT),
|
||||||
conf[CONF_PROTOCOL] == PROTOCOL_TELNET,
|
conf[CONF_PROTOCOL] == PROTOCOL_TELNET,
|
||||||
conf[CONF_USERNAME],
|
conf[CONF_USERNAME],
|
||||||
conf.get(CONF_PASSWORD, ""),
|
conf.get(CONF_PASSWORD, ""),
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"password": "[%key:common::config_flow::data::password%]",
|
"password": "[%key:common::config_flow::data::password%]",
|
||||||
"ssh_key": "Path to your SSH key file (instead of password)",
|
"ssh_key": "Path to your SSH key file (instead of password)",
|
||||||
"protocol": "Communication protocol to use",
|
"protocol": "Communication protocol to use",
|
||||||
"port": "[%key:common::config_flow::data::port%]",
|
"port": "[%key:common::config_flow::data::port%] (leave empty for protocol default)",
|
||||||
"mode": "[%key:common::config_flow::data::mode%]"
|
"mode": "[%key:common::config_flow::data::mode%]"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"mode": "Mode",
|
"mode": "Mode",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"port": "Port",
|
"port": "Port (leave empty for protocol default)",
|
||||||
"protocol": "Communication protocol to use",
|
"protocol": "Communication protocol to use",
|
||||||
"ssh_key": "Path to your SSH key file (instead of password)",
|
"ssh_key": "Path to your SSH key file (instead of password)",
|
||||||
"username": "Username"
|
"username": "Username"
|
||||||
|
@ -52,11 +52,11 @@ def mock_controller_connect():
|
|||||||
|
|
||||||
async def test_user(hass, connect):
|
async def test_user(hass, connect):
|
||||||
"""Test user config."""
|
"""Test user config."""
|
||||||
result = await hass.config_entries.flow.async_init(
|
flow_result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER, "show_advanced_options": True}
|
||||||
)
|
)
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
assert flow_result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
assert result["step_id"] == "user"
|
assert flow_result["step_id"] == "user"
|
||||||
|
|
||||||
# test with all provided
|
# test with all provided
|
||||||
with patch(
|
with patch(
|
||||||
@ -66,10 +66,8 @@ async def test_user(hass, connect):
|
|||||||
"homeassistant.components.asuswrt.config_flow.socket.gethostbyname",
|
"homeassistant.components.asuswrt.config_flow.socket.gethostbyname",
|
||||||
return_value=IP_ADDRESS,
|
return_value=IP_ADDRESS,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_configure(
|
||||||
DOMAIN,
|
flow_result["flow_id"], user_input=CONFIG_DATA
|
||||||
context={"source": SOURCE_USER},
|
|
||||||
data=CONFIG_DATA,
|
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
@ -86,7 +84,7 @@ async def test_error_no_password_ssh(hass):
|
|||||||
config_data.pop(CONF_PASSWORD)
|
config_data.pop(CONF_PASSWORD)
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": SOURCE_USER},
|
context={"source": SOURCE_USER, "show_advanced_options": True},
|
||||||
data=config_data,
|
data=config_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -100,7 +98,7 @@ async def test_error_both_password_ssh(hass):
|
|||||||
config_data[CONF_SSH_KEY] = SSH_KEY
|
config_data[CONF_SSH_KEY] = SSH_KEY
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": SOURCE_USER},
|
context={"source": SOURCE_USER, "show_advanced_options": True},
|
||||||
data=config_data,
|
data=config_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -115,7 +113,7 @@ async def test_error_invalid_ssh(hass):
|
|||||||
config_data[CONF_SSH_KEY] = SSH_KEY
|
config_data[CONF_SSH_KEY] = SSH_KEY
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": SOURCE_USER},
|
context={"source": SOURCE_USER, "show_advanced_options": True},
|
||||||
data=config_data,
|
data=config_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -164,7 +162,7 @@ async def test_on_connect_failed(hass):
|
|||||||
"""Test when we have errors connecting the router."""
|
"""Test when we have errors connecting the router."""
|
||||||
flow_result = await hass.config_entries.flow.async_init(
|
flow_result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": SOURCE_USER},
|
context={"source": SOURCE_USER, "show_advanced_options": True},
|
||||||
)
|
)
|
||||||
|
|
||||||
with patch("homeassistant.components.asuswrt.router.AsusWrt") as asus_wrt:
|
with patch("homeassistant.components.asuswrt.router.AsusWrt") as asus_wrt:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user