Add support for after_dependencies (#23148)
* Add support for after_dependencies * Remove assert false" * Fix types
This commit is contained in:
parent
7b1cbeaf80
commit
10e8f4f70a
9 changed files with 296 additions and 60 deletions
|
@ -9,7 +9,9 @@ import homeassistant.config as config_util
|
|||
from homeassistant import bootstrap
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
from tests.common import patch_yaml_files, get_test_config_dir, mock_coro
|
||||
from tests.common import (
|
||||
patch_yaml_files, get_test_config_dir, mock_coro, mock_integration,
|
||||
MockModule)
|
||||
|
||||
ORIG_TIMEZONE = dt_util.DEFAULT_TIME_ZONE
|
||||
VERSION_PATH = os.path.join(get_test_config_dir(), config_util.VERSION_FILE)
|
||||
|
@ -87,3 +89,154 @@ async def test_load_hassio(hass):
|
|||
|
||||
with patch.dict(os.environ, {'HASSIO': '1'}):
|
||||
assert bootstrap._get_domains(hass, {}) == {'hassio'}
|
||||
|
||||
|
||||
async def test_empty_setup(hass):
|
||||
"""Test an empty set up loads the core."""
|
||||
await bootstrap._async_set_up_integrations(hass, {})
|
||||
for domain in bootstrap.CORE_INTEGRATIONS:
|
||||
assert domain in hass.config.components, domain
|
||||
|
||||
|
||||
async def test_core_failure_aborts(hass, caplog):
|
||||
"""Test failing core setup aborts further setup."""
|
||||
with patch('homeassistant.components.homeassistant.async_setup',
|
||||
return_value=mock_coro(False)):
|
||||
await bootstrap._async_set_up_integrations(hass, {
|
||||
'group': {}
|
||||
})
|
||||
|
||||
assert 'core failed to initialize' in caplog.text
|
||||
# We aborted early, group not set up
|
||||
assert 'group' not in hass.config.components
|
||||
|
||||
|
||||
async def test_setting_up_config(hass, caplog):
|
||||
"""Test we set up domains in config."""
|
||||
await bootstrap._async_set_up_integrations(hass, {
|
||||
'group hello': {},
|
||||
'homeassistant': {}
|
||||
})
|
||||
|
||||
assert 'group' in hass.config.components
|
||||
|
||||
|
||||
async def test_setup_after_deps_all_present(hass, caplog):
|
||||
"""Test after_dependencies when all present."""
|
||||
caplog.set_level(logging.DEBUG)
|
||||
order = []
|
||||
|
||||
def gen_domain_setup(domain):
|
||||
async def async_setup(hass, config):
|
||||
order.append(domain)
|
||||
return True
|
||||
|
||||
return async_setup
|
||||
|
||||
mock_integration(hass, MockModule(
|
||||
domain='root',
|
||||
async_setup=gen_domain_setup('root')
|
||||
))
|
||||
mock_integration(hass, MockModule(
|
||||
domain='first_dep',
|
||||
async_setup=gen_domain_setup('first_dep'),
|
||||
partial_manifest={
|
||||
'after_dependencies': ['root']
|
||||
}
|
||||
))
|
||||
mock_integration(hass, MockModule(
|
||||
domain='second_dep',
|
||||
async_setup=gen_domain_setup('second_dep'),
|
||||
partial_manifest={
|
||||
'after_dependencies': ['first_dep']
|
||||
}
|
||||
))
|
||||
|
||||
await bootstrap._async_set_up_integrations(hass, {
|
||||
'root': {},
|
||||
'first_dep': {},
|
||||
'second_dep': {},
|
||||
})
|
||||
|
||||
assert 'root' in hass.config.components
|
||||
assert 'first_dep' in hass.config.components
|
||||
assert 'second_dep' in hass.config.components
|
||||
assert order == ['root', 'first_dep', 'second_dep']
|
||||
|
||||
|
||||
async def test_setup_after_deps_not_trigger_load(hass, caplog):
|
||||
"""Test after_dependencies does not trigger loading it."""
|
||||
caplog.set_level(logging.DEBUG)
|
||||
order = []
|
||||
|
||||
def gen_domain_setup(domain):
|
||||
async def async_setup(hass, config):
|
||||
order.append(domain)
|
||||
return True
|
||||
|
||||
return async_setup
|
||||
|
||||
mock_integration(hass, MockModule(
|
||||
domain='root',
|
||||
async_setup=gen_domain_setup('root')
|
||||
))
|
||||
mock_integration(hass, MockModule(
|
||||
domain='first_dep',
|
||||
async_setup=gen_domain_setup('first_dep'),
|
||||
partial_manifest={
|
||||
'after_dependencies': ['root']
|
||||
}
|
||||
))
|
||||
mock_integration(hass, MockModule(
|
||||
domain='second_dep',
|
||||
async_setup=gen_domain_setup('second_dep'),
|
||||
partial_manifest={
|
||||
'after_dependencies': ['first_dep']
|
||||
}
|
||||
))
|
||||
|
||||
await bootstrap._async_set_up_integrations(hass, {
|
||||
'root': {},
|
||||
'second_dep': {},
|
||||
})
|
||||
|
||||
assert 'root' in hass.config.components
|
||||
assert 'first_dep' not in hass.config.components
|
||||
assert 'second_dep' in hass.config.components
|
||||
assert order == ['root', 'second_dep']
|
||||
|
||||
|
||||
async def test_setup_after_deps_not_present(hass, caplog):
|
||||
"""Test after_dependencies when referenced integration doesn't exist."""
|
||||
caplog.set_level(logging.DEBUG)
|
||||
order = []
|
||||
|
||||
def gen_domain_setup(domain):
|
||||
async def async_setup(hass, config):
|
||||
order.append(domain)
|
||||
return True
|
||||
|
||||
return async_setup
|
||||
|
||||
mock_integration(hass, MockModule(
|
||||
domain='root',
|
||||
async_setup=gen_domain_setup('root')
|
||||
))
|
||||
mock_integration(hass, MockModule(
|
||||
domain='second_dep',
|
||||
async_setup=gen_domain_setup('second_dep'),
|
||||
partial_manifest={
|
||||
'after_dependencies': ['first_dep']
|
||||
}
|
||||
))
|
||||
|
||||
await bootstrap._async_set_up_integrations(hass, {
|
||||
'root': {},
|
||||
'first_dep': {},
|
||||
'second_dep': {},
|
||||
})
|
||||
|
||||
assert 'root' in hass.config.components
|
||||
assert 'first_dep' not in hass.config.components
|
||||
assert 'second_dep' in hass.config.components
|
||||
assert order == ['root', 'second_dep']
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue