mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 13:57:10 +00:00
Add tests for Roomba Options flow (#114666)
* Add tests for Roomba Options flow * Fix
This commit is contained in:
parent
448f8a9568
commit
2175cd6039
@ -6,12 +6,18 @@ from unittest.mock import MagicMock, PropertyMock, patch
|
|||||||
import pytest
|
import pytest
|
||||||
from roombapy import RoombaConnectionError, RoombaInfo
|
from roombapy import RoombaConnectionError, RoombaInfo
|
||||||
|
|
||||||
from homeassistant import config_entries, data_entry_flow
|
|
||||||
from homeassistant.components import dhcp, zeroconf
|
from homeassistant.components import dhcp, zeroconf
|
||||||
from homeassistant.components.roomba import config_flow
|
from homeassistant.components.roomba import config_flow
|
||||||
from homeassistant.components.roomba.const import CONF_BLID, CONF_CONTINUOUS, DOMAIN
|
from homeassistant.components.roomba.const import CONF_BLID, CONF_CONTINUOUS, DOMAIN
|
||||||
|
from homeassistant.config_entries import (
|
||||||
|
SOURCE_DHCP,
|
||||||
|
SOURCE_IGNORE,
|
||||||
|
SOURCE_USER,
|
||||||
|
SOURCE_ZEROCONF,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_DELAY, CONF_HOST, CONF_PASSWORD
|
from homeassistant.const import CONF_DELAY, CONF_HOST, CONF_PASSWORD
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.data_entry_flow import FlowResultType
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
@ -20,7 +26,7 @@ VALID_CONFIG = {CONF_HOST: MOCK_IP, CONF_BLID: "BLID", CONF_PASSWORD: "password"
|
|||||||
|
|
||||||
DISCOVERY_DEVICES = [
|
DISCOVERY_DEVICES = [
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_DHCP,
|
SOURCE_DHCP,
|
||||||
dhcp.DhcpServiceInfo(
|
dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="501479ddeeff",
|
macaddress="501479ddeeff",
|
||||||
@ -28,7 +34,7 @@ DISCOVERY_DEVICES = [
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_DHCP,
|
SOURCE_DHCP,
|
||||||
dhcp.DhcpServiceInfo(
|
dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="80a589ddeeff",
|
macaddress="80a589ddeeff",
|
||||||
@ -36,7 +42,7 @@ DISCOVERY_DEVICES = [
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_ZEROCONF,
|
SOURCE_ZEROCONF,
|
||||||
zeroconf.ZeroconfServiceInfo(
|
zeroconf.ZeroconfServiceInfo(
|
||||||
ip_address=ip_address(MOCK_IP),
|
ip_address=ip_address(MOCK_IP),
|
||||||
ip_addresses=[ip_address(MOCK_IP)],
|
ip_addresses=[ip_address(MOCK_IP)],
|
||||||
@ -48,7 +54,7 @@ DISCOVERY_DEVICES = [
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
config_entries.SOURCE_ZEROCONF,
|
SOURCE_ZEROCONF,
|
||||||
zeroconf.ZeroconfServiceInfo(
|
zeroconf.ZeroconfServiceInfo(
|
||||||
ip_address=ip_address(MOCK_IP),
|
ip_address=ip_address(MOCK_IP),
|
||||||
ip_addresses=[ip_address(MOCK_IP)],
|
ip_addresses=[ip_address(MOCK_IP)],
|
||||||
@ -157,11 +163,11 @@ async def test_form_user_discovery_and_password_fetch(hass: HomeAssistant) -> No
|
|||||||
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "user"
|
assert result["step_id"] == "user"
|
||||||
|
|
||||||
@ -170,7 +176,7 @@ async def test_form_user_discovery_and_password_fetch(hass: HomeAssistant) -> No
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
assert result2["step_id"] == "link"
|
assert result2["step_id"] == "link"
|
||||||
|
|
||||||
@ -194,7 +200,7 @@ async def test_form_user_discovery_and_password_fetch(hass: HomeAssistant) -> No
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result3["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result3["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result3["title"] == "robot_name"
|
assert result3["title"] == "robot_name"
|
||||||
assert result3["result"].unique_id == "BLID"
|
assert result3["result"].unique_id == "BLID"
|
||||||
assert result3["data"] == {
|
assert result3["data"] == {
|
||||||
@ -217,11 +223,11 @@ async def test_form_user_discovery_skips_known(hass: HomeAssistant) -> None:
|
|||||||
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -239,11 +245,11 @@ async def test_form_user_no_devices_found_discovery_aborts_already_configured(
|
|||||||
_mocked_no_devices_found_discovery,
|
_mocked_no_devices_found_discovery,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -252,7 +258,7 @@ async def test_form_user_no_devices_found_discovery_aborts_already_configured(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.ABORT
|
assert result2["type"] is FlowResultType.ABORT
|
||||||
assert result2["reason"] == "already_configured"
|
assert result2["reason"] == "already_configured"
|
||||||
|
|
||||||
|
|
||||||
@ -270,11 +276,11 @@ async def test_form_user_discovery_manual_and_auto_password_fetch(
|
|||||||
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "user"
|
assert result["step_id"] == "user"
|
||||||
|
|
||||||
@ -283,7 +289,7 @@ async def test_form_user_discovery_manual_and_auto_password_fetch(
|
|||||||
{CONF_HOST: None},
|
{CONF_HOST: None},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
assert result2["step_id"] == "manual"
|
assert result2["step_id"] == "manual"
|
||||||
|
|
||||||
@ -296,7 +302,7 @@ async def test_form_user_discovery_manual_and_auto_password_fetch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result3["type"] == data_entry_flow.FlowResultType.FORM
|
assert result3["type"] is FlowResultType.FORM
|
||||||
assert result3["errors"] is None
|
assert result3["errors"] is None
|
||||||
|
|
||||||
with (
|
with (
|
||||||
@ -319,7 +325,7 @@ async def test_form_user_discovery_manual_and_auto_password_fetch(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result4["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result4["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result4["title"] == "robot_name"
|
assert result4["title"] == "robot_name"
|
||||||
assert result4["result"].unique_id == "BLID"
|
assert result4["result"].unique_id == "BLID"
|
||||||
assert result4["data"] == {
|
assert result4["data"] == {
|
||||||
@ -345,11 +351,11 @@ async def test_form_user_discover_fails_aborts_already_configured(
|
|||||||
_mocked_failed_discovery,
|
_mocked_failed_discovery,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -358,7 +364,7 @@ async def test_form_user_discover_fails_aborts_already_configured(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.ABORT
|
assert result2["type"] is FlowResultType.ABORT
|
||||||
assert result2["reason"] == "already_configured"
|
assert result2["reason"] == "already_configured"
|
||||||
|
|
||||||
|
|
||||||
@ -371,11 +377,11 @@ async def test_form_user_discovery_manual_and_auto_password_fetch_but_cannot_con
|
|||||||
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "user"
|
assert result["step_id"] == "user"
|
||||||
|
|
||||||
@ -384,7 +390,7 @@ async def test_form_user_discovery_manual_and_auto_password_fetch_but_cannot_con
|
|||||||
{CONF_HOST: None},
|
{CONF_HOST: None},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
assert result2["step_id"] == "manual"
|
assert result2["step_id"] == "manual"
|
||||||
|
|
||||||
@ -398,7 +404,7 @@ async def test_form_user_discovery_manual_and_auto_password_fetch_but_cannot_con
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result3["type"] == data_entry_flow.FlowResultType.ABORT
|
assert result3["type"] is FlowResultType.ABORT
|
||||||
assert result3["reason"] == "cannot_connect"
|
assert result3["reason"] == "cannot_connect"
|
||||||
|
|
||||||
|
|
||||||
@ -417,11 +423,11 @@ async def test_form_user_discovery_no_devices_found_and_auto_password_fetch(
|
|||||||
_mocked_no_devices_found_discovery,
|
_mocked_no_devices_found_discovery,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -433,7 +439,7 @@ async def test_form_user_discovery_no_devices_found_and_auto_password_fetch(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
|
|
||||||
with (
|
with (
|
||||||
@ -456,7 +462,7 @@ async def test_form_user_discovery_no_devices_found_and_auto_password_fetch(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result3["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result3["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result3["title"] == "robot_name"
|
assert result3["title"] == "robot_name"
|
||||||
assert result3["result"].unique_id == "BLID"
|
assert result3["result"].unique_id == "BLID"
|
||||||
assert result3["data"] == {
|
assert result3["data"] == {
|
||||||
@ -484,11 +490,11 @@ async def test_form_user_discovery_no_devices_found_and_password_fetch_fails(
|
|||||||
_mocked_no_devices_found_discovery,
|
_mocked_no_devices_found_discovery,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -500,7 +506,7 @@ async def test_form_user_discovery_no_devices_found_and_password_fetch_fails(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
@ -529,7 +535,7 @@ async def test_form_user_discovery_no_devices_found_and_password_fetch_fails(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result4["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result4["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result4["title"] == "myroomba"
|
assert result4["title"] == "myroomba"
|
||||||
assert result4["result"].unique_id == "BLID"
|
assert result4["result"].unique_id == "BLID"
|
||||||
assert result4["data"] == {
|
assert result4["data"] == {
|
||||||
@ -558,11 +564,11 @@ async def test_form_user_discovery_not_devices_found_and_password_fetch_fails_an
|
|||||||
_mocked_no_devices_found_discovery,
|
_mocked_no_devices_found_discovery,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -574,7 +580,7 @@ async def test_form_user_discovery_not_devices_found_and_password_fetch_fails_an
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
@ -603,7 +609,7 @@ async def test_form_user_discovery_not_devices_found_and_password_fetch_fails_an
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result4["type"] == data_entry_flow.FlowResultType.FORM
|
assert result4["type"] is FlowResultType.FORM
|
||||||
assert result4["errors"] == {"base": "cannot_connect"}
|
assert result4["errors"] == {"base": "cannot_connect"}
|
||||||
assert len(mock_setup_entry.mock_calls) == 0
|
assert len(mock_setup_entry.mock_calls) == 0
|
||||||
|
|
||||||
@ -622,11 +628,11 @@ async def test_form_user_discovery_and_password_fetch_gets_connection_refused(
|
|||||||
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
"homeassistant.components.roomba.config_flow.RoombaDiscovery", _mocked_discovery
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": SOURCE_USER}
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "user"
|
assert result["step_id"] == "user"
|
||||||
|
|
||||||
@ -635,7 +641,7 @@ async def test_form_user_discovery_and_password_fetch_gets_connection_refused(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
assert result2["step_id"] == "link"
|
assert result2["step_id"] == "link"
|
||||||
|
|
||||||
@ -665,7 +671,7 @@ async def test_form_user_discovery_and_password_fetch_gets_connection_refused(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result4["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result4["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result4["title"] == "myroomba"
|
assert result4["title"] == "myroomba"
|
||||||
assert result4["result"].unique_id == "BLID"
|
assert result4["result"].unique_id == "BLID"
|
||||||
assert result4["data"] == {
|
assert result4["data"] == {
|
||||||
@ -701,7 +707,7 @@ async def test_dhcp_discovery_and_roomba_discovery_finds(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "link"
|
assert result["step_id"] == "link"
|
||||||
assert result["description_placeholders"] == {"name": "robot_name"}
|
assert result["description_placeholders"] == {"name": "robot_name"}
|
||||||
@ -726,7 +732,7 @@ async def test_dhcp_discovery_and_roomba_discovery_finds(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result2["title"] == "robot_name"
|
assert result2["title"] == "robot_name"
|
||||||
assert result2["result"].unique_id == "BLID"
|
assert result2["result"].unique_id == "BLID"
|
||||||
assert result2["data"] == {
|
assert result2["data"] == {
|
||||||
@ -755,12 +761,12 @@ async def test_dhcp_discovery_falls_back_to_manual(
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=discovery_data,
|
data=discovery_data,
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "user"
|
assert result["step_id"] == "user"
|
||||||
|
|
||||||
@ -769,7 +775,7 @@ async def test_dhcp_discovery_falls_back_to_manual(
|
|||||||
{},
|
{},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
assert result2["step_id"] == "manual"
|
assert result2["step_id"] == "manual"
|
||||||
|
|
||||||
@ -781,7 +787,7 @@ async def test_dhcp_discovery_falls_back_to_manual(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result3["type"] == data_entry_flow.FlowResultType.FORM
|
assert result3["type"] is FlowResultType.FORM
|
||||||
assert result3["errors"] is None
|
assert result3["errors"] is None
|
||||||
|
|
||||||
with (
|
with (
|
||||||
@ -804,7 +810,7 @@ async def test_dhcp_discovery_falls_back_to_manual(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result4["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result4["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result4["title"] == "robot_name"
|
assert result4["title"] == "robot_name"
|
||||||
assert result4["result"].unique_id == "BLID"
|
assert result4["result"].unique_id == "BLID"
|
||||||
assert result4["data"] == {
|
assert result4["data"] == {
|
||||||
@ -834,12 +840,12 @@ async def test_dhcp_discovery_no_devices_falls_back_to_manual(
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=discovery_data,
|
data=discovery_data,
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] is None
|
assert result["errors"] is None
|
||||||
assert result["step_id"] == "manual"
|
assert result["step_id"] == "manual"
|
||||||
|
|
||||||
@ -851,7 +857,7 @@ async def test_dhcp_discovery_no_devices_falls_back_to_manual(
|
|||||||
{CONF_HOST: MOCK_IP},
|
{CONF_HOST: MOCK_IP},
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert result2["type"] == data_entry_flow.FlowResultType.FORM
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["errors"] is None
|
assert result2["errors"] is None
|
||||||
|
|
||||||
with (
|
with (
|
||||||
@ -874,7 +880,7 @@ async def test_dhcp_discovery_no_devices_falls_back_to_manual(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result3["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result3["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result3["title"] == "robot_name"
|
assert result3["title"] == "robot_name"
|
||||||
assert result3["result"].unique_id == "BLID"
|
assert result3["result"].unique_id == "BLID"
|
||||||
assert result3["data"] == {
|
assert result3["data"] == {
|
||||||
@ -890,9 +896,7 @@ async def test_dhcp_discovery_no_devices_falls_back_to_manual(
|
|||||||
async def test_dhcp_discovery_with_ignored(hass: HomeAssistant) -> None:
|
async def test_dhcp_discovery_with_ignored(hass: HomeAssistant) -> None:
|
||||||
"""Test ignored entries do not break checking for existing entries."""
|
"""Test ignored entries do not break checking for existing entries."""
|
||||||
|
|
||||||
config_entry = MockConfigEntry(
|
config_entry = MockConfigEntry(domain=DOMAIN, data={}, source=SOURCE_IGNORE)
|
||||||
domain=DOMAIN, data={}, source=config_entries.SOURCE_IGNORE
|
|
||||||
)
|
|
||||||
config_entry.add_to_hass(hass)
|
config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
@ -900,7 +904,7 @@ async def test_dhcp_discovery_with_ignored(hass: HomeAssistant) -> None:
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -909,7 +913,7 @@ async def test_dhcp_discovery_with_ignored(hass: HomeAssistant) -> None:
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == "form"
|
assert result["type"] is FlowResultType.FORM
|
||||||
|
|
||||||
|
|
||||||
async def test_dhcp_discovery_already_configured_host(hass: HomeAssistant) -> None:
|
async def test_dhcp_discovery_already_configured_host(hass: HomeAssistant) -> None:
|
||||||
@ -923,7 +927,7 @@ async def test_dhcp_discovery_already_configured_host(hass: HomeAssistant) -> No
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -932,7 +936,7 @@ async def test_dhcp_discovery_already_configured_host(hass: HomeAssistant) -> No
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == "abort"
|
assert result["type"] is FlowResultType.ABORT
|
||||||
assert result["reason"] == "already_configured"
|
assert result["reason"] == "already_configured"
|
||||||
|
|
||||||
|
|
||||||
@ -949,7 +953,7 @@ async def test_dhcp_discovery_already_configured_blid(hass: HomeAssistant) -> No
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -958,7 +962,7 @@ async def test_dhcp_discovery_already_configured_blid(hass: HomeAssistant) -> No
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == "abort"
|
assert result["type"] is FlowResultType.ABORT
|
||||||
assert result["reason"] == "already_configured"
|
assert result["reason"] == "already_configured"
|
||||||
|
|
||||||
|
|
||||||
@ -975,7 +979,7 @@ async def test_dhcp_discovery_not_irobot(hass: HomeAssistant) -> None:
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -984,7 +988,7 @@ async def test_dhcp_discovery_not_irobot(hass: HomeAssistant) -> None:
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result["type"] == "abort"
|
assert result["type"] is FlowResultType.ABORT
|
||||||
assert result["reason"] == "not_irobot_device"
|
assert result["reason"] == "not_irobot_device"
|
||||||
|
|
||||||
|
|
||||||
@ -996,7 +1000,7 @@ async def test_dhcp_discovery_partial_hostname(hass: HomeAssistant) -> None:
|
|||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -1013,7 +1017,7 @@ async def test_dhcp_discovery_partial_hostname(hass: HomeAssistant) -> None:
|
|||||||
):
|
):
|
||||||
result2 = await hass.config_entries.flow.async_init(
|
result2 = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -1022,7 +1026,7 @@ async def test_dhcp_discovery_partial_hostname(hass: HomeAssistant) -> None:
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result2["type"] == "form"
|
assert result2["type"] is FlowResultType.FORM
|
||||||
assert result2["step_id"] == "link"
|
assert result2["step_id"] == "link"
|
||||||
|
|
||||||
current_flows = hass.config_entries.flow.async_progress()
|
current_flows = hass.config_entries.flow.async_progress()
|
||||||
@ -1034,7 +1038,7 @@ async def test_dhcp_discovery_partial_hostname(hass: HomeAssistant) -> None:
|
|||||||
):
|
):
|
||||||
result3 = await hass.config_entries.flow.async_init(
|
result3 = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": config_entries.SOURCE_DHCP},
|
context={"source": SOURCE_DHCP},
|
||||||
data=dhcp.DhcpServiceInfo(
|
data=dhcp.DhcpServiceInfo(
|
||||||
ip=MOCK_IP,
|
ip=MOCK_IP,
|
||||||
macaddress="aabbccddeeff",
|
macaddress="aabbccddeeff",
|
||||||
@ -1043,9 +1047,45 @@ async def test_dhcp_discovery_partial_hostname(hass: HomeAssistant) -> None:
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert result3["type"] == "abort"
|
assert result3["type"] is FlowResultType.ABORT
|
||||||
assert result3["reason"] == "short_blid"
|
assert result3["reason"] == "short_blid"
|
||||||
|
|
||||||
current_flows = hass.config_entries.flow.async_progress()
|
current_flows = hass.config_entries.flow.async_progress()
|
||||||
assert len(current_flows) == 1
|
assert len(current_flows) == 1
|
||||||
assert current_flows[0]["flow_id"] == result2["flow_id"]
|
assert current_flows[0]["flow_id"] == result2["flow_id"]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_options_flow(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
) -> None:
|
||||||
|
"""Test config flow options."""
|
||||||
|
|
||||||
|
config_entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
data=VALID_CONFIG,
|
||||||
|
unique_id="BLID",
|
||||||
|
)
|
||||||
|
config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.roomba.async_setup_entry",
|
||||||
|
return_value=True,
|
||||||
|
):
|
||||||
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
result = await hass.config_entries.options.async_init(config_entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result["type"] is FlowResultType.FORM
|
||||||
|
assert result["step_id"] == "init"
|
||||||
|
|
||||||
|
result = await hass.config_entries.options.async_configure(
|
||||||
|
result["flow_id"],
|
||||||
|
user_input={CONF_CONTINUOUS: True, CONF_DELAY: 1},
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||||
|
assert result["data"] == {CONF_CONTINUOUS: True, CONF_DELAY: 1}
|
||||||
|
assert config_entry.options == {CONF_CONTINUOUS: True, CONF_DELAY: 1}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user