Improve logging use of deprecated schema option for mqtt vacuum (#119724)

This commit is contained in:
Jan Bouwhuis 2024-06-15 16:50:12 +02:00 committed by GitHub
parent af0f540dd4
commit b405e2f03e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 46 additions and 12 deletions

View file

@ -170,6 +170,15 @@ def _fail_legacy_config(discovery: bool) -> Callable[[ConfigType], ConfigType]:
)
if discovery:
_LOGGER.warning(
"The `schema` option is deprecated for MQTT %s, but "
"it was used in a discovery payload. Please contact the maintainer "
"of the integration or service that supplies the config, and suggest "
"to remove the option. Got %s at discovery topic %s",
vacuum.DOMAIN,
config,
getattr(config, "discovery_data")["discovery_topic"],
)
return config
translation_key = "deprecation_mqtt_schema_vacuum_yaml"

View file

@ -2,6 +2,7 @@
from copy import deepcopy
import json
import logging
from typing import Any
from unittest.mock import patch
@ -12,7 +13,6 @@ from homeassistant.components.mqtt import vacuum as mqttvacuum
from homeassistant.components.mqtt.const import CONF_COMMAND_TOPIC, CONF_STATE_TOPIC
from homeassistant.components.mqtt.vacuum import (
ALL_SERVICES,
CONF_SCHEMA,
MQTT_VACUUM_ATTRIBUTES_BLOCKED,
SERVICE_TO_STRING,
services_to_strings,
@ -77,7 +77,6 @@ STATE_TOPIC = "vacuum/state"
DEFAULT_CONFIG = {
mqtt.DOMAIN: {
vacuum.DOMAIN: {
CONF_SCHEMA: "state",
CONF_NAME: "mqtttest",
CONF_COMMAND_TOPIC: COMMAND_TOPIC,
mqttvacuum.CONF_SEND_COMMAND_TOPIC: SEND_COMMAND_TOPIC,
@ -88,7 +87,7 @@ DEFAULT_CONFIG = {
}
}
DEFAULT_CONFIG_2 = {mqtt.DOMAIN: {vacuum.DOMAIN: {"schema": "state", "name": "test"}}}
DEFAULT_CONFIG_2 = {mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test"}}}
CONFIG_ALL_SERVICES = help_custom_config(
vacuum.DOMAIN,
@ -103,6 +102,35 @@ CONFIG_ALL_SERVICES = help_custom_config(
)
async def test_warning_schema_option(
hass: HomeAssistant,
mqtt_mock_entry: MqttMockHAClientGenerator,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test the warning on use of deprecated schema option."""
await mqtt_mock_entry()
# Send discovery message with deprecated schema option
async_fire_mqtt_message(
hass,
f"homeassistant/{vacuum.DOMAIN}/bla/config",
'{"name": "test", "schema": "state", "o": {"name": "Bla2MQTT", "sw": "0.99", "url":"https://example.com/support"}}',
)
await hass.async_block_till_done()
await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get("vacuum.test")
assert state is not None
with caplog.at_level(logging.WARNING):
assert (
"The `schema` option is deprecated for MQTT vacuum, but it was used in a "
"discovery payload. Please contact the maintainer of the integration or "
"service that supplies the config, and suggest to remove the option."
in caplog.text
)
assert "https://example.com/support" in caplog.text
assert "at discovery topic homeassistant/vacuum/bla/config" in caplog.text
@pytest.mark.parametrize("hass_config", [DEFAULT_CONFIG])
async def test_default_supported_features(
hass: HomeAssistant, mqtt_mock_entry: MqttMockHAClientGenerator
@ -261,7 +289,6 @@ async def test_commands_without_supported_features(
"mqtt": {
"vacuum": {
"name": "test",
"schema": "state",
mqttvacuum.CONF_SUPPORTED_FEATURES: services_to_strings(
ALL_SERVICES, SERVICE_TO_STRING
),
@ -525,13 +552,11 @@ async def test_discovery_update_attr(
mqtt.DOMAIN: {
vacuum.DOMAIN: [
{
"schema": "state",
"name": "Test 1",
"command_topic": "command-topic",
"unique_id": "TOTALLY_UNIQUE",
},
{
"schema": "state",
"name": "Test 2",
"command_topic": "command-topic",
"unique_id": "TOTALLY_UNIQUE",
@ -554,7 +579,7 @@ async def test_discovery_removal_vacuum(
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test removal of discovered vacuum."""
data = '{ "schema": "state", "name": "test", "command_topic": "test_topic"}'
data = '{"name": "test", "command_topic": "test_topic"}'
await help_test_discovery_removal(
hass, mqtt_mock_entry, caplog, vacuum.DOMAIN, data
)
@ -566,8 +591,8 @@ async def test_discovery_update_vacuum(
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test update of discovered vacuum."""
config1 = {"schema": "state", "name": "Beer", "command_topic": "test_topic"}
config2 = {"schema": "state", "name": "Milk", "command_topic": "test_topic"}
config1 = {"name": "Beer", "command_topic": "test_topic"}
config2 = {"name": "Milk", "command_topic": "test_topic"}
await help_test_discovery_update(
hass, mqtt_mock_entry, caplog, vacuum.DOMAIN, config1, config2
)
@ -579,7 +604,7 @@ async def test_discovery_update_unchanged_vacuum(
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test update of discovered vacuum."""
data1 = '{ "schema": "state", "name": "Beer", "command_topic": "test_topic"}'
data1 = '{"name": "Beer", "command_topic": "test_topic"}'
with patch(
"homeassistant.components.mqtt.vacuum.MqttStateVacuum.discovery_update"
) as discovery_update:
@ -600,8 +625,8 @@ async def test_discovery_broken(
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test handling of bad discovery message."""
data1 = '{ "schema": "state", "name": "Beer", "command_topic": "test_topic#"}'
data2 = '{ "schema": "state", "name": "Milk", "command_topic": "test_topic"}'
data1 = '{"name": "Beer", "command_topic": "test_topic#"}'
data2 = '{"name": "Milk", "command_topic": "test_topic"}'
await help_test_discovery_broken(
hass, mqtt_mock_entry, caplog, vacuum.DOMAIN, data1, data2
)