diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index e00fa0d5c8a..ea8264dad78 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -1021,6 +1021,8 @@ def make_entity_service_schema( vol.All( vol.Schema( { + # The frontend stores data here. Don't use in core. + vol.Remove("metadata"): dict, **schema, **ENTITY_SERVICE_FIELDS, }, diff --git a/tests/helpers/test_config_validation.py b/tests/helpers/test_config_validation.py index daa8d11d601..64c838e6c02 100644 --- a/tests/helpers/test_config_validation.py +++ b/tests/helpers/test_config_validation.py @@ -448,6 +448,32 @@ def test_entity_service_schema(): for value in options: schema(value) + options = ( + { + "required": 1, + "entity_id": "light.kitchen", + "metadata": {"some": "frontend_stuff"}, + }, + ) + for value in options: + validated = schema(value) + assert "metadata" not in validated + + +def test_entity_service_schema_with_metadata(): + """Test make_entity_service_schema with overridden metadata key.""" + schema = cv.make_entity_service_schema({vol.Required("metadata"): cv.positive_int}) + + options = ({"metadata": {"some": "frontend_stuff"}, "entity_id": "light.kitchen"},) + for value in options: + with pytest.raises(vol.MultipleInvalid): + cv.SERVICE_SCHEMA(value) + + options = ({"metadata": 1, "entity_id": "light.kitchen"},) + for value in options: + validated = schema(value) + assert "metadata" in validated + def test_slug(): """Test slug validation."""