mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
mqtt_statestream: Add options to publish attributes/timestamps (#9645)
This commit is contained in:
committed by
Pascal Vizeli
parent
3bd31b91fb
commit
755a2a8291
@@ -1,5 +1,5 @@
|
||||
"""The tests for the MQTT statestream component."""
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import ANY, call, patch
|
||||
|
||||
from homeassistant.setup import setup_component
|
||||
import homeassistant.components.mqtt_statestream as statestream
|
||||
@@ -24,11 +24,17 @@ class TestMqttStateStream(object):
|
||||
"""Stop everything that was started."""
|
||||
self.hass.stop()
|
||||
|
||||
def add_statestream(self, base_topic=None):
|
||||
def add_statestream(self, base_topic=None, publish_attributes=None,
|
||||
publish_timestamps=None):
|
||||
"""Add a mqtt_statestream component."""
|
||||
config = {}
|
||||
if base_topic:
|
||||
config['base_topic'] = base_topic
|
||||
if publish_attributes:
|
||||
config['publish_attributes'] = publish_attributes
|
||||
if publish_timestamps:
|
||||
config['publish_timestamps'] = publish_timestamps
|
||||
print("Publishing timestamps")
|
||||
return setup_component(self.hass, statestream.DOMAIN, {
|
||||
statestream.DOMAIN: config})
|
||||
|
||||
@@ -36,10 +42,14 @@ class TestMqttStateStream(object):
|
||||
"""Setup should fail if no base_topic is set."""
|
||||
assert self.add_statestream() is False
|
||||
|
||||
def test_setup_succeeds(self):
|
||||
def test_setup_succeeds_without_attributes(self):
|
||||
""""Test the success of the setup with a valid base_topic."""
|
||||
assert self.add_statestream(base_topic='pub')
|
||||
|
||||
def test_setup_succeeds_with_attributes(self):
|
||||
""""Test setup with a valid base_topic and publish_attributes."""
|
||||
assert self.add_statestream(base_topic='pub', publish_attributes=True)
|
||||
|
||||
@patch('homeassistant.components.mqtt.async_publish')
|
||||
@patch('homeassistant.core.dt_util.utcnow')
|
||||
def test_state_changed_event_sends_message(self, mock_utcnow, mock_pub):
|
||||
@@ -60,6 +70,77 @@ class TestMqttStateStream(object):
|
||||
self.hass.block_till_done()
|
||||
|
||||
# Make sure 'on' was published to pub/fake/entity/state
|
||||
mock_pub.assert_called_with(self.hass, 'pub/fake/entity/state',
|
||||
'on', 1, True)
|
||||
mock_pub.assert_called_with(self.hass, 'pub/fake/entity/state', 'on',
|
||||
1, True)
|
||||
assert mock_pub.called
|
||||
|
||||
@patch('homeassistant.components.mqtt.async_publish')
|
||||
@patch('homeassistant.core.dt_util.utcnow')
|
||||
def test_state_changed_event_sends_message_and_timestamp(
|
||||
self,
|
||||
mock_utcnow,
|
||||
mock_pub):
|
||||
""""Test the sending of a message and timestamps if event changed."""
|
||||
e_id = 'another.entity'
|
||||
base_topic = 'pub'
|
||||
|
||||
# Add the statestream component for publishing state updates
|
||||
assert self.add_statestream(base_topic=base_topic,
|
||||
publish_attributes=None,
|
||||
publish_timestamps=True)
|
||||
self.hass.block_till_done()
|
||||
|
||||
# Reset the mock because it will have already gotten calls for the
|
||||
# mqtt_statestream state change on initialization, etc.
|
||||
mock_pub.reset_mock()
|
||||
|
||||
# Set a state of an entity
|
||||
mock_state_change_event(self.hass, State(e_id, 'on'))
|
||||
self.hass.block_till_done()
|
||||
|
||||
# Make sure 'on' was published to pub/fake/entity/state
|
||||
calls = [
|
||||
call.async_publish(self.hass, 'pub/another/entity/state', 'on', 1,
|
||||
True),
|
||||
call.async_publish(self.hass, 'pub/another/entity/last_changed',
|
||||
ANY, 1, True),
|
||||
call.async_publish(self.hass, 'pub/another/entity/last_updated',
|
||||
ANY, 1, True),
|
||||
]
|
||||
|
||||
mock_pub.assert_has_calls(calls, any_order=True)
|
||||
assert mock_pub.called
|
||||
|
||||
@patch('homeassistant.components.mqtt.async_publish')
|
||||
@patch('homeassistant.core.dt_util.utcnow')
|
||||
def test_state_changed_attr_sends_message(self, mock_utcnow, mock_pub):
|
||||
""""Test the sending of a new message if attribute changed."""
|
||||
e_id = 'fake.entity'
|
||||
base_topic = 'pub'
|
||||
|
||||
# Add the statestream component for publishing state updates
|
||||
assert self.add_statestream(base_topic=base_topic,
|
||||
publish_attributes=True)
|
||||
self.hass.block_till_done()
|
||||
|
||||
# Reset the mock because it will have already gotten calls for the
|
||||
# mqtt_statestream state change on initialization, etc.
|
||||
mock_pub.reset_mock()
|
||||
|
||||
test_attributes = {"testing": "YES"}
|
||||
|
||||
# Set a state of an entity
|
||||
mock_state_change_event(self.hass, State(e_id, 'off',
|
||||
attributes=test_attributes))
|
||||
self.hass.block_till_done()
|
||||
|
||||
# Make sure 'on' was published to pub/fake/entity/state
|
||||
calls = [
|
||||
call.async_publish(self.hass, 'pub/fake/entity/state', 'off', 1,
|
||||
True),
|
||||
call.async_publish(self.hass, 'pub/fake/entity/testing', 'YES',
|
||||
1, True)
|
||||
]
|
||||
|
||||
mock_pub.assert_has_calls(calls, any_order=True)
|
||||
assert mock_pub.called
|
||||
|
||||
Reference in New Issue
Block a user