diff --git a/tests/components/alarm_control_panel/test_mqtt.py b/tests/components/alarm_control_panel/test_mqtt.py index ce152a3d7c9..3a68b3cee44 100644 --- a/tests/components/alarm_control_panel/test_mqtt.py +++ b/tests/components/alarm_control_panel/test_mqtt.py @@ -7,10 +7,11 @@ from homeassistant.const import ( STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED, STATE_UNAVAILABLE, STATE_UNKNOWN) from homeassistant.components import alarm_control_panel +from homeassistant.components.mqtt.discovery import async_start from tests.common import ( - mock_mqtt_component, fire_mqtt_message, get_test_home_assistant, - assert_setup_component) + mock_mqtt_component, async_fire_mqtt_message, fire_mqtt_message, + get_test_home_assistant, assert_setup_component) CODE = 'HELLO_CODE' @@ -239,3 +240,32 @@ class TestAlarmControlPanelMQTT(unittest.TestCase): self.assertEqual(STATE_UNAVAILABLE, state.state) fire_mqtt_message(self.hass, 'availability-topic', 'good') + + +async def test_discovery_removal_alarm(hass, mqtt_mock, caplog): + """Test removal of discovered alarm_control_panel.""" + await async_start(hass, 'homeassistant', {}) + + data = ( + '{ "name": "Beer",' + ' "status_topic": "test_topic",' + ' "command_topic": "test_topic" }' + ) + + async_fire_mqtt_message(hass, + 'homeassistant/alarm_control_panel/bla/config', + data) + await hass.async_block_till_done() + + state = hass.states.get('alarm_control_panel.beer') + assert state is not None + assert state.name == 'Beer' + + async_fire_mqtt_message(hass, + 'homeassistant/alarm_control_panel/bla/config', + '') + await hass.async_block_till_done() + await hass.async_block_till_done() + + state = hass.states.get('alarm_control_panel.beer') + assert state is None diff --git a/tests/components/binary_sensor/test_mqtt.py b/tests/components/binary_sensor/test_mqtt.py index 0bc8c6c81fb..dfa01898ba4 100644 --- a/tests/components/binary_sensor/test_mqtt.py +++ b/tests/components/binary_sensor/test_mqtt.py @@ -4,6 +4,7 @@ import unittest import homeassistant.core as ha from homeassistant.setup import setup_component, async_setup_component import homeassistant.components.binary_sensor as binary_sensor +from homeassistant.components.mqtt.discovery import async_start from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.const import EVENT_STATE_CHANGED, STATE_UNAVAILABLE @@ -226,3 +227,24 @@ async def test_unique_id(hass): async_fire_mqtt_message(hass, 'test-topic', 'payload') await hass.async_block_till_done() assert len(hass.states.async_all()) == 1 + + +async def test_discovery_removal_binary_sensor(hass, mqtt_mock, caplog): + """Test removal of discovered binary_sensor.""" + await async_start(hass, 'homeassistant', {}) + data = ( + '{ "name": "Beer",' + ' "status_topic": "test_topic" }' + ) + async_fire_mqtt_message(hass, 'homeassistant/binary_sensor/bla/config', + data) + await hass.async_block_till_done() + state = hass.states.get('binary_sensor.beer') + assert state is not None + assert state.name == 'Beer' + async_fire_mqtt_message(hass, 'homeassistant/binary_sensor/bla/config', + '') + await hass.async_block_till_done() + await hass.async_block_till_done() + state = hass.states.get('binary_sensor.beer') + assert state is None diff --git a/tests/components/light/test_mqtt.py b/tests/components/light/test_mqtt.py index 1245411dcc4..3640a6a0130 100644 --- a/tests/components/light/test_mqtt.py +++ b/tests/components/light/test_mqtt.py @@ -146,10 +146,11 @@ from homeassistant.setup import setup_component from homeassistant.const import ( STATE_ON, STATE_OFF, STATE_UNAVAILABLE, ATTR_ASSUMED_STATE) import homeassistant.components.light as light +from homeassistant.components.mqtt.discovery import async_start import homeassistant.core as ha from tests.common import ( assert_setup_component, get_test_home_assistant, mock_mqtt_component, - fire_mqtt_message, mock_coro) + async_fire_mqtt_message, fire_mqtt_message, mock_coro) class TestLightMQTT(unittest.TestCase): @@ -876,3 +877,30 @@ class TestLightMQTT(unittest.TestCase): state = self.hass.states.get('light.test') self.assertEqual(STATE_UNAVAILABLE, state.state) + + +async def test_discovery_removal_light(hass, mqtt_mock, caplog): + """Test removal of discovered light.""" + await async_start(hass, 'homeassistant', {}) + + data = ( + '{ "name": "Beer",' + ' "status_topic": "test_topic",' + ' "command_topic": "test_topic" }' + ) + + async_fire_mqtt_message(hass, 'homeassistant/light/bla/config', + data) + await hass.async_block_till_done() + + state = hass.states.get('light.beer') + assert state is not None + assert state.name == 'Beer' + + async_fire_mqtt_message(hass, 'homeassistant/light/bla/config', + '') + await hass.async_block_till_done() + await hass.async_block_till_done() + + state = hass.states.get('light.beer') + assert state is None diff --git a/tests/components/mqtt/test_discovery.py b/tests/components/mqtt/test_discovery.py index 0656bbdc300..9e0ef14a3fa 100644 --- a/tests/components/mqtt/test_discovery.py +++ b/tests/components/mqtt/test_discovery.py @@ -181,111 +181,3 @@ def test_non_duplicate_discovery(hass, mqtt_mock, caplog): assert state_duplicate is None assert 'Component has already been discovered: ' \ 'binary_sensor bla' in caplog.text - - -@asyncio.coroutine -def test_discovery_removal(hass, mqtt_mock, caplog): - """Test expansion of abbreviated discovery payload.""" - yield from async_start(hass, 'homeassistant', {}) - - data = ( - '{ "name": "Beer",' - ' "status_topic": "test_topic",' - ' "command_topic": "test_topic" }' - ) - - async_fire_mqtt_message(hass, 'homeassistant/switch/bla/config', - data) - yield from hass.async_block_till_done() - - state = hass.states.get('switch.beer') - assert state is not None - assert state.name == 'Beer' - - async_fire_mqtt_message(hass, 'homeassistant/switch/bla/config', - '') - yield from hass.async_block_till_done() - yield from hass.async_block_till_done() - - state = hass.states.get('switch.beer') - assert state is None - - -@asyncio.coroutine -def test_discovery_removal_binary_sensor(hass, mqtt_mock, caplog): - """Test removal of discovered binary_sensor.""" - yield from async_start(hass, 'homeassistant', {}) - data = ( - '{ "name": "Beer",' - ' "status_topic": "test_topic" }' - ) - async_fire_mqtt_message(hass, 'homeassistant/binary_sensor/bla/config', - data) - yield from hass.async_block_till_done() - state = hass.states.get('binary_sensor.beer') - assert state is not None - assert state.name == 'Beer' - async_fire_mqtt_message(hass, 'homeassistant/binary_sensor/bla/config', - '') - yield from hass.async_block_till_done() - yield from hass.async_block_till_done() - state = hass.states.get('binary_sensor.beer') - assert state is None - - -@asyncio.coroutine -def test_discovery_removal_light(hass, mqtt_mock, caplog): - """Test removal of discovered light.""" - yield from async_start(hass, 'homeassistant', {}) - - data = ( - '{ "name": "Beer",' - ' "status_topic": "test_topic",' - ' "command_topic": "test_topic" }' - ) - - async_fire_mqtt_message(hass, 'homeassistant/light/bla/config', - data) - yield from hass.async_block_till_done() - - state = hass.states.get('light.beer') - assert state is not None - assert state.name == 'Beer' - - async_fire_mqtt_message(hass, 'homeassistant/light/bla/config', - '') - yield from hass.async_block_till_done() - yield from hass.async_block_till_done() - - state = hass.states.get('light.beer') - assert state is None - - -@asyncio.coroutine -def test_discovery_removal_alarm(hass, mqtt_mock, caplog): - """Test removal of discovered alarm_control_panel.""" - yield from async_start(hass, 'homeassistant', {}) - - data = ( - '{ "name": "Beer",' - ' "status_topic": "test_topic",' - ' "command_topic": "test_topic" }' - ) - - async_fire_mqtt_message(hass, - 'homeassistant/alarm_control_panel/bla/config', - data) - yield from hass.async_block_till_done() - - state = hass.states.get('alarm_control_panel.beer') - assert state is not None - assert state.name == 'Beer' - - async_fire_mqtt_message(hass, - 'homeassistant/alarm_control_panel/bla/config', - '') - yield from hass.async_block_till_done() - yield from hass.async_block_till_done() - - state = hass.states.get('alarm_control_panel.beer') - assert state is None diff --git a/tests/components/switch/test_mqtt.py b/tests/components/switch/test_mqtt.py index 321db7ed118..cad93e3bfce 100644 --- a/tests/components/switch/test_mqtt.py +++ b/tests/components/switch/test_mqtt.py @@ -7,6 +7,7 @@ from homeassistant.const import STATE_ON, STATE_OFF, STATE_UNAVAILABLE,\ ATTR_ASSUMED_STATE import homeassistant.core as ha import homeassistant.components.switch as switch +from homeassistant.components.mqtt.discovery import async_start from tests.common import ( mock_mqtt_component, fire_mqtt_message, get_test_home_assistant, mock_coro, async_mock_mqtt_component, async_fire_mqtt_message) @@ -306,3 +307,30 @@ async def test_unique_id(hass): assert len(hass.states.async_entity_ids()) == 2 # all switches group is 1, unique id created is 1 + + +async def test_discovery_removal_switch(hass, mqtt_mock, caplog): + """Test expansion of discovered switch.""" + await async_start(hass, 'homeassistant', {}) + + data = ( + '{ "name": "Beer",' + ' "status_topic": "test_topic",' + ' "command_topic": "test_topic" }' + ) + + async_fire_mqtt_message(hass, 'homeassistant/switch/bla/config', + data) + await hass.async_block_till_done() + + state = hass.states.get('switch.beer') + assert state is not None + assert state.name == 'Beer' + + async_fire_mqtt_message(hass, 'homeassistant/switch/bla/config', + '') + await hass.async_block_till_done() + await hass.async_block_till_done() + + state = hass.states.get('switch.beer') + assert state is None