Offer local control option when there are multiple zeroconf homekit matches (#62649)
This commit is contained in:
parent
411fcad798
commit
ee375ff42d
2 changed files with 76 additions and 19 deletions
|
@ -541,7 +541,7 @@ async def test_homekit_match_partial_dash(hass, mock_async_zeroconf):
|
|||
),
|
||||
) as mock_service_browser, patch(
|
||||
"homeassistant.components.zeroconf.AsyncServiceInfo",
|
||||
side_effect=get_homekit_info_mock("Rachio-fa46ba", HOMEKIT_STATUS_UNPAIRED),
|
||||
side_effect=get_homekit_info_mock("Smart Bridge-001", HOMEKIT_STATUS_UNPAIRED),
|
||||
):
|
||||
assert await async_setup_component(hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}})
|
||||
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
|
||||
|
@ -549,7 +549,7 @@ async def test_homekit_match_partial_dash(hass, mock_async_zeroconf):
|
|||
|
||||
assert len(mock_service_browser.mock_calls) == 1
|
||||
assert len(mock_config_flow.mock_calls) == 1
|
||||
assert mock_config_flow.mock_calls[0][1][0] == "rachio"
|
||||
assert mock_config_flow.mock_calls[0][1][0] == "lutron_caseta"
|
||||
|
||||
|
||||
async def test_homekit_match_partial_fnmatch(hass, mock_async_zeroconf):
|
||||
|
@ -650,7 +650,7 @@ async def test_homekit_invalid_paring_status(hass, mock_async_zeroconf):
|
|||
),
|
||||
) as mock_service_browser, patch(
|
||||
"homeassistant.components.zeroconf.AsyncServiceInfo",
|
||||
side_effect=get_homekit_info_mock("tado", b"invalid"),
|
||||
side_effect=get_homekit_info_mock("Smart Bridge", b"invalid"),
|
||||
):
|
||||
assert await async_setup_component(hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}})
|
||||
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
|
||||
|
@ -658,7 +658,7 @@ async def test_homekit_invalid_paring_status(hass, mock_async_zeroconf):
|
|||
|
||||
assert len(mock_service_browser.mock_calls) == 1
|
||||
assert len(mock_config_flow.mock_calls) == 1
|
||||
assert mock_config_flow.mock_calls[0][1][0] == "tado"
|
||||
assert mock_config_flow.mock_calls[0][1][0] == "lutron_caseta"
|
||||
|
||||
|
||||
async def test_homekit_not_paired(hass, mock_async_zeroconf):
|
||||
|
@ -686,6 +686,40 @@ async def test_homekit_not_paired(hass, mock_async_zeroconf):
|
|||
assert mock_config_flow.mock_calls[0][1][0] == "homekit_controller"
|
||||
|
||||
|
||||
async def test_homekit_controller_still_discovered_unpaired_for_cloud(
|
||||
hass, mock_async_zeroconf
|
||||
):
|
||||
"""Test discovery is still passed to homekit controller when unpaired and discovered by cloud integration.
|
||||
|
||||
Since we prefer local control, if the integration that is being discovered
|
||||
is cloud AND the homekit device is unpaired we still want to discovery it
|
||||
"""
|
||||
with patch.dict(
|
||||
zc_gen.ZEROCONF,
|
||||
{"_hap._udp.local.": [{"domain": "homekit_controller"}]},
|
||||
clear=True,
|
||||
), patch.object(
|
||||
hass.config_entries.flow, "async_init"
|
||||
) as mock_config_flow, patch.object(
|
||||
zeroconf,
|
||||
"HaAsyncServiceBrowser",
|
||||
side_effect=lambda *args, **kwargs: service_update_mock(
|
||||
*args, **kwargs, limit_service="_hap._udp.local."
|
||||
),
|
||||
) as mock_service_browser, patch(
|
||||
"homeassistant.components.zeroconf.AsyncServiceInfo",
|
||||
side_effect=get_homekit_info_mock("Rachio-xyz", HOMEKIT_STATUS_UNPAIRED),
|
||||
):
|
||||
assert await async_setup_component(hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}})
|
||||
hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
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] == "rachio"
|
||||
assert mock_config_flow.mock_calls[1][1][0] == "homekit_controller"
|
||||
|
||||
|
||||
async def test_info_from_service_non_utf8(hass):
|
||||
"""Test info_from_service handles non UTF-8 property keys and values correctly."""
|
||||
service_type = "_test._tcp.local."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue