From 8c2e63807cb867182d31d1755a4169b63488c2b0 Mon Sep 17 00:00:00 2001
From: Joost Lekkerkerker <joostlek@outlook.com>
Date: Fri, 30 Aug 2024 22:02:10 +0200
Subject: [PATCH] Make set_value required in number template (#124917)

* Make set_value required in number template

* Make set_value required in number template

* Fix tests
---
 homeassistant/components/template/number.py   |  9 ++++-----
 tests/components/template/test_config_flow.py | 20 +++++++++++++++++++
 tests/components/template/test_init.py        | 10 ++++++++++
 tests/components/template/test_number.py      | 10 ++++++++++
 4 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/homeassistant/components/template/number.py b/homeassistant/components/template/number.py
index 955600a9b9e..499ddc192cc 100644
--- a/homeassistant/components/template/number.py
+++ b/homeassistant/components/template/number.py
@@ -70,7 +70,7 @@ NUMBER_CONFIG_SCHEMA = vol.Schema(
         vol.Required(CONF_NAME): cv.template,
         vol.Required(CONF_STATE): cv.template,
         vol.Required(CONF_STEP): cv.template,
-        vol.Optional(CONF_SET_VALUE): cv.SCRIPT_SCHEMA,
+        vol.Required(CONF_SET_VALUE): cv.SCRIPT_SCHEMA,
         vol.Optional(CONF_MIN): cv.template,
         vol.Optional(CONF_MAX): cv.template,
         vol.Optional(CONF_DEVICE_ID): selector.DeviceSelector(),
@@ -154,11 +154,10 @@ class TemplateNumber(TemplateEntity, NumberEntity):
         super().__init__(hass, config=config, unique_id=unique_id)
         assert self._attr_name is not None
         self._value_template = config[CONF_STATE]
-        self._command_set_value = (
-            Script(hass, config[CONF_SET_VALUE], self._attr_name, DOMAIN)
-            if config.get(CONF_SET_VALUE, None) is not None
-            else None
+        self._command_set_value = Script(
+            hass, config[CONF_SET_VALUE], self._attr_name, DOMAIN
         )
+
         self._step_template = config[CONF_STEP]
         self._min_value_template = config[CONF_MIN]
         self._max_value_template = config[CONF_MAX]
diff --git a/tests/components/template/test_config_flow.py b/tests/components/template/test_config_flow.py
index a62370f4261..f8ab190e664 100644
--- a/tests/components/template/test_config_flow.py
+++ b/tests/components/template/test_config_flow.py
@@ -101,11 +101,21 @@ from tests.typing import WebSocketGenerator
                 "min": "{{ 0 }}",
                 "max": "{{ 100 }}",
                 "step": "{{ 0.1 }}",
+                "set_value": {
+                    "action": "input_number.set_value",
+                    "target": {"entity_id": "input_number.test"},
+                    "data": {"value": "{{ value }}"},
+                },
             },
             {
                 "min": "{{ 0 }}",
                 "max": "{{ 100 }}",
                 "step": "{{ 0.1 }}",
+                "set_value": {
+                    "action": "input_number.set_value",
+                    "target": {"entity_id": "input_number.test"},
+                    "data": {"value": "{{ value }}"},
+                },
             },
             {},
         ),
@@ -444,11 +454,21 @@ def get_suggested(schema, key):
                 "min": "{{ 0 }}",
                 "max": "{{ 100 }}",
                 "step": "{{ 0.1 }}",
+                "set_value": {
+                    "action": "input_number.set_value",
+                    "target": {"entity_id": "input_number.test"},
+                    "data": {"value": "{{ value }}"},
+                },
             },
             {
                 "min": "{{ 0 }}",
                 "max": "{{ 100 }}",
                 "step": "{{ 0.1 }}",
+                "set_value": {
+                    "action": "input_number.set_value",
+                    "target": {"entity_id": "input_number.test"},
+                    "data": {"value": "{{ value }}"},
+                },
             },
             "state",
         ),
diff --git a/tests/components/template/test_init.py b/tests/components/template/test_init.py
index 06d59d4d176..3b4db4bf668 100644
--- a/tests/components/template/test_init.py
+++ b/tests/components/template/test_init.py
@@ -322,12 +322,22 @@ async def async_yaml_patch_helper(hass: HomeAssistant, filename: str) -> None:
                 "min": "{{ 0 }}",
                 "max": "{{ 100 }}",
                 "step": "{{ 0.1 }}",
+                "set_value": {
+                    "action": "input_number.set_value",
+                    "target": {"entity_id": "input_number.test"},
+                    "data": {"value": "{{ value }}"},
+                },
             },
             {
                 "state": "{{ 11 }}",
                 "min": "{{ 0 }}",
                 "max": "{{ 100 }}",
                 "step": "{{ 0.1 }}",
+                "set_value": {
+                    "action": "input_number.set_value",
+                    "target": {"entity_id": "input_number.test"},
+                    "data": {"value": "{{ value }}"},
+                },
             },
         ),
         (
diff --git a/tests/components/template/test_number.py b/tests/components/template/test_number.py
index c8befc2b8f8..fdca94d9fa4 100644
--- a/tests/components/template/test_number.py
+++ b/tests/components/template/test_number.py
@@ -61,6 +61,11 @@ async def test_setup_config_entry(
             "min": "{{ 0 }}",
             "max": "{{ 100 }}",
             "step": "{{ 0.1 }}",
+            "set_value": {
+                "action": "input_number.set_value",
+                "target": {"entity_id": "input_number.test"},
+                "data": {"value": "{{ value }}"},
+            },
         },
         title="My template",
     )
@@ -522,6 +527,11 @@ async def test_device_id(
             "min": "{{ 0 }}",
             "max": "{{ 100 }}",
             "step": "{{ 0.1 }}",
+            "set_value": {
+                "action": "input_number.set_value",
+                "target": {"entity_id": "input_number.test"},
+                "data": {"value": "{{ value }}"},
+            },
             "device_id": device_entry.id,
         },
         title="My template",