Validate min/max for input_text config (#148909)

This commit is contained in:
karwosts 2025-07-17 07:27:41 -07:00 committed by GitHub
parent b33a556ca5
commit 40cabc8d70
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 12 deletions

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
CONF_MODE, CONF_MODE,
CONF_NAME, CONF_NAME,
CONF_UNIT_OF_MEASUREMENT, CONF_UNIT_OF_MEASUREMENT,
MAX_LENGTH_STATE_STATE,
SERVICE_RELOAD, SERVICE_RELOAD,
) )
from homeassistant.core import HomeAssistant, ServiceCall, callback from homeassistant.core import HomeAssistant, ServiceCall, callback
@ -51,8 +52,12 @@ STORAGE_VERSION = 1
STORAGE_FIELDS: VolDictType = { STORAGE_FIELDS: VolDictType = {
vol.Required(CONF_NAME): vol.All(str, vol.Length(min=1)), vol.Required(CONF_NAME): vol.All(str, vol.Length(min=1)),
vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.Coerce(int), vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.All(
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.Coerce(int), vol.Coerce(int), vol.Range(0, MAX_LENGTH_STATE_STATE)
),
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.All(
vol.Coerce(int), vol.Range(1, MAX_LENGTH_STATE_STATE)
),
vol.Optional(CONF_INITIAL, ""): cv.string, vol.Optional(CONF_INITIAL, ""): cv.string,
vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_ICON): cv.icon,
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
@ -84,8 +89,12 @@ CONFIG_SCHEMA = vol.Schema(
lambda value: value or {}, lambda value: value or {},
{ {
vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.Coerce(int), vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.All(
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.Coerce(int), vol.Coerce(int), vol.Range(0, MAX_LENGTH_STATE_STATE)
),
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.All(
vol.Coerce(int), vol.Range(1, MAX_LENGTH_STATE_STATE)
),
vol.Optional(CONF_INITIAL): cv.string, vol.Optional(CONF_INITIAL): cv.string,
vol.Optional(CONF_ICON): cv.icon, vol.Optional(CONF_ICON): cv.icon,
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,

View File

@ -81,16 +81,21 @@ async def async_set_value(hass: HomeAssistant, entity_id: str, value: str) -> No
) )
async def test_config(hass: HomeAssistant) -> None: @pytest.mark.parametrize(
"""Test config.""" "invalid_config",
invalid_configs = [ [
None, None,
{},
{"name with space": None}, {"name with space": None},
{"test_1": {"min": 50, "max": 50}}, {"test_1": {"min": 51, "max": 50}},
] {"test_1": {"min": -1, "max": 100}},
for cfg in invalid_configs: {"test_1": {"min": 0, "max": 256}},
assert not await async_setup_component(hass, DOMAIN, {DOMAIN: cfg}) {"test_1": {"min": 0, "max": 3, "initial": "aaaaa"}},
],
)
async def test_config(hass: HomeAssistant, invalid_config) -> None:
"""Test config."""
assert not await async_setup_component(hass, DOMAIN, {DOMAIN: invalid_config})
async def test_set_value(hass: HomeAssistant) -> None: async def test_set_value(hass: HomeAssistant) -> None: