From acbf45d5f89bb083595c810152746b3f24792268 Mon Sep 17 00:00:00 2001 From: Egor Tsinko Date: Thu, 26 Oct 2017 23:57:31 -0600 Subject: [PATCH] added platform discovery code back into device_tracker (#10169) --- .../components/device_tracker/__init__.py | 9 ++++++++- tests/components/device_tracker/test_init.py | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/device_tracker/__init__.py b/homeassistant/components/device_tracker/__init__.py index 9a6dffc6101..05131a039cd 100644 --- a/homeassistant/components/device_tracker/__init__.py +++ b/homeassistant/components/device_tracker/__init__.py @@ -21,7 +21,7 @@ from homeassistant.components import group, zone from homeassistant.config import load_yaml_config_file, async_log_exception from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.aiohttp_client import async_get_clientsession -from homeassistant.helpers import config_per_platform +from homeassistant.helpers import config_per_platform, discovery from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.restore_state import async_get_last_state @@ -175,6 +175,13 @@ def async_setup(hass: HomeAssistantType, config: ConfigType): tracker.async_setup_group() + @asyncio.coroutine + def async_platform_discovered(platform, info): + """Load a platform.""" + yield from async_setup_platform(platform, {}, disc_info=info) + + discovery.async_listen_platform(hass, DOMAIN, async_platform_discovered) + # Clean up stale devices async_track_utc_time_change( hass, tracker.async_update_stale, second=range(0, 60, 5)) diff --git a/tests/components/device_tracker/test_init.py b/tests/components/device_tracker/test_init.py index ecdbe0085ee..a8531e2aa69 100644 --- a/tests/components/device_tracker/test_init.py +++ b/tests/components/device_tracker/test_init.py @@ -11,6 +11,7 @@ import os from homeassistant.components import zone from homeassistant.core import callback, State from homeassistant.setup import setup_component +from homeassistant.helpers import discovery from homeassistant.loader import get_component from homeassistant.util.async import run_coroutine_threadsafe import homeassistant.util.dt as dt_util @@ -310,6 +311,23 @@ class TestComponentsDeviceTracker(unittest.TestCase): 'No http request for macvendor made!' self.assertEqual(tracker.devices['b827eb000000'].vendor, vendor_string) + @patch( + 'homeassistant.components.device_tracker.DeviceTracker.see') + @patch( + 'homeassistant.components.device_tracker.demo.setup_scanner', + autospec=True) + def test_discover_platform(self, mock_demo_setup_scanner, mock_see): + """Test discovery of device_tracker demo platform.""" + assert device_tracker.DOMAIN not in self.hass.config.components + discovery.load_platform( + self.hass, device_tracker.DOMAIN, 'demo', {'test_key': 'test_val'}, + {}) + self.hass.block_till_done() + assert device_tracker.DOMAIN in self.hass.config.components + assert mock_demo_setup_scanner.called + assert mock_demo_setup_scanner.call_args[0] == ( + self.hass, {}, mock_see, {'test_key': 'test_val'}) + def test_update_stale(self): """Test stalled update.""" scanner = get_component('device_tracker.test').SCANNER