mirror of
https://github.com/home-assistant/core.git
synced 2026-08-24 10:13:52 -05:00
Add TextSelector in config flow SMA (#176660)
This commit is contained in:
@@ -27,6 +27,11 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers.device_registry import format_mac
|
||||
from homeassistant.helpers.selector import (
|
||||
TextSelector,
|
||||
TextSelectorConfig,
|
||||
TextSelectorType,
|
||||
)
|
||||
from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo
|
||||
|
||||
from .const import CONF_GROUP, DOMAIN, GROUPS
|
||||
@@ -34,6 +39,39 @@ from .const import CONF_GROUP, DOMAIN, GROUPS
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
STEP_USER_DATA_SCHEMA = vol.Schema(
|
||||
{
|
||||
vol.Required(CONF_HOST): TextSelector(
|
||||
TextSelectorConfig(type=TextSelectorType.URL)
|
||||
),
|
||||
vol.Optional(CONF_SSL, default=False): cv.boolean,
|
||||
vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
|
||||
vol.Optional(CONF_GROUP, default=GROUPS[0]): vol.In(GROUPS),
|
||||
vol.Required(CONF_PASSWORD): TextSelector(
|
||||
TextSelectorConfig(
|
||||
type=TextSelectorType.PASSWORD,
|
||||
autocomplete="current-password",
|
||||
)
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
STEP_DISCOVERY_CONFIRM_DATA_SCHEMA = vol.Schema(
|
||||
{
|
||||
vol.Optional(CONF_SSL, default=False): cv.boolean,
|
||||
vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
|
||||
vol.Optional(CONF_GROUP, default=GROUPS[0]): vol.In(GROUPS),
|
||||
vol.Required(CONF_PASSWORD): TextSelector(
|
||||
TextSelectorConfig(
|
||||
type=TextSelectorType.PASSWORD,
|
||||
autocomplete="current-password",
|
||||
)
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
async def validate_input(
|
||||
hass: HomeAssistant,
|
||||
user_input: dict[str, Any],
|
||||
@@ -130,18 +168,9 @@ class SmaConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
|
||||
return self.async_show_form(
|
||||
step_id="user",
|
||||
data_schema=vol.Schema(
|
||||
{
|
||||
vol.Required(CONF_HOST, default=self._data[CONF_HOST]): cv.string,
|
||||
vol.Optional(CONF_SSL, default=self._data[CONF_SSL]): cv.boolean,
|
||||
vol.Optional(
|
||||
CONF_VERIFY_SSL, default=self._data[CONF_VERIFY_SSL]
|
||||
): cv.boolean,
|
||||
vol.Optional(CONF_GROUP, default=self._data[CONF_GROUP]): vol.In(
|
||||
GROUPS
|
||||
),
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
}
|
||||
data_schema=self.add_suggested_values_to_schema(
|
||||
data_schema=STEP_USER_DATA_SCHEMA,
|
||||
suggested_values=user_input,
|
||||
),
|
||||
errors=errors,
|
||||
)
|
||||
@@ -172,20 +201,14 @@ class SmaConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
CONF_SSL: user_input[CONF_SSL],
|
||||
CONF_VERIFY_SSL: user_input[CONF_VERIFY_SSL],
|
||||
CONF_GROUP: user_input[CONF_GROUP],
|
||||
CONF_PASSWORD: user_input[CONF_PASSWORD],
|
||||
},
|
||||
)
|
||||
|
||||
return self.async_show_form(
|
||||
step_id="reconfigure",
|
||||
data_schema=self.add_suggested_values_to_schema(
|
||||
data_schema=vol.Schema(
|
||||
{
|
||||
vol.Required(CONF_HOST): cv.string,
|
||||
vol.Optional(CONF_SSL): cv.boolean,
|
||||
vol.Optional(CONF_VERIFY_SSL): cv.boolean,
|
||||
vol.Optional(CONF_GROUP): vol.In(GROUPS),
|
||||
}
|
||||
),
|
||||
data_schema=STEP_USER_DATA_SCHEMA,
|
||||
suggested_values=user_input or dict(reconf_entry.data),
|
||||
),
|
||||
errors=errors,
|
||||
@@ -221,7 +244,12 @@ class SmaConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
step_id="reauth_confirm",
|
||||
data_schema=vol.Schema(
|
||||
{
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
vol.Required(CONF_PASSWORD): TextSelector(
|
||||
TextSelectorConfig(
|
||||
type=TextSelectorType.PASSWORD,
|
||||
autocomplete="current-password",
|
||||
)
|
||||
),
|
||||
}
|
||||
),
|
||||
errors=errors,
|
||||
@@ -290,17 +318,9 @@ class SmaConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
|
||||
return self.async_show_form(
|
||||
step_id="discovery_confirm",
|
||||
data_schema=vol.Schema(
|
||||
{
|
||||
vol.Optional(CONF_SSL, default=self._data[CONF_SSL]): cv.boolean,
|
||||
vol.Optional(
|
||||
CONF_VERIFY_SSL, default=self._data[CONF_VERIFY_SSL]
|
||||
): cv.boolean,
|
||||
vol.Optional(CONF_GROUP, default=self._data[CONF_GROUP]): vol.In(
|
||||
GROUPS
|
||||
),
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
}
|
||||
data_schema=self.add_suggested_values_to_schema(
|
||||
data_schema=STEP_DISCOVERY_CONFIRM_DATA_SCHEMA,
|
||||
suggested_values=user_input,
|
||||
),
|
||||
description_placeholders={CONF_HOST: self._data[CONF_HOST]},
|
||||
errors=errors,
|
||||
|
||||
@@ -40,6 +40,7 @@ MOCK_USER_RECONFIGURE = {
|
||||
CONF_SSL: True,
|
||||
CONF_VERIFY_SSL: False,
|
||||
CONF_GROUP: "user",
|
||||
CONF_PASSWORD: "new_password",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,13 @@ import pytest
|
||||
|
||||
from homeassistant.components.sma.const import CONF_GROUP, DOMAIN
|
||||
from homeassistant.config_entries import SOURCE_DHCP, SOURCE_USER
|
||||
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_SSL, CONF_VERIFY_SSL
|
||||
from homeassistant.const import (
|
||||
CONF_HOST,
|
||||
CONF_MAC,
|
||||
CONF_PASSWORD,
|
||||
CONF_SSL,
|
||||
CONF_VERIFY_SSL,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import FlowResultType
|
||||
from homeassistant.helpers.device_registry import format_mac
|
||||
@@ -338,6 +344,7 @@ async def test_full_flow_reconfigure(
|
||||
assert entry.data[CONF_SSL] is True
|
||||
assert entry.data[CONF_VERIFY_SSL] is False
|
||||
assert entry.data[CONF_GROUP] == "user"
|
||||
assert entry.data[CONF_PASSWORD] == "new_password"
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
@@ -385,6 +392,7 @@ async def test_full_flow_reconfigure_exceptions(
|
||||
assert entry.data[CONF_SSL] is True
|
||||
assert entry.data[CONF_VERIFY_SSL] is False
|
||||
assert entry.data[CONF_GROUP] == "user"
|
||||
assert entry.data[CONF_PASSWORD] == "new_password"
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user