Filter MQTT JSON attributes (#52076)
* Filter JSON attributes * Apply suggestions from code review Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> * Refactor, add tests Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This commit is contained in:
parent
09b3882a5b
commit
04c9665241
3 changed files with 68 additions and 2 deletions
|
@ -7,6 +7,7 @@ from unittest.mock import ANY, patch
|
|||
from homeassistant.components import mqtt
|
||||
from homeassistant.components.mqtt import debug_info
|
||||
from homeassistant.components.mqtt.const import MQTT_DISCONNECTED
|
||||
from homeassistant.components.mqtt.mixins import MQTT_ATTRIBUTES_BLOCKED
|
||||
from homeassistant.const import ATTR_ASSUMED_STATE, STATE_UNAVAILABLE
|
||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
||||
|
@ -493,6 +494,37 @@ async def help_test_setting_attribute_via_mqtt_json_message(
|
|||
assert state.attributes.get("val") == "100"
|
||||
|
||||
|
||||
async def help_test_setting_blocked_attribute_via_mqtt_json_message(
|
||||
hass, mqtt_mock, domain, config, extra_blocked_attributes
|
||||
):
|
||||
"""Test the setting of blocked attribute via MQTT with JSON payload.
|
||||
|
||||
This is a test helper for the MqttAttributes mixin.
|
||||
"""
|
||||
extra_blocked_attributes = extra_blocked_attributes or []
|
||||
|
||||
# Add JSON attributes settings to config
|
||||
config = copy.deepcopy(config)
|
||||
config[domain]["json_attributes_topic"] = "attr-topic"
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
domain,
|
||||
config,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
val = "abc123"
|
||||
|
||||
for attr in MQTT_ATTRIBUTES_BLOCKED:
|
||||
async_fire_mqtt_message(hass, "attr-topic", json.dumps({attr: val}))
|
||||
state = hass.states.get(f"{domain}.test")
|
||||
assert state.attributes.get(attr) != val
|
||||
|
||||
for attr in extra_blocked_attributes:
|
||||
async_fire_mqtt_message(hass, "attr-topic", json.dumps({attr: val}))
|
||||
state = hass.states.get(f"{domain}.test")
|
||||
assert state.attributes.get(attr) != val
|
||||
|
||||
|
||||
async def help_test_setting_attribute_with_template(hass, mqtt_mock, domain, config):
|
||||
"""Test the setting of attribute via MQTT with JSON payload.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue