Skip to content

Commit 40cabc8

Browse files
authored
Validate min/max for input_text config (home-assistant#148909)
1 parent b33a556 commit 40cabc8

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

homeassistant/components/input_text/__init__.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
CONF_MODE,
1616
CONF_NAME,
1717
CONF_UNIT_OF_MEASUREMENT,
18+
MAX_LENGTH_STATE_STATE,
1819
SERVICE_RELOAD,
1920
)
2021
from homeassistant.core import HomeAssistant, ServiceCall, callback
@@ -51,8 +52,12 @@
5152

5253
STORAGE_FIELDS: VolDictType = {
5354
vol.Required(CONF_NAME): vol.All(str, vol.Length(min=1)),
54-
vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.Coerce(int),
55-
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.Coerce(int),
55+
vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.All(
56+
vol.Coerce(int), vol.Range(0, MAX_LENGTH_STATE_STATE)
57+
),
58+
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.All(
59+
vol.Coerce(int), vol.Range(1, MAX_LENGTH_STATE_STATE)
60+
),
5661
vol.Optional(CONF_INITIAL, ""): cv.string,
5762
vol.Optional(CONF_ICON): cv.icon,
5863
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
@@ -84,8 +89,12 @@ def _cv_input_text(config: dict[str, Any]) -> dict[str, Any]:
8489
lambda value: value or {},
8590
{
8691
vol.Optional(CONF_NAME): cv.string,
87-
vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.Coerce(int),
88-
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.Coerce(int),
92+
vol.Optional(CONF_MIN, default=CONF_MIN_VALUE): vol.All(
93+
vol.Coerce(int), vol.Range(0, MAX_LENGTH_STATE_STATE)
94+
),
95+
vol.Optional(CONF_MAX, default=CONF_MAX_VALUE): vol.All(
96+
vol.Coerce(int), vol.Range(1, MAX_LENGTH_STATE_STATE)
97+
),
8998
vol.Optional(CONF_INITIAL): cv.string,
9099
vol.Optional(CONF_ICON): cv.icon,
91100
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,

tests/components/input_text/test_init.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,21 @@ async def async_set_value(hass: HomeAssistant, entity_id: str, value: str) -> No
8181
)
8282

8383

84-
async def test_config(hass: HomeAssistant) -> None:
85-
"""Test config."""
86-
invalid_configs = [
84+
@pytest.mark.parametrize(
85+
"invalid_config",
86+
[
8787
None,
88-
{},
8988
{"name with space": None},
90-
{"test_1": {"min": 50, "max": 50}},
91-
]
92-
for cfg in invalid_configs:
93-
assert not await async_setup_component(hass, DOMAIN, {DOMAIN: cfg})
89+
{"test_1": {"min": 51, "max": 50}},
90+
{"test_1": {"min": -1, "max": 100}},
91+
{"test_1": {"min": 0, "max": 256}},
92+
{"test_1": {"min": 0, "max": 3, "initial": "aaaaa"}},
93+
],
94+
)
95+
async def test_config(hass: HomeAssistant, invalid_config) -> None:
96+
"""Test config."""
97+
98+
assert not await async_setup_component(hass, DOMAIN, {DOMAIN: invalid_config})
9499

95100

96101
async def test_set_value(hass: HomeAssistant) -> None:

0 commit comments

Comments
 (0)