From 65a4b3c9f8543ea61d95335c76eb8c642b5a9f0c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 10 Aug 2015 23:11:57 -0700 Subject: [PATCH] Add MQTT component tests --- .coveragerc | 2 - tests/components/test_mqtt.py | 104 ++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 tests/components/test_mqtt.py diff --git a/.coveragerc b/.coveragerc index 012084af5ce..1dc94450eac 100644 --- a/.coveragerc +++ b/.coveragerc @@ -16,8 +16,6 @@ omit = homeassistant/components/modbus.py homeassistant/components/*/modbus.py - homeassistant/components/mqtt.py - homeassistant/components/wink.py homeassistant/components/*/wink.py diff --git a/tests/components/test_mqtt.py b/tests/components/test_mqtt.py new file mode 100644 index 00000000000..671cae4237f --- /dev/null +++ b/tests/components/test_mqtt.py @@ -0,0 +1,104 @@ +""" +tests.test_component_mqtt +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tests MQTT component. +""" +import unittest + +import homeassistant as ha +import homeassistant.components.mqtt as mqtt +from homeassistant.const import EVENT_CALL_SERVICE + +from tests.common import mock_mqtt_component, fire_mqtt_message + + +class TestDemo(unittest.TestCase): + """ Test the demo module. """ + + def setUp(self): # pylint: disable=invalid-name + self.hass = ha.HomeAssistant() + mock_mqtt_component(self.hass) + self.calls = [] + + def tearDown(self): # pylint: disable=invalid-name + """ Stop down stuff we started. """ + self.hass.stop() + + def record_calls(self, *args): + self.calls.append(args) + + def test_publish_calls_service(self): + self.hass.bus.listen_once(EVENT_CALL_SERVICE, self.record_calls) + + mqtt.publish(self.hass, 'test-topic', 'test-payload') + + self.hass.pool.block_till_done() + + self.assertEqual(1, len(self.calls)) + self.assertEqual('test-topic', self.calls[0][0].data[mqtt.ATTR_TOPIC]) + self.assertEqual('test-payload', self.calls[0][0].data[mqtt.ATTR_PAYLOAD]) + + def test_subscribe_topic(self): + mqtt.subscribe(self.hass, 'test-topic', self.record_calls) + + fire_mqtt_message(self.hass, 'test-topic', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(1, len(self.calls)) + self.assertEqual('test-topic', self.calls[0][0]) + self.assertEqual('test-payload', self.calls[0][1]) + + def test_subscribe_topic_not_match(self): + mqtt.subscribe(self.hass, 'test-topic', self.record_calls) + + fire_mqtt_message(self.hass, 'another-test-topic', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(0, len(self.calls)) + + def test_subscribe_topic_level_wildcard(self): + mqtt.subscribe(self.hass, 'test-topic/+/on', self.record_calls) + + fire_mqtt_message(self.hass, 'test-topic/bier/on', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(1, len(self.calls)) + self.assertEqual('test-topic/bier/on', self.calls[0][0]) + self.assertEqual('test-payload', self.calls[0][1]) + + def test_subscribe_topic_level_wildcard_no_subtree_match(self): + mqtt.subscribe(self.hass, 'test-topic/+/on', self.record_calls) + + fire_mqtt_message(self.hass, 'test-topic/bier', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(0, len(self.calls)) + + def test_subscribe_topic_subtree_wildcard_subtree_topic(self): + mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls) + + fire_mqtt_message(self.hass, 'test-topic/bier/on', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(1, len(self.calls)) + self.assertEqual('test-topic/bier/on', self.calls[0][0]) + self.assertEqual('test-payload', self.calls[0][1]) + + def test_subscribe_topic_subtree_wildcard_root_topic(self): + mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls) + + fire_mqtt_message(self.hass, 'test-topic', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(1, len(self.calls)) + self.assertEqual('test-topic', self.calls[0][0]) + self.assertEqual('test-payload', self.calls[0][1]) + + def test_subscribe_topic_subtree_wildcard_no_match(self): + mqtt.subscribe(self.hass, 'test-topic/#', self.record_calls) + + fire_mqtt_message(self.hass, 'another-test-topic', 'test-payload') + + self.hass.pool.block_till_done() + self.assertEqual(0, len(self.calls))