forked from home-assistant/core
On removal, only unload config entry if loaded (#16844)
* On removal, only unload config entry if loaded * Fix test
This commit is contained in:
@@ -340,7 +340,10 @@ class ConfigEntries:
|
|||||||
entry = self._entries.pop(found)
|
entry = self._entries.pop(found)
|
||||||
self._async_schedule_save()
|
self._async_schedule_save()
|
||||||
|
|
||||||
|
if entry.state == ENTRY_STATE_LOADED:
|
||||||
unloaded = await entry.async_unload(self.hass)
|
unloaded = await entry.async_unload(self.hass)
|
||||||
|
else:
|
||||||
|
unloaded = True
|
||||||
|
|
||||||
device_registry = await \
|
device_registry = await \
|
||||||
self.hass.helpers.device_registry.async_get_registry()
|
self.hass.helpers.device_registry.async_get_registry()
|
||||||
|
@@ -72,7 +72,7 @@ def test_get_entries(hass, client):
|
|||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def test_remove_entry(hass, client):
|
def test_remove_entry(hass, client):
|
||||||
"""Test removing an entry via the API."""
|
"""Test removing an entry via the API."""
|
||||||
entry = MockConfigEntry(domain='demo')
|
entry = MockConfigEntry(domain='demo', state=core_ce.ENTRY_STATE_LOADED)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
resp = yield from client.delete(
|
resp = yield from client.delete(
|
||||||
'/api/config/config_entries/entry/{}'.format(entry.entry_id))
|
'/api/config/config_entries/entry/{}'.format(entry.entry_id))
|
||||||
|
@@ -49,7 +49,11 @@ def test_remove_entry(hass, manager):
|
|||||||
MockModule('comp', async_unload_entry=mock_unload_entry))
|
MockModule('comp', async_unload_entry=mock_unload_entry))
|
||||||
|
|
||||||
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
||||||
MockConfigEntry(domain='test', entry_id='test2').add_to_manager(manager)
|
MockConfigEntry(
|
||||||
|
domain='test',
|
||||||
|
entry_id='test2',
|
||||||
|
state=config_entries.ENTRY_STATE_LOADED
|
||||||
|
).add_to_manager(manager)
|
||||||
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
||||||
|
|
||||||
assert [item.entry_id for item in manager.async_entries()] == \
|
assert [item.entry_id for item in manager.async_entries()] == \
|
||||||
@@ -79,7 +83,11 @@ def test_remove_entry_raises(hass, manager):
|
|||||||
MockModule('comp', async_unload_entry=mock_unload_entry))
|
MockModule('comp', async_unload_entry=mock_unload_entry))
|
||||||
|
|
||||||
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
||||||
MockConfigEntry(domain='test', entry_id='test2').add_to_manager(manager)
|
MockConfigEntry(
|
||||||
|
domain='test',
|
||||||
|
entry_id='test2',
|
||||||
|
state=config_entries.ENTRY_STATE_LOADED
|
||||||
|
).add_to_manager(manager)
|
||||||
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
||||||
|
|
||||||
assert [item.entry_id for item in manager.async_entries()] == \
|
assert [item.entry_id for item in manager.async_entries()] == \
|
||||||
@@ -94,6 +102,33 @@ def test_remove_entry_raises(hass, manager):
|
|||||||
['test1', 'test3']
|
['test1', 'test3']
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def test_remove_entry_if_not_loaded(hass, manager):
|
||||||
|
"""Test that we can remove an entry."""
|
||||||
|
mock_unload_entry = MagicMock(return_value=mock_coro(True))
|
||||||
|
|
||||||
|
loader.set_component(
|
||||||
|
hass, 'test',
|
||||||
|
MockModule('comp', async_unload_entry=mock_unload_entry))
|
||||||
|
|
||||||
|
MockConfigEntry(domain='test', entry_id='test1').add_to_manager(manager)
|
||||||
|
MockConfigEntry(domain='test', entry_id='test2').add_to_manager(manager)
|
||||||
|
MockConfigEntry(domain='test', entry_id='test3').add_to_manager(manager)
|
||||||
|
|
||||||
|
assert [item.entry_id for item in manager.async_entries()] == \
|
||||||
|
['test1', 'test2', 'test3']
|
||||||
|
|
||||||
|
result = yield from manager.async_remove('test2')
|
||||||
|
|
||||||
|
assert result == {
|
||||||
|
'require_restart': False
|
||||||
|
}
|
||||||
|
assert [item.entry_id for item in manager.async_entries()] == \
|
||||||
|
['test1', 'test3']
|
||||||
|
|
||||||
|
assert len(mock_unload_entry.mock_calls) == 0
|
||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def test_add_entry_calls_setup_entry(hass, manager):
|
def test_add_entry_calls_setup_entry(hass, manager):
|
||||||
"""Test we call setup_config_entry."""
|
"""Test we call setup_config_entry."""
|
||||||
|
Reference in New Issue
Block a user