Fix MQTT retained message not being re-dispatched (#12004)
* Fix MQTT retained message not being re-dispatched * Fix tests * Use paho-mqtt for retained messages * Improve code style * Store list of subscribers * Fix lint error * Adhere to Home Assistant's logging standard "Try to avoid brackets and additional quotes around the output to make it easier for users to parse the log." - https://home-assistant.io/developers/development_guidelines/ * Add reconnect tests * Fix lint error * Introduce Subscription Tests still need to be updated * Use namedtuple for MQTT messages ... And fix issues Accessing the config manually at runtime isn't ideal * Fix MQTT __init__.py tests * Updated usage of Mocks * Moved tests that were testing subscriptions out of the MQTTComponent test, because of how mock.patch was used * Adjusted the remaining tests for the MQTT clients new behavior - e.g. self.progress was removed * Updated the async_fire_mqtt_message helper * ✅ Update MQTT tests * Re-introduce the MQTT subscriptions through the dispatcher for tests - quite ugly though... 🚧 * Update fixtures to use our new MQTT mock 🎨 * 📝 Update base code according to comments * 🔨 Adjust MQTT test base * 🔨 Update other MQTT tests * 🍎 Fix carriage return in source files Apparently test_mqtt_json.py and test_mqtt_template.py were written on Windows. In order to not mess up the diff, I'll just redo the carriage return. * 🎨 Remove unused import * 📝 Remove fire_mqtt_client_message * 🐛 Fix using python 3.6 method What's very interesting is that 3.4 didn't fail on travis... * 🐛 Fix using assert directly
This commit is contained in:
parent
17e5740a0c
commit
b1c0cabe6c
15 changed files with 1531 additions and 1490 deletions
|
@ -1395,53 +1395,60 @@ class TestAlarmControlPanelManualMqtt(unittest.TestCase):
|
|||
|
||||
# Component should send disarmed alarm state on startup
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_DISARMED, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_DISARMED, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
|
||||
# Arm in home mode
|
||||
alarm_control_panel.alarm_arm_home(self.hass)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_PENDING, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_PENDING, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
# Fast-forward a little bit
|
||||
future = dt_util.utcnow() + timedelta(seconds=1)
|
||||
with patch(('homeassistant.components.alarm_control_panel.manual_mqtt.'
|
||||
'dt_util.utcnow'), return_value=future):
|
||||
fire_time_changed(self.hass, future)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_ARMED_HOME, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_ARMED_HOME, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
|
||||
# Arm in away mode
|
||||
alarm_control_panel.alarm_arm_away(self.hass)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_PENDING, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_PENDING, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
# Fast-forward a little bit
|
||||
future = dt_util.utcnow() + timedelta(seconds=1)
|
||||
with patch(('homeassistant.components.alarm_control_panel.manual_mqtt.'
|
||||
'dt_util.utcnow'), return_value=future):
|
||||
fire_time_changed(self.hass, future)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_ARMED_AWAY, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_ARMED_AWAY, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
|
||||
# Arm in night mode
|
||||
alarm_control_panel.alarm_arm_night(self.hass)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_PENDING, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_PENDING, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
# Fast-forward a little bit
|
||||
future = dt_util.utcnow() + timedelta(seconds=1)
|
||||
with patch(('homeassistant.components.alarm_control_panel.manual_mqtt.'
|
||||
'dt_util.utcnow'), return_value=future):
|
||||
fire_time_changed(self.hass, future)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_ARMED_NIGHT, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_ARMED_NIGHT, 0, True)
|
||||
self.mock_publish.async_publish.reset_mock()
|
||||
|
||||
# Disarm
|
||||
alarm_control_panel.alarm_disarm(self.hass)
|
||||
self.hass.block_till_done()
|
||||
self.assertEqual(('alarm/state', STATE_ALARM_DISARMED, 0, True),
|
||||
self.mock_publish.mock_calls[-2][1])
|
||||
self.mock_publish.async_publish.assert_called_once_with(
|
||||
'alarm/state', STATE_ALARM_DISARMED, 0, True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue