mirror of
https://github.com/elisspace/core.git
synced 2026-10-01 14:59:53 +00:00
Add more HomeKit models for discovery (#24391)
* Add more HomeKit models for discovery * Discover Tradfri with HomeKit * Add Wemo device info * Allow full match for HomeKit model * Fix tests
This commit is contained in:
@@ -283,7 +283,7 @@ async def test_discovery_ignored_model(hass):
|
||||
'host': '127.0.0.1',
|
||||
'port': 8080,
|
||||
'properties': {
|
||||
'md': 'BSB002',
|
||||
'md': config_flow.HOMEKIT_IGNORE[0],
|
||||
'id': '00:00:00:00:00:00',
|
||||
'c#': 1,
|
||||
'sf': 1,
|
||||
|
||||
@@ -371,3 +371,38 @@ async def test_creating_entry_removes_entries_for_same_host_or_bridge(hass):
|
||||
# We did not process the result of this entry but already removed the old
|
||||
# ones. So we should have 0 entries.
|
||||
assert len(hass.config_entries.async_entries('hue')) == 0
|
||||
|
||||
|
||||
async def test_bridge_homekit(hass):
|
||||
"""Test a bridge being discovered via HomeKit."""
|
||||
flow = config_flow.HueFlowHandler()
|
||||
flow.hass = hass
|
||||
flow.context = {}
|
||||
|
||||
with patch.object(config_flow, 'get_bridge',
|
||||
side_effect=errors.AuthenticationRequired):
|
||||
result = await flow.async_step_homekit({
|
||||
'host': '0.0.0.0',
|
||||
'serial': '1234',
|
||||
'manufacturerURL': config_flow.HUE_MANUFACTURERURL
|
||||
})
|
||||
|
||||
assert result['type'] == 'form'
|
||||
assert result['step_id'] == 'link'
|
||||
|
||||
|
||||
async def test_bridge_homekit_already_configured(hass):
|
||||
"""Test if a HomeKit discovered bridge has already been configured."""
|
||||
MockConfigEntry(domain='hue', data={
|
||||
'host': '0.0.0.0'
|
||||
}).add_to_hass(hass)
|
||||
|
||||
flow = config_flow.HueFlowHandler()
|
||||
flow.hass = hass
|
||||
flow.context = {}
|
||||
|
||||
result = await flow.async_step_homekit({
|
||||
'host': '0.0.0.0',
|
||||
})
|
||||
|
||||
assert result['type'] == 'abort'
|
||||
|
||||
@@ -31,12 +31,15 @@ def get_service_info_mock(service_type, name):
|
||||
properties={b'macaddress': b'ABCDEF012345'})
|
||||
|
||||
|
||||
def get_homekit_info_mock(service_type, name):
|
||||
def get_homekit_info_mock(model):
|
||||
"""Return homekit info for get_service_info."""
|
||||
return ServiceInfo(
|
||||
service_type, name, address=b'\n\x00\x00\x14', port=80, weight=0,
|
||||
priority=0, server='name.local.',
|
||||
properties={b'md': b'LIFX Bulb'})
|
||||
def mock_homekit_info(service_type, name):
|
||||
return ServiceInfo(
|
||||
service_type, name, address=b'\n\x00\x00\x14', port=80, weight=0,
|
||||
priority=0, server='name.local.',
|
||||
properties={b'md': model.encode()})
|
||||
|
||||
return mock_homekit_info
|
||||
|
||||
|
||||
async def test_setup(hass, mock_zeroconf):
|
||||
@@ -54,7 +57,7 @@ async def test_setup(hass, mock_zeroconf):
|
||||
assert len(mock_config_flow.mock_calls) == len(zc_gen.ZEROCONF) * 2
|
||||
|
||||
|
||||
async def test_homekit(hass, mock_zeroconf):
|
||||
async def test_homekit_match_partial(hass, mock_zeroconf):
|
||||
"""Test configured options for a device are loaded via config entry."""
|
||||
with patch.dict(
|
||||
zc_gen.ZEROCONF, {
|
||||
@@ -65,10 +68,32 @@ async def test_homekit(hass, mock_zeroconf):
|
||||
) as mock_config_flow, patch.object(
|
||||
zeroconf, 'ServiceBrowser', side_effect=service_update_mock
|
||||
) as mock_service_browser:
|
||||
mock_zeroconf.get_service_info.side_effect = get_homekit_info_mock
|
||||
mock_zeroconf.get_service_info.side_effect = \
|
||||
get_homekit_info_mock("LIFX bulb")
|
||||
assert await async_setup_component(
|
||||
hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}})
|
||||
|
||||
assert len(mock_service_browser.mock_calls) == 1
|
||||
assert len(mock_config_flow.mock_calls) == 2
|
||||
assert mock_config_flow.mock_calls[0][1][0] == 'lifx'
|
||||
|
||||
|
||||
async def test_homekit_match_full(hass, mock_zeroconf):
|
||||
"""Test configured options for a device are loaded via config entry."""
|
||||
with patch.dict(
|
||||
zc_gen.ZEROCONF, {
|
||||
zeroconf.HOMEKIT_TYPE: ["homekit_controller"]
|
||||
}, clear=True
|
||||
), patch.object(
|
||||
hass.config_entries, 'flow'
|
||||
) as mock_config_flow, patch.object(
|
||||
zeroconf, 'ServiceBrowser', side_effect=service_update_mock
|
||||
) as mock_service_browser:
|
||||
mock_zeroconf.get_service_info.side_effect = \
|
||||
get_homekit_info_mock("BSB002")
|
||||
assert await async_setup_component(
|
||||
hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}})
|
||||
|
||||
assert len(mock_service_browser.mock_calls) == 1
|
||||
assert len(mock_config_flow.mock_calls) == 2
|
||||
assert mock_config_flow.mock_calls[0][1][0] == 'hue'
|
||||
|
||||
Reference in New Issue
Block a user