Fix exception in roomba discovery when the device does not respond on the first try (#49360)
parent
e10c105058
commit
252bcabbea
|
@ -328,9 +328,8 @@ async def _async_discover_roombas(hass, host):
|
|||
discovery = _async_get_roomba_discovery()
|
||||
try:
|
||||
if host:
|
||||
discovered = [
|
||||
await hass.async_add_executor_job(discovery.get, host)
|
||||
]
|
||||
device = await hass.async_add_executor_job(discovery.get, host)
|
||||
discovered = [device] if device else []
|
||||
else:
|
||||
discovered = await hass.async_add_executor_job(discovery.get_all)
|
||||
except OSError:
|
||||
|
|
|
@ -687,7 +687,7 @@ async def test_dhcp_discovery_and_roomba_discovery_finds(hass, discovery_data):
|
|||
|
||||
@pytest.mark.parametrize("discovery_data", DHCP_DISCOVERY_DEVICES_WITHOUT_MATCHING_IP)
|
||||
async def test_dhcp_discovery_falls_back_to_manual(hass, discovery_data):
|
||||
"""Test we can process the discovery from dhcp but roomba discovery cannot find the device."""
|
||||
"""Test we can process the discovery from dhcp but roomba discovery cannot find the specific device."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
|
||||
mocked_roomba = _create_mocked_roomba(
|
||||
|
@ -755,6 +755,68 @@ async def test_dhcp_discovery_falls_back_to_manual(hass, discovery_data):
|
|||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
@pytest.mark.parametrize("discovery_data", DHCP_DISCOVERY_DEVICES_WITHOUT_MATCHING_IP)
|
||||
async def test_dhcp_discovery_no_devices_falls_back_to_manual(hass, discovery_data):
|
||||
"""Test we can process the discovery from dhcp but roomba discovery cannot find any devices."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
|
||||
mocked_roomba = _create_mocked_roomba(
|
||||
roomba_connected=True,
|
||||
master_state={"state": {"reported": {"name": "myroomba"}}},
|
||||
)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.roomba.config_flow.RoombaDiscovery",
|
||||
_mocked_no_devices_found_discovery,
|
||||
):
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_DHCP},
|
||||
data=discovery_data,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||
assert result["errors"] is None
|
||||
assert result["step_id"] == "manual"
|
||||
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{CONF_HOST: MOCK_IP, CONF_BLID: "blid"},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||
assert result2["errors"] is None
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.roomba.config_flow.Roomba",
|
||||
return_value=mocked_roomba,
|
||||
), patch(
|
||||
"homeassistant.components.roomba.config_flow.RoombaPassword",
|
||||
_mocked_getpassword,
|
||||
), patch(
|
||||
"homeassistant.components.roomba.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
result3 = await hass.config_entries.flow.async_configure(
|
||||
result2["flow_id"],
|
||||
{},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result3["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result3["title"] == "myroomba"
|
||||
assert result3["result"].unique_id == "BLID"
|
||||
assert result3["data"] == {
|
||||
CONF_BLID: "BLID",
|
||||
CONF_CONTINUOUS: True,
|
||||
CONF_DELAY: 1,
|
||||
CONF_HOST: MOCK_IP,
|
||||
CONF_PASSWORD: "password",
|
||||
}
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_dhcp_discovery_with_ignored(hass):
|
||||
"""Test ignored entries do not break checking for existing entries."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
|
|
Loading…
Reference in New Issue