Automatically generate config flow list (#23802)

* Add config flow to manifest.json

* Still load config flows via config flow platform

* Fix typo

* Lint

* Update config_flows.py"

* Catch import error when setting up entry

* Lint

* Fix tests

* Fix imports

* Lint

* Fix Unifi tests

* Fix translation test

* Add homekit_controller config flow
This commit is contained in:
Paulus Schoutsen 2019-05-13 01:16:55 -07:00 committed by GitHub
parent b8cbd39985
commit 1e22c8daca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
106 changed files with 742 additions and 440 deletions

View file

@ -2,7 +2,12 @@
from unittest.mock import Mock, patch
from homeassistant.components import unifi
from homeassistant.components.unifi import config_flow
from homeassistant.setup import async_setup_component
from homeassistant.components.unifi.const import (
CONF_POE_CONTROL, CONF_CONTROLLER, CONF_SITE_ID)
from homeassistant.const import (
CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME, CONF_VERIFY_SSL)
from tests.common import mock_coro, MockConfigEntry
@ -137,7 +142,7 @@ async def test_unload_entry(hass):
async def test_flow_works(hass, aioclient_mock):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
with patch('aiounifi.Controller') as mock_controller:
@ -157,11 +162,11 @@ async def test_flow_works(hass, aioclient_mock):
})
await flow.async_step_user(user_input={
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
unifi.CONF_PORT: 1234,
unifi.CONF_VERIFY_SSL: True
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
CONF_PORT: 1234,
CONF_VERIFY_SSL: True
})
result = await flow.async_step_site(user_input={})
@ -173,27 +178,27 @@ async def test_flow_works(hass, aioclient_mock):
assert result['type'] == 'create_entry'
assert result['title'] == 'site name'
assert result['data'] == {
unifi.CONF_CONTROLLER: {
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
unifi.CONF_PORT: 1234,
unifi.CONF_SITE_ID: 'default',
unifi.CONF_VERIFY_SSL: True
CONF_CONTROLLER: {
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
CONF_PORT: 1234,
CONF_SITE_ID: 'default',
CONF_VERIFY_SSL: True
},
unifi.CONF_POE_CONTROL: True
CONF_POE_CONTROL: True
}
async def test_controller_multiple_sites(hass):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
flow.config = {
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
}
flow.sites = {
'site1': {
@ -215,7 +220,7 @@ async def test_controller_multiple_sites(hass):
async def test_controller_site_already_configured(hass):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
entry = MockConfigEntry(domain=unifi.DOMAIN, data={
@ -227,9 +232,9 @@ async def test_controller_site_already_configured(hass):
entry.add_to_hass(hass)
flow.config = {
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
}
flow.desc = 'site name'
flow.sites = {
@ -245,7 +250,7 @@ async def test_controller_site_already_configured(hass):
async def test_user_permissions_low(hass, aioclient_mock):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
with patch('aiounifi.Controller') as mock_controller:
@ -265,11 +270,11 @@ async def test_user_permissions_low(hass, aioclient_mock):
})
await flow.async_step_user(user_input={
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
unifi.CONF_PORT: 1234,
unifi.CONF_VERIFY_SSL: True
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
CONF_PORT: 1234,
CONF_VERIFY_SSL: True
})
result = await flow.async_step_site(user_input={})
@ -279,16 +284,16 @@ async def test_user_permissions_low(hass, aioclient_mock):
async def test_user_credentials_faulty(hass, aioclient_mock):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
with patch.object(unifi, 'get_controller',
with patch.object(config_flow, 'get_controller',
side_effect=unifi.errors.AuthenticationRequired):
result = await flow.async_step_user({
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
unifi.CONF_SITE_ID: 'default',
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
CONF_SITE_ID: 'default',
})
assert result['type'] == 'form'
@ -297,16 +302,16 @@ async def test_user_credentials_faulty(hass, aioclient_mock):
async def test_controller_is_unavailable(hass, aioclient_mock):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
with patch.object(unifi, 'get_controller',
with patch.object(config_flow, 'get_controller',
side_effect=unifi.errors.CannotConnect):
result = await flow.async_step_user({
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
unifi.CONF_SITE_ID: 'default',
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
CONF_SITE_ID: 'default',
})
assert result['type'] == 'form'
@ -315,16 +320,16 @@ async def test_controller_is_unavailable(hass, aioclient_mock):
async def test_controller_unkown_problem(hass, aioclient_mock):
"""Test config flow."""
flow = unifi.UnifiFlowHandler()
flow = config_flow.UnifiFlowHandler()
flow.hass = hass
with patch.object(unifi, 'get_controller',
with patch.object(config_flow, 'get_controller',
side_effect=Exception):
result = await flow.async_step_user({
unifi.CONF_HOST: '1.2.3.4',
unifi.CONF_USERNAME: 'username',
unifi.CONF_PASSWORD: 'password',
unifi.CONF_SITE_ID: 'default',
CONF_HOST: '1.2.3.4',
CONF_USERNAME: 'username',
CONF_PASSWORD: 'password',
CONF_SITE_ID: 'default',
})
assert result['type'] == 'abort'