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